From b22ddcc3654eaaf713becb80015e95f7ea8bab34 Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 3 Apr 2023 13:23:18 +0800 Subject: [PATCH 01/74] build: optimize --- ci/config/terra_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/config/terra_config.yaml b/ci/config/terra_config.yaml index 79a96cc51..d6a3495b1 100644 --- a/ci/config/terra_config.yaml +++ b/ci/config/terra_config.yaml @@ -1,4 +1,4 @@ -include: shared:rtc_4.1.0/shared_configs.yaml +include: shared:rtc_4.2.0/shared_configs.yaml language: ts From 1db0306aed294e44617296ab0a8384e71208b2ad Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 3 Apr 2023 13:33:07 +0800 Subject: [PATCH 02/74] build: update iris to 4.2.0-dev.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9d40bc439..b74db1388 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.1.1-rc.1_DCG_Windows_Video_20230215_1032.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.1.1-rc.1_DCG_Mac_Video_20230215_1034.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.1_DCG_Windows_Video_20230330_1057.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.1_DCG_Mac_Video_20230330_1057.zip" } } From b0c8ffa451d778243436c909e66eddc2870087b8 Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 3 Apr 2023 13:43:20 +0800 Subject: [PATCH 03/74] build: update iris to 4.2.0-dev.1 --- lefthook.yml | 50 ++++++++++++++++---------------------------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/lefthook.yml b/lefthook.yml index af073d455..065a491b0 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -1,34 +1,16 @@ -# EXAMPLE USAGE -# Refer for explanation to following link: -# https://github.com/evilmartians/lefthook/blob/master/docs/full_guide.md -# -# pre-push: -# commands: -# packages-audit: -# tags: frontend security -# run: yarn audit -# gems-audit: -# tags: backend security -# run: bundle audit -# -# pre-commit: -# parallel: true -# commands: -# eslint: -# glob: "*.{js,ts}" -# run: yarn eslint {staged_files} -# rubocop: -# tags: backend style -# glob: "*.rb" -# exclude: "application.rb|routes.rb" -# run: bundle exec rubocop --force-exclusion {all_files} -# govet: -# tags: backend style -# files: git ls-files -m -# glob: "*.go" -# run: go vet {files} -# scripts: -# "hello.js": -# runner: node -# "any.go": -# runner: go run +pre-commit: + parallel: true + commands: + lint: + files: git diff --name-only @{push} + glob: "*.{js,ts,jsx,tsx}" + run: npx eslint {files} + types: + files: git diff --name-only @{push} + glob: "*.{js,ts, jsx, tsx}" + run: npx tsc --noEmit +commit-msg: + parallel: true + commands: + commitlint: + run: npx commitlint --edit From 1c8cf346bd6e4b97ea578af71a30742e1ce068c0 Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 3 Apr 2023 13:48:19 +0800 Subject: [PATCH 04/74] build: update iris to 4.2.0-dev.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b74db1388..2d1fdbe11 100644 --- a/package.json +++ b/package.json @@ -58,9 +58,9 @@ "devDependencies": { "@commitlint/config-conventional": "^17.0.2", "@evilmartians/lefthook": "^1.2.2", + "@release-it/conventional-changelog": "^5.0.0", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", - "@release-it/conventional-changelog": "^5.0.0", "cmake-js": "6.3.2", "commitlint": "^17.0.2", "eslint": "^8.4.1", From 6d0ea534449ec541f36c81ee4b32b7d8481648ab Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 3 Apr 2023 14:38:19 +0800 Subject: [PATCH 05/74] ci: optimize --- .github/workflows/terra.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/terra.yml b/.github/workflows/terra.yml index 117537b78..011b74e0a 100644 --- a/.github/workflows/terra.yml +++ b/.github/workflows/terra.yml @@ -40,10 +40,6 @@ jobs: target-path: ${{ github.workspace }} github-token: ${{ secrets.GH_TOKEN }} - - name: Clean - run: | - rm -rf - - name: Create pull request uses: AgoraIO-Extensions/actions/.github/actions/pr@main with: @@ -53,5 +49,5 @@ jobs: terra-update pull-request-title: | [AUTO] Generate code by terra - add-paths: src + add-paths: ts github-token: ${{ secrets.GH_TOKEN }} From a37bae20f0b20e480b576cebec4caf43d54b8fbb Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Mon, 3 Apr 2023 16:17:32 +0800 Subject: [PATCH 06/74] [AUTO] Generate code by terra (#967) Co-authored-by: LichKing-2234 --- ts/Private/AgoraBase.ts | 346 ++++++---- ts/Private/AgoraMediaBase.ts | 231 ++++--- ts/Private/IAgoraMediaEngine.ts | 63 +- ts/Private/IAgoraMediaPlayer.ts | 29 +- ts/Private/IAgoraMediaRecorder.ts | 36 +- ts/Private/IAgoraMusicContentCenter.ts | 84 ++- ts/Private/IAgoraRtcEngine.ts | 408 ++++++------ ts/Private/IAgoraRtcEngineEx.ts | 39 +- ts/Private/impl/AgoraBaseImpl.ts | 6 +- ts/Private/impl/AgoraMediaBaseImpl.ts | 68 +- ts/Private/impl/IAgoraMediaEngineImpl.ts | 179 ++---- ts/Private/impl/IAgoraMediaPlayerImpl.ts | 41 +- ts/Private/impl/IAgoraMediaRecorderImpl.ts | 52 +- .../impl/IAgoraMusicContentCenterImpl.ts | 53 +- ts/Private/impl/IAgoraRtcEngineExImpl.ts | 120 +++- ts/Private/impl/IAgoraRtcEngineImpl.ts | 590 ++++++++++-------- ts/Private/ti/AgoraMediaBase-ti.ts | 19 +- ts/Private/ti/IAgoraMediaPlayer-ti.ts | 5 - ts/Private/ti/IAgoraMusicContentCenter-ti.ts | 8 +- ts/Private/ti/IAgoraRtcEngine-ti.ts | 2 +- 20 files changed, 1353 insertions(+), 1026 deletions(-) diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index 14917c135..bfea99e9e 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -1,5 +1,5 @@ import './extension/AgoraBaseExtension'; -import { MediaSourceType, RenderModeType } from './AgoraMediaBase'; +import { VideoSourceType, RenderModeType } from './AgoraMediaBase'; /** * The channel profile. */ @@ -545,10 +545,6 @@ export enum InterfaceIdType { * @ignore */ AgoraIidLocalSpatialAudio = 11, - /** - * The IMediaRecorder interface class. - */ - AgoraIidMediaRecorder = 12, /** * @ignore */ @@ -561,6 +557,10 @@ export enum InterfaceIdType { * @ignore */ AgoraIidMusicContentCenter = 15, + /** + * @ignore + */ + AgoraIidH265Transcoder = 16, } /** @@ -783,6 +783,24 @@ export class VideoDimensions { height?: number; } +/** + * @ignore + */ +export enum ScreenCaptureCapabilityLevel { + /** + * @ignore + */ + ScreenCaptureCapabilityLevel15Fps = 0, + /** + * @ignore + */ + ScreenCaptureCapabilityLevel30Fps = 1, + /** + * @ignore + */ + ScreenCaptureCapabilityLevel60Fps = 2, +} + /** * Video codec types. */ @@ -1190,6 +1208,46 @@ export enum VideoMirrorModeType { VideoMirrorModeDisabled = 2, } +/** + * @ignore + */ +export enum CodecCapMask { + /** + * @ignore + */ + CodecCapMaskNone = 0, + /** + * @ignore + */ + CodecCapMaskHwDec = 1 << 0, + /** + * @ignore + */ + CodecCapMaskHwEnc = 1 << 1, + /** + * @ignore + */ + CodecCapMaskSwDec = 1 << 2, + /** + * @ignore + */ + CodecCapMaskSwEnc = 1 << 3, +} + +/** + * @ignore + */ +export class CodecCapInfo { + /** + * @ignore + */ + codec_type?: VideoCodecType; + /** + * @ignore + */ + codec_cap_mask?: number; +} + /** * Video encoder configurations. */ @@ -1488,68 +1546,6 @@ export class RtcStats { rxPacketLossRate?: number; } -/** - * The capture type of the custom video source. - */ -export enum VideoSourceType { - /** - * @ignore - */ - VideoSourceCameraPrimary = 0, - /** - * The camera. - */ - VideoSourceCamera = 0, - /** - * The secondary camera. - */ - VideoSourceCameraSecondary = 1, - /** - * The primary screen. - */ - VideoSourceScreenPrimary = 2, - /** - * The screen. - */ - VideoSourceScreen = 2, - /** - * The secondary screen. - */ - VideoSourceScreenSecondary = 3, - /** - * The custom video source. - */ - VideoSourceCustom = 4, - /** - * The video source from the media player. - */ - VideoSourceMediaPlayer = 5, - /** - * The video source is a PNG image. - */ - VideoSourceRtcImagePng = 6, - /** - * The video source is a JPEG image. - */ - VideoSourceRtcImageJpeg = 7, - /** - * The video source is a GIF image. - */ - VideoSourceRtcImageGif = 8, - /** - * The video source is remote video acquired by the network. - */ - VideoSourceRemote = 9, - /** - * A transcoded video source. - */ - VideoSourceTranscoded = 10, - /** - * An unknown video source. - */ - VideoSourceUnknown = 100, -} - /** * The user role in the interactive live streaming. */ @@ -1647,69 +1643,21 @@ export enum ExperiencePoorReason { } /** - * Audio statistics of the remote user. + * @ignore */ -export class RemoteAudioStats { +export enum AudioAinsMode { /** - * The user ID of the remote user. - */ - uid?: number; - /** - * The quality of the audio stream sent by the user. See QualityType . - */ - quality?: number; - /** - * The network delay (ms) from the sender to the receiver. - */ - networkTransportDelay?: number; - /** - * The network delay (ms) from the audio receiver to the jitter buffer.When the receiving end is an audience member and audienceLatencyLevel of ClientRoleOptions is 1, this parameter does not take effect. - */ - jitterBufferDelay?: number; - /** - * The frame loss rate (%) of the remote audio stream in the reported interval. - */ - audioLossRate?: number; - /** - * The number of audio channels. - */ - numChannels?: number; - /** - * The sampling rate of the received audio stream in the reported interval. - */ - receivedSampleRate?: number; - /** - * The average bitrate (Kbps) of the received audio stream in the reported interval. - */ - receivedBitrate?: number; - /** - * The total freeze time (ms) of the remote audio stream after the remote user joins the channel. In a session, audio freeze occurs when the audio frame loss rate reaches 4%. - */ - totalFrozenTime?: number; - /** - * The total audio freeze time as a percentage (%) of the total time when the audio is available. The audio is considered available when the remote user neither stops sending the audio stream nor disables the audio module after joining the channel. - */ - frozenRate?: number; - /** - * The quality of the remote audio stream in the reported interval. The quality is determined by the Agora real-time audio MOS (Mean Opinion Score) measurement method. The return value range is [0, 500]. Dividing the return value by 100 gets the MOS score, which ranges from 0 to 5. The higher the score, the better the audio quality.The subjective perception of audio quality corresponding to the Agora real-time audio MOS scores is as follows:MOS scorePerception of audio qualityGreater than 4Excellent. The audio sounds clear and smooth.From 3.5 to 4Good. The audio has some perceptible impairment but still sounds clear.From 3 to 3.5Fair. The audio freezes occasionally and requires attentive listening.From 2.5 to 3Poor. The audio sounds choppy and requires considerable effort to understand.From 2 to 2.5Bad. The audio has occasional noise. Consecutive audio dropouts occur, resulting in some information loss. The users can communicate only with difficulty.Less than 2Very bad. The audio has persistent noise. Consecutive audio dropouts are frequent, resulting in severe information loss. Communication is nearly impossible. - */ - mosValue?: number; - /** - * The total active time (ms) between the start of the audio call and the callback of the remote user.The active time refers to the total duration of the remote user without the mute state. - */ - totalActiveTime?: number; - /** - * The total duration (ms) of the remote audio stream. + * @ignore */ - publishDuration?: number; + AinsModeBalanced = 0, /** - * The Quality of Experience (QoE) of the local user when receiving a remote audio stream. See ExperienceQualityType . + * @ignore */ - qoeQuality?: number; + AinsModeAggressive = 1, /** - * Reasons why the QoE of the local user when receiving a remote audio stream is poor. See ExperiencePoorReason . + * @ignore */ - qualityChangedReason?: number; + AinsModeUltralowlatency = 2, } /** @@ -1838,6 +1786,20 @@ export enum ScreenScenarioType { ScreenScenarioRdc = 4, } +/** + * @ignore + */ +export enum VideoApplicationScenarioType { + /** + * @ignore + */ + ApplicationScenarioGeneral = 0, + /** + * @ignore + */ + ApplicationScenarioMeeting = 1, +} + /** * The brightness level of the video image captured by the local camera. */ @@ -1979,9 +1941,9 @@ export enum LocalVideoStreamError { */ LocalVideoStreamErrorCaptureFailure = 4, /** - * 5: The local video encoding fails. + * @ignore */ - LocalVideoStreamErrorEncodeFailure = 5, + LocalVideoStreamErrorCodecNotSupport = 5, /** * @ignore */ @@ -2178,6 +2140,10 @@ export enum RemoteVideoStateReason { * @ignore */ RemoteVideoStateReasonSdkInBackground = 12, + /** + * @ignore + */ + RemoteVideoStateReasonCodecNotSupport = 13, } /** @@ -2760,7 +2726,7 @@ export class TranscodingVideoStream { /** * The source type of video for the video mixing on the local client. See VideoSourceType . */ - sourceType?: MediaSourceType; + sourceType?: VideoSourceType; /** * The ID of the remote user.Use this parameter only when the source type of the video for the video mixing on the local client is VideoSourceRemote. */ @@ -2769,6 +2735,10 @@ export class TranscodingVideoStream { * The URL of the image. */ imageUrl?: string; + /** + * @ignore + */ + mediaPlayerId?: number; /** * The horizontal displacement of the top-left corner of the video for the video mixing on the client relative to the top-left corner (origin) of the canvas for this video mixing. */ @@ -2810,7 +2780,7 @@ export class LocalTranscoderConfiguration { /** * The video streams for the video mixing on the local client. See TranscodingVideoStream . */ - VideoInputStreams?: TranscodingVideoStream[]; + videoInputStreams?: TranscodingVideoStream[]; /** * The encoding configuration of the mixed video stream after the video mixing on the local client. See VideoEncoderConfiguration . */ @@ -2821,6 +2791,40 @@ export class LocalTranscoderConfiguration { syncWithPrimaryCamera?: boolean; } +/** + * @ignore + */ +export enum VideoTranscoderError { + /** + * @ignore + */ + VtErrOk = 0, + /** + * @ignore + */ + VtErrVideoSourceNotReady = 1, + /** + * @ignore + */ + VtErrInvalidVideoSourceType = 2, + /** + * @ignore + */ + VtErrInvalidImagePath = 3, + /** + * @ignore + */ + VtErrUnsupportImageFormat = 4, + /** + * @ignore + */ + VtErrInvalidLayout = 5, + /** + * @ignore + */ + VtErrInternal = 20, +} + /** * Configurations of the last-mile network test. */ @@ -3159,6 +3163,10 @@ export class VideoCanvas { * @ignore */ cropArea?: Rectangle; + /** + * @ignore + */ + enableAlphaMask?: boolean; } /** @@ -3311,6 +3319,10 @@ export class ColorEnhanceOptions { * The type of the custom background image. */ export enum BackgroundSourceType { + /** + * @ignore + */ + BackgroundNone = 0, /** * 1: (Default) The background image is a solid color. */ @@ -3323,6 +3335,10 @@ export enum BackgroundSourceType { * The background image is the blurred background. */ BackgroundBlur = 3, + /** + * @ignore + */ + BackgroundVideo = 4, } /** @@ -3393,6 +3409,34 @@ export class SegmentationProperty { greenCapacity?: number; } +/** + * @ignore + */ +export enum AudioTrackType { + /** + * @ignore + */ + AudioTrackInvalid = -1, + /** + * @ignore + */ + AudioTrackMixable = 0, + /** + * @ignore + */ + AudioTrackDirect = 1, +} + +/** + * @ignore + */ +export class AudioTrackConfig { + /** + * @ignore + */ + enableLocalPlayback?: boolean; +} + /** * The options for SDK preset voice beautifier effects. */ @@ -3566,6 +3610,50 @@ export enum VoiceConversionPreset { * A deep voice. To avoid audio distortion, ensure that you use this enumerator to process a male-sounding voice. */ VoiceChangerBass = 0x03010400, + /** + * @ignore + */ + VoiceChangerCartoon = 0x03010500, + /** + * @ignore + */ + VoiceChangerChildlike = 0x03010600, + /** + * @ignore + */ + VoiceChangerPhoneOperator = 0x03010700, + /** + * @ignore + */ + VoiceChangerMonster = 0x03010800, + /** + * @ignore + */ + VoiceChangerTransformers = 0x03010900, + /** + * @ignore + */ + VoiceChangerGroot = 0x03010a00, + /** + * @ignore + */ + VoiceChangerDarthVader = 0x03010b00, + /** + * @ignore + */ + VoiceChangerIronLady = 0x03010c00, + /** + * @ignore + */ + VoiceChangerShinChan = 0x03010d00, + /** + * @ignore + */ + VoiceChangerGirlishMan = 0x03010e00, + /** + * @ignore + */ + VoiceChangerChipmunk = 0x03010f00, } /** @@ -4289,6 +4377,10 @@ export class EchoTestConfiguration { * The channel name that identifies each audio and video call loop. To ensure proper loop test functionality, the channel name passed in to identify each loop test cannot be the same when users of the same project (App ID) perform audio and video call loop tests on different devices. */ channelId?: string; + /** + * @ignore + */ + intervalInSeconds?: number; } /** diff --git a/ts/Private/AgoraMediaBase.ts b/ts/Private/AgoraMediaBase.ts index aefc2a3a3..29cbed3a0 100644 --- a/ts/Private/AgoraMediaBase.ts +++ b/ts/Private/AgoraMediaBase.ts @@ -1,5 +1,83 @@ import './extension/AgoraMediaBaseExtension'; import { EncodedVideoFrameInfo } from './AgoraBase'; +/** + * The capture type of the custom video source. + */ +export enum VideoSourceType { + /** + * @ignore + */ + VideoSourceCameraPrimary = 0, + /** + * The camera. + */ + VideoSourceCamera = 0, + /** + * The secondary camera. + */ + VideoSourceCameraSecondary = 1, + /** + * The primary screen. + */ + VideoSourceScreenPrimary = 2, + /** + * The screen. + */ + VideoSourceScreen = 2, + /** + * The secondary screen. + */ + VideoSourceScreenSecondary = 3, + /** + * The custom video source. + */ + VideoSourceCustom = 4, + /** + * The video source from the media player. + */ + VideoSourceMediaPlayer = 5, + /** + * The video source is a PNG image. + */ + VideoSourceRtcImagePng = 6, + /** + * The video source is a JPEG image. + */ + VideoSourceRtcImageJpeg = 7, + /** + * The video source is a GIF image. + */ + VideoSourceRtcImageGif = 8, + /** + * The video source is remote video acquired by the network. + */ + VideoSourceRemote = 9, + /** + * A transcoded video source. + */ + VideoSourceTranscoded = 10, + /** + * @ignore + */ + VideoSourceCameraThird = 11, + /** + * @ignore + */ + VideoSourceCameraFourth = 12, + /** + * @ignore + */ + VideoSourceScreenThird = 13, + /** + * @ignore + */ + VideoSourceScreenFourth = 14, + /** + * An unknown video source. + */ + VideoSourceUnknown = 100, +} + /** * The type of the audio route. */ @@ -374,6 +452,24 @@ export enum RenderModeType { RenderModeAdaptive = 3, } +/** + * @ignore + */ +export enum CameraVideoSourceType { + /** + * @ignore + */ + CameraSourceFront = 0, + /** + * @ignore + */ + CameraSourceBack = 1, + /** + * @ignore + */ + VideoSourceUnspecified = 2, +} + /** * @ignore */ @@ -474,6 +570,10 @@ export class ExternalVideoFrame { * This parameter only applies to video data in Texture format. The MetaData size. The default value is 0. */ metadata_size?: number; + /** + * @ignore + */ + alphaBuffer?: Uint8Array; } /** @@ -549,6 +649,10 @@ export class VideoFrame { * @ignore */ alphaBuffer?: Uint8Array; + /** + * @ignore + */ + pixelBuffer?: Uint8Array; } /** @@ -587,6 +691,19 @@ export enum VideoModulePosition { PositionPreEncoder = 1 << 2, } +/** + * @ignore + */ +export interface IAudioPcmFrameSink { + /** + * Occurs each time the player receives an audio frame. + * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. + * + * @param frame Audio frame information. See AudioPcmFrame . + */ + onFrame?(frame: AudioPcmFrame): void; +} + /** * Audio frame type. */ @@ -869,7 +986,7 @@ export interface IVideoFrameObserver { * @returns * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. */ - onCaptureVideoFrame?(videoFrame: VideoFrame): boolean; + onCaptureVideoFrame?(type: VideoSourceType, videoFrame: VideoFrame): boolean; /** * Occurs each time the SDK receives a video frame before encoding. @@ -886,71 +1003,10 @@ export interface IVideoFrameObserver { * true: Sets the SDK to receive the video frame. * false: Sets the SDK to discard the video frame. */ - onPreEncodeVideoFrame?(videoFrame: VideoFrame): boolean; - - /** - * Occurs each time the SDK receives a video frame captured by the screen. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data for screen sharing. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.This callback does not support sending processed RGBA video data back to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 - * - * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. - */ - onSecondaryCameraCaptureVideoFrame?(videoFrame: VideoFrame): boolean; - - /** - * Gets the video data captured from the second camera before encoding. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured from the second camera before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 - * - * @returns - * true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. - */ - onSecondaryPreEncodeCameraVideoFrame?(videoFrame: VideoFrame): boolean; - - /** - * Occurs each time the SDK receives a video frame captured by the screen. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data for screen sharing. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.This callback does not support sending processed RGBA video data back to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 - * - * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. - */ - onScreenCaptureVideoFrame?(videoFrame: VideoFrame): boolean; - - /** - * Gets the video data captured from the screen before encoding. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured from the screen before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced.This callback does not support sending processed RGBA video data back to the SDK. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 - * - * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. - */ - onPreEncodeScreenVideoFrame?(videoFrame: VideoFrame): boolean; + onPreEncodeVideoFrame?( + type: VideoSourceType, + videoFrame: VideoFrame + ): boolean; /** * @ignore @@ -960,36 +1016,6 @@ export interface IVideoFrameObserver { mediaPlayerId: number ): boolean; - /** - * Occurs each time the SDK receives a video frame captured by the screen. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data for screen sharing. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.This callback does not support sending processed RGBA video data back to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 - * - * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. - */ - onSecondaryScreenCaptureVideoFrame?(videoFrame: VideoFrame): boolean; - - /** - * Gets the video data captured from the second screen before encoding. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured from the second screen before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 - * - * @returns - * true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. - */ - onSecondaryPreEncodeScreenVideoFrame?(videoFrame: VideoFrame): boolean; - /** * Occurs each time the SDK receives a video frame sent by the remote user. * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data sent from the remote end before rendering, and then process it according to the particular scenarios.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. @@ -1172,7 +1198,12 @@ export interface IMediaRecorderObserver { * @param state The current recording state. See RecorderState . * @param error The reason for the state change. See RecorderErrorCode . */ - onRecorderStateChanged?(state: RecorderState, error: RecorderErrorCode): void; + onRecorderStateChanged?( + channelId: string, + uid: number, + state: RecorderState, + error: RecorderErrorCode + ): void; /** * Occurs when the recording information is updated. @@ -1180,5 +1211,9 @@ export interface IMediaRecorderObserver { * * @param info The information about the file that is recorded. See RecorderInfo . */ - onRecorderInfoUpdated?(info: RecorderInfo): void; + onRecorderInfoUpdated?( + channelId: string, + uid: number, + info: RecorderInfo + ): void; } diff --git a/ts/Private/IAgoraMediaEngine.ts b/ts/Private/IAgoraMediaEngine.ts index a8c5eae9c..58e27778f 100644 --- a/ts/Private/IAgoraMediaEngine.ts +++ b/ts/Private/IAgoraMediaEngine.ts @@ -3,12 +3,16 @@ import { IAudioFrameObserver, IVideoFrameObserver, IVideoEncodedFrameObserver, - MediaSourceType, AudioFrame, ExternalVideoSourceType, ExternalVideoFrame, } from './AgoraMediaBase'; -import { SenderOptions, EncodedVideoFrameInfo } from './AgoraBase'; +import { + SenderOptions, + AudioTrackType, + AudioTrackConfig, + EncodedVideoFrameInfo, +} from './AgoraBase'; /** * The channel mode. */ @@ -87,36 +91,7 @@ export abstract class IMediaEngine { * @returns * 0: Success.< 0: Failure. */ - abstract pushAudioFrame( - type: MediaSourceType, - frame: AudioFrame, - wrap?: boolean, - sourceId?: number - ): number; - - /** - * Occurs each time the player receives an audio frame. - * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. - * - * @param frame Audio frame information. See AudioPcmFrame . - */ - abstract pushCaptureAudioFrame(frame: AudioFrame): number; - - /** - * Occurs each time the player receives an audio frame. - * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. - * - * @param frame Audio frame information. See AudioPcmFrame . - */ - abstract pushReverseAudioFrame(frame: AudioFrame): number; - - /** - * Occurs each time the player receives an audio frame. - * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. - * - * @param frame Audio frame information. See AudioPcmFrame . - */ - abstract pushDirectAudioFrame(frame: AudioFrame): number; + abstract pushAudioFrame(frame: AudioFrame, trackId?: number): number; /** * Pulls the remote audio data. @@ -164,11 +139,23 @@ export abstract class IMediaEngine { enabled: boolean, sampleRate: number, channels: number, - sourceNumber?: number, localPlayback?: boolean, publish?: boolean ): number; + /** + * @ignore + */ + abstract createCustomAudioTrack( + trackType: AudioTrackType, + config: AudioTrackConfig + ): number; + + /** + * @ignore + */ + abstract destroyCustomAudioTrack(trackId: number): number; + /** * Sets the external audio sink. * This method applies to scenarios where you want to use external audio data for playback. After you set the external audio sink, you can call pullAudioFrame to pull remote audio frames. The app can process the remote audio and play it with the audio effects that you want. @@ -190,18 +177,10 @@ export abstract class IMediaEngine { * @ignore */ abstract enableCustomAudioLocalPlayback( - sourceId: number, + trackId: number, enabled: boolean ): number; - /** - * @ignore - */ - abstract setDirectExternalAudioSource( - enable: boolean, - localPlayback?: boolean - ): number; - /** * Pushes the external raw video frame to the SDK. * If you call createCustomVideoTrack method to get the video track ID, set the customVideoTrackId parameter to the video track ID you want to publish in the ChannelMediaOptions of each channel, and set the publishCustomVideoTrack parameter to true, you can call this method to push the unencoded external video frame to the SDK. diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index 5f5007b9d..211eeb903 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -4,7 +4,8 @@ import { RenderModeType, IAudioSpectrumObserver, AudioDualMonoMode, - AudioPcmFrame, + IAudioPcmFrameSink, + RawAudioFrameOpModeType, VideoFrame, } from './AgoraMediaBase'; import { IMediaPlayerSourceObserver } from './IAgoraMediaPlayerSource'; @@ -456,15 +457,12 @@ export abstract class IMediaPlayer { /** * Registers an audio frame observer object. - * You need to implement the IMediaPlayerAudioFrameObserver class in this method and register callbacks according to your scenarios. After you successfully register the video frame observer, the SDK triggers the registered callbacks each time a video frame is received. * - * @param observer The audio frame observer, reporting the reception of each audio frame. See IMediaPlayerAudioFrameObserver . - * - * @returns - * 0: Success.< 0: Failure. + * @param mode The use mode of the audio frame. See RawAudioFrameOpModeType . */ abstract registerAudioFrameObserver( - observer: IMediaPlayerAudioFrameObserver + observer: IAudioPcmFrameSink, + mode?: RawAudioFrameOpModeType ): number; /** @@ -475,9 +473,7 @@ export abstract class IMediaPlayer { * @returns * 0: Success.< 0: Failure. */ - abstract unregisterAudioFrameObserver( - observer: IMediaPlayerAudioFrameObserver - ): number; + abstract unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number; /** * Registers a video frame observer object. @@ -622,19 +618,6 @@ export abstract class IMediaPlayerCacheManager { abstract getCacheFileCount(): number; } -/** - * The audio frame observer for the media player. - */ -export interface IMediaPlayerAudioFrameObserver { - /** - * Occurs each time the player receives an audio frame. - * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. - * - * @param frame Audio frame information. See AudioPcmFrame . - */ - onFrame?(frame: AudioPcmFrame): void; -} - /** * The video frame observer for the media player. */ diff --git a/ts/Private/IAgoraMediaRecorder.ts b/ts/Private/IAgoraMediaRecorder.ts index d456de802..01caee1b8 100644 --- a/ts/Private/IAgoraMediaRecorder.ts +++ b/ts/Private/IAgoraMediaRecorder.ts @@ -1,5 +1,4 @@ import './extension/IAgoraMediaRecorderExtension'; -import { RtcConnection } from './IAgoraRtcEngineEx'; import { IMediaRecorderObserver, MediaRecorderConfiguration, @@ -20,40 +19,21 @@ export abstract class IMediaRecorder { * @returns * 0: Success.< 0: Failure. */ - abstract setMediaRecorderObserver( - connection: RtcConnection, - callback: IMediaRecorderObserver - ): number; + abstract setMediaRecorderObserver(callback: IMediaRecorderObserver): number; /** - * Starts recording the local audio and video. - * After successfully getting the IMediaRecorder object by calling getMediaRecorder , you can call this method to enable the recoridng of the local audio and video.This method can record the audio captured by the local microphone and encoded in AAC format, and the video captured by the local camera and encoded in H.264 format. The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the onRecorderStateChanged(RecorderStateError, RecorderErrorNoStream) callback.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.Call this method after joining a channel. + * Sets the video encoder configuration. + * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. * - * @param connection The connection information. See RtcConnection . - * @param config The recording configuration. See MediaRecorderConfiguration . + * @param config Video profile. See VideoEncoderConfiguration . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. Ensure the following:The specified path of the recording file exists and is writable.The specified format of the recording file is supported.The maximum recording duration is correctly set.-4: IRtcEngine does not support the request. The recording is ongoing or the recording stops because an error occurs.-7: The method is called before IRtcEngine is initialized. - */ - abstract startRecording( - connection: RtcConnection, - config: MediaRecorderConfiguration - ): number; - - /** - * Stops recording the local audio and video. - * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. - * - * @param connection The connection information. See RtcConnection . - * - * @returns - * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. + * 0: Success.< 0: Failure. */ - abstract stopRecording(connection: RtcConnection): number; + abstract startRecording(config: MediaRecorderConfiguration): number; /** - * Release the IMediaRecorder object. - * This method releases the IMediaRecorder object and all resources used by the IRtcEngine object. After calling this method, if you need to start recording again, you need to call getMediaRecorder again to get the IMediaRecorder object. + * @ignore */ - abstract release(): void; + abstract stopRecording(): number; } diff --git a/ts/Private/IAgoraMusicContentCenter.ts b/ts/Private/IAgoraMusicContentCenter.ts index 28b74017d..abecbf5d5 100644 --- a/ts/Private/IAgoraMusicContentCenter.ts +++ b/ts/Private/IAgoraMusicContentCenter.ts @@ -16,6 +16,10 @@ export enum PreloadStatusCode { * @ignore */ KPreloadStatusPreloading = 2, + /** + * @ignore + */ + KPreloadStatusRemoved = 3, } /** @@ -30,6 +34,26 @@ export enum MusicContentCenterStatusCode { * @ignore */ KMusicContentCenterStatusErr = 1, + /** + * @ignore + */ + KMusicContentCenterStatusErrGateway = 2, + /** + * @ignore + */ + KMusicContentCenterStatusErrPermissionAndResource = 3, + /** + * @ignore + */ + KMusicContentCenterStatusErrInternalDataParse = 4, + /** + * @ignore + */ + KMusicContentCenterStatusErrMusicLoading = 5, + /** + * @ignore + */ + KMusicContentCenterStatusErrMusicDecryption = 6, } /** @@ -46,6 +70,34 @@ export class MusicChartInfo { id?: number; } +/** + * @ignore + */ +export enum MusicCacheStatusType { + /** + * @ignore + */ + MusicCacheStatusTypeCached = 0, + /** + * @ignore + */ + MusicCacheStatusTypeCaching = 1, +} + +/** + * @ignore + */ +export class MusicCacheInfo { + /** + * @ignore + */ + songCode?: number; + /** + * @ignore + */ + status?: MusicCacheStatusType; +} + /** * @ignore */ @@ -196,8 +248,8 @@ export interface IMusicContentCenterEventHandler { */ onMusicChartsResult?( requestId: string, - status: MusicContentCenterStatusCode, - result: MusicChartInfo[] + result: MusicChartInfo[], + errorCode: MusicContentCenterStatusCode ): void; /** @@ -205,14 +257,18 @@ export interface IMusicContentCenterEventHandler { */ onMusicCollectionResult?( requestId: string, - status: MusicContentCenterStatusCode, - result: MusicCollection + result: MusicCollection, + errorCode: MusicContentCenterStatusCode ): void; /** * @ignore */ - onLyricResult?(requestId: string, lyricUrl: string): void; + onLyricResult?( + requestId: string, + lyricUrl: string, + errorCode: MusicContentCenterStatusCode + ): void; /** * @ignore @@ -220,9 +276,9 @@ export interface IMusicContentCenterEventHandler { onPreLoadEvent?( songCode: number, percent: number, + lyricUrl: string, status: PreloadStatusCode, - msg: string, - lyricUrl?: string + errorCode: MusicContentCenterStatusCode ): void; } @@ -242,6 +298,10 @@ export class MusicContentCenterConfiguration { * @ignore */ mccUid?: number; + /** + * @ignore + */ + maxCacheSize?: number; } /** @@ -321,6 +381,16 @@ export abstract class IMusicContentCenter { */ abstract preload(songCode: number, jsonOption?: string): number; + /** + * @ignore + */ + abstract removeCache(songCode: number): number; + + /** + * @ignore + */ + abstract getCaches(): { cacheInfo: MusicCacheInfo[]; cacheInfoSize: number }; + /** * @ignore */ diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index a3eae73c7..9913dc3be 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -19,14 +19,12 @@ import { RtcStats, UplinkNetworkInfo, DownlinkNetworkInfo, - VideoSourceType, LocalVideoStreamState, LocalVideoStreamError, RemoteVideoState, RemoteVideoStateReason, UserOfflineReasonType, LocalAudioStats, - RemoteAudioStats, LicenseErrorType, LocalAudioStreamState, LocalAudioStreamError, @@ -52,10 +50,14 @@ import { UploadErrorReason, StreamSubscribeState, StreamPublishState, + TranscodingVideoStream, + VideoTranscoderError, MediaTraceEvent, VideoRenderingTracingInfo, AudioScenarioType, ThreadPriorityType, + CodecCapInfo, + EchoTestConfiguration, LastmileProbeConfig, VideoEncoderConfiguration, BeautyOptions, @@ -65,6 +67,7 @@ import { VirtualBackgroundSource, SegmentationProperty, VideoCanvas, + VideoApplicationScenarioType, AudioProfileType, VideoSubscriptionOptions, AudioRecordingConfiguration, @@ -82,18 +85,20 @@ import { AudioSessionOperationRestriction, DeviceInfo, VideoContentHint, - ScreenScenarioType, ScreenCaptureParameters2, + ScreenScenarioType, LiveTranscoding, LocalTranscoderConfiguration, VideoOrientation, EncryptionConfig, DataStreamConfig, WatermarkOptions, + AudioAinsMode, ChannelMediaRelayConfiguration, } from './AgoraBase'; import { RenderModeType, + VideoSourceType, ContentInspectResult, MediaSourceType, RawAudioFrameOpModeType, @@ -108,10 +113,10 @@ import { } from './IAgoraRhythmPlayer'; import { LogConfig, LogFilterType, LogLevel } from './IAgoraLog'; import { IMediaPlayer } from './IAgoraMediaPlayer'; +import { IMediaRecorder } from './IAgoraMediaRecorder'; import { AudioMixingDualMonoMode, IMediaEngine } from './IAgoraMediaEngine'; import { IAudioDeviceManager } from './IAudioDeviceManager'; import { IMusicContentCenter } from './IAgoraMusicContentCenter'; -import { IMediaRecorder } from './IAgoraMediaRecorder'; import { ILocalSpatialAudioEngine } from './IAgoraSpatialAudio'; /** * Media device types. @@ -141,6 +146,14 @@ export enum MediaDeviceType { * @ignore */ AudioApplicationPlayoutDevice = 4, + /** + * @ignore + */ + AudioVirtualPlayoutDevice = 5, + /** + * @ignore + */ + AudioVirtualRecordingDevice = 6, } /** @@ -451,6 +464,84 @@ export class LocalVideoStats { hwEncoderAccelerating?: number; } +/** + * Audio statistics of the remote user. + */ +export class RemoteAudioStats { + /** + * The user ID of the remote user. + */ + uid?: number; + /** + * The quality of the audio stream sent by the user. See QualityType . + */ + quality?: number; + /** + * The network delay (ms) from the sender to the receiver. + */ + networkTransportDelay?: number; + /** + * The network delay (ms) from the audio receiver to the jitter buffer.When the receiving end is an audience member and audienceLatencyLevel of ClientRoleOptions is 1, this parameter does not take effect. + */ + jitterBufferDelay?: number; + /** + * The frame loss rate (%) of the remote audio stream in the reported interval. + */ + audioLossRate?: number; + /** + * The number of audio channels. + */ + numChannels?: number; + /** + * The sampling rate of the received audio stream in the reported interval. + */ + receivedSampleRate?: number; + /** + * The average bitrate (Kbps) of the received audio stream in the reported interval. + */ + receivedBitrate?: number; + /** + * The total freeze time (ms) of the remote audio stream after the remote user joins the channel. In a session, audio freeze occurs when the audio frame loss rate reaches 4%. + */ + totalFrozenTime?: number; + /** + * The total audio freeze time as a percentage (%) of the total time when the audio is available. The audio is considered available when the remote user neither stops sending the audio stream nor disables the audio module after joining the channel. + */ + frozenRate?: number; + /** + * The quality of the remote audio stream in the reported interval. The quality is determined by the Agora real-time audio MOS (Mean Opinion Score) measurement method. The return value range is [0, 500]. Dividing the return value by 100 gets the MOS score, which ranges from 0 to 5. The higher the score, the better the audio quality.The subjective perception of audio quality corresponding to the Agora real-time audio MOS scores is as follows:MOS scorePerception of audio qualityGreater than 4Excellent. The audio sounds clear and smooth.From 3.5 to 4Good. The audio has some perceptible impairment but still sounds clear.From 3 to 3.5Fair. The audio freezes occasionally and requires attentive listening.From 2.5 to 3Poor. The audio sounds choppy and requires considerable effort to understand.From 2 to 2.5Bad. The audio has occasional noise. Consecutive audio dropouts occur, resulting in some information loss. The users can communicate only with difficulty.Less than 2Very bad. The audio has persistent noise. Consecutive audio dropouts are frequent, resulting in severe information loss. Communication is nearly impossible. + */ + mosValue?: number; + /** + * @ignore + */ + frozenRateByCustomPlcCount?: number; + /** + * @ignore + */ + plcCount?: number; + /** + * The total active time (ms) between the start of the audio call and the callback of the remote user.The active time refers to the total duration of the remote user without the mute state. + */ + totalActiveTime?: number; + /** + * The total duration (ms) of the remote audio stream. + */ + publishDuration?: number; + /** + * The Quality of Experience (QoE) of the local user when receiving a remote audio stream. See ExperienceQualityType . + */ + qoeQuality?: number; + /** + * Reasons why the QoE of the local user when receiving a remote audio stream is poor. See ExperiencePoorReason . + */ + qualityChangedReason?: number; + /** + * @ignore + */ + rxAudioBytes?: number; +} + /** * Statistics of the remote video stream. */ @@ -519,6 +610,10 @@ export class RemoteVideoStats { * @ignore */ mosValue?: number; + /** + * @ignore + */ + rxVideoBytes?: number; } /** @@ -704,16 +799,6 @@ export class PublisherConfiguration { extraInfo?: string; } -/** - * @ignore - */ -export class AudioTrackConfig { - /** - * @ignore - */ - enableLocalPlayback?: boolean; -} - /** * The camera direction. */ @@ -897,6 +982,10 @@ export class ScreenCaptureSourceInfo { * @ignore */ isOccluded?: boolean; + /** + * @ignore + */ + position?: Rectangle; /** * (For Windows only) Whether the window is minimized:true: The window is minimized.false: The window is not minimized. */ @@ -968,22 +1057,10 @@ export class ChannelMediaOptions { * Whether to publish the audio captured from a custom source:true: Publish the audio captured from the custom source.false: (Default) Do not publish the audio captured from the custom source. */ publishCustomAudioTrack?: boolean; - /** - * The ID of the custom audio source to publish. The default value is 0.If you have set sourceNumber in setExternalAudioSource to a value greater than 1, the SDK creates the corresponding number of custom audio tracks and assigns an ID to each audio track, starting from 0. - */ - publishCustomAudioSourceId?: number; - /** - * Whether to enable AEC when publishing the audio captured from a custom source:true: Enable AEC when publishing the audio captured from the custom source.false: (Default) Do not enable AEC when publishing the audio captured from the custom source. - */ - publishCustomAudioTrackEnableAec?: boolean; /** * @ignore */ - publishDirectCustomAudioTrack?: boolean; - /** - * @ignore - */ - publishCustomAudioTrackAec?: boolean; + publishCustomAudioTrackId?: number; /** * Whether to publish the video captured from a custom source:true: Publish the video captured from the custom source.false: (Default) Do not publish the video captured from the custom source. */ @@ -1111,6 +1188,14 @@ export enum ProxyType { * 4: Automatic mode. In this mode, the SDK attempts a direct connection to SD-RTN™ and automatically switches to TCP/TLS 443 if the attempt fails. */ TcpProxyAutoFallbackType = 4, + /** + * @ignore + */ + HttpProxyType = 5, + /** + * @ignore + */ + HttpsProxyType = 6, } /** @@ -1622,16 +1707,6 @@ export interface IRtcEngineEventHandler { enabled: boolean ): void; - /** - * Occurs when a method is executed by the SDK. - * Deprecated:Deprecated as of v4.1.0. This method can neither accurately characterize the specific API method nor represent the execution result of the API.Agora recommends getting the results of the API implementation through relevant channels and media callbacks. For example, after calling the enableLocalAudio method to enable the microphone, the status of the microphone is returned in the onLocalAudioStateChanged callback. - * - * @param err The error code returned by the SDK when the method call fails. If the SDK returns 0, then the method call is successful. - * @param api The method executed by the SDK. - * @param result The result of the method call. - */ - onApiCallExecuted?(err: ErrorCodeType, api: string, result: string): void; - /** * Reports the statistics of the local audio stream. * The SDK triggers this callback once every two seconds. @@ -2289,6 +2364,14 @@ export interface IRtcEngineEventHandler { userAccount: string ): void; + /** + * @ignore + */ + onLocalVideoTranscoderError?( + stream: TranscodingVideoStream, + error: VideoTranscoderError + ): void; + /** * @ignore */ @@ -2413,6 +2496,10 @@ export class RtcEngineContext { * Whether to enable domain name restriction:true: Enables the domain name restriction. This value is suitable for scenarios where IoT devices use IoT cards for network access. The SDK will only connect to servers in the domain name or IP whitelist that has been reported to the operator.false: (Default) Disables the domain name restriction. This value is suitable for most common scenarios. */ domainLimit?: boolean; + /** + * @ignore + */ + autoRegisterAgoraExtensions?: boolean; } /** @@ -2680,6 +2767,11 @@ export abstract class IRtcEngine { */ abstract getErrorDescription(code: number): string; + /** + * @ignore + */ + abstract queryCodecCapability(): { codecInfo: CodecCapInfo[]; size: number }; + /** * Joins a channel with media options. * This method enables users to join a channel. Users in the same channel can talk to each other, and multiple users in the same channel can start a group chat. Users with different App IDs cannot call each other.A successful call of this method triggers the following callbacks:The local client: The onJoinChannelSuccess and onConnectionStateChanged callbacks.The remote client: onUserJoined , if the user joining the channel is in the Communication profile or is a host in the Live-broadcasting profile.When the connection between the client and Agora's server is interrupted due to poor network conditions, the SDK tries reconnecting to the server. When the local client successfully rejoins the channel, the SDK triggers the onRejoinChannelSuccess callback on the local client.This method allows users to join only one channel at a time.Ensure that the app ID you use to generate the token is the same app ID that you pass in the initialize method; otherwise, you may fail to join the channel by token. @@ -2758,15 +2850,15 @@ export abstract class IRtcEngine { ): number; /** - * Starts an audio call test. - * This method starts an audio call test to determine whether the audio devices (for example, headset and speaker) and the network connection are working properly. To conduct the test, let the user speak for a while, and the recording is played back within the set interval. If the user can hear the recording within the interval, the audio devices and network connection are working properly.Call this method before joining a channel.After calling startEchoTest, you must call stopEchoTest to end the test. Otherwise, the app cannot perform the next echo test, and you cannot join the channel.In the live streaming channels, only a host can call this method. + * Starts an audio and video call loop test. + * Before joining a channel, to test whether the user's local sending and receiving streams are normal, you can call this method to perform an audio and video call loop test, which tests whether the audio and video devices and the user's upstream and downstream networks are working properly.After starting the test, the user needs to make a sound or face the camera. The audio or video is output after about two seconds. If the audio playback is normal, the audio device and the user's upstream and downstream networks are working properly; if the video playback is normal, the video device and the user's upstream and downstream networks are working properly.Call this method before joining a channel.After calling this method, call stopEchoTest to end the test; otherwise, the user cannot perform the next audio and video call loop test and cannot join the channel.In live streaming scenarios, this method only applies to hosts. * - * @param intervalInSeconds The time interval (s) between when you speak and when the recording plays back. The value range is [2, 10], and the default value is 10. + * @param config The configuration of the audio and video call loop test. See EchoTestConfiguration . * * @returns * 0: Success.< 0: Failure. */ - abstract startEchoTest(intervalInSeconds?: number): number; + abstract startEchoTest(config: EchoTestConfiguration): number; /** * Stops the audio call test. @@ -2973,6 +3065,11 @@ export abstract class IRtcEngine { */ abstract setupLocalVideo(canvas: VideoCanvas): number; + /** + * @ignore + */ + abstract setVideoScenario(scenarioType: VideoApplicationScenarioType): number; + /** * Enables the audio module. * The audio mode is enabled by default.This method enables the internal engine and can be called anytime after initialization. It is still valid after one leaves channel.This method enables the whole audio module and thus might take a while to take effect. Agora recommends using the following APIs to control the audio module separately: enableLocalAudio : Whether to enable the microphone to create the local audio stream. muteLocalAudioStream : Whether to publish the local audio stream. muteRemoteAudioStream : Whether to subscribe and play the remote audio stream. muteAllRemoteAudioStreams : Whether to subscribe to and play all remote audio streams. @@ -3301,6 +3398,27 @@ export abstract class IRtcEngine { */ abstract destroyMediaPlayer(mediaPlayer: IMediaPlayer): number; + /** + * Occurs when the token expires. + * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call joinChannel to rejoin the channel. + * + * @param connection The connection information. See RtcConnection . + */ + abstract createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder; + + /** + * @ignore + */ + abstract createRemoteMediaRecorder( + channelId: string, + uid: number + ): IMediaRecorder; + + /** + * @ignore + */ + abstract destroyMediaRecorder(mediaRecorder: IMediaRecorder): number; + /** * Starts playing the music file. * This method mixes the specified local or online audio file with the audio from the microphone, or replaces the microphone's audio with the specified local or remote audio file. A successful method call triggers the onAudioMixingStateChanged (AudioMixingStatePlaying) callback. When the audio mixing file playback finishes, the SDK triggers the onAudioMixingStateChanged(AudioMixingStateStopped) callback on the local client.For the audio file formats supported by this method, see What formats of audio files does the Agora RTC SDK support. @@ -3836,6 +3954,11 @@ export abstract class IRtcEngine { */ abstract setLocalVoicePitch(pitch: number): number; + /** + * @ignore + */ + abstract setLocalVoiceFormant(formantRatio: number): number; + /** * Sets the local voice equalization effect. * You can call this method either before or after joining a channel. @@ -3997,54 +4120,14 @@ export abstract class IRtcEngine { streamConfig?: SimulcastStreamConfig ): number; - /** - * @ignore - */ - abstract enableEchoCancellationExternal( - enabled: boolean, - audioSourceDelay: number - ): number; - /** * @ignore */ abstract enableCustomAudioLocalPlayback( - sourceId: number, + trackId: number, enabled: boolean ): number; - /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract startPrimaryCustomAudioTrack(config: AudioTrackConfig): number; - - /** - * @ignore - */ - abstract stopPrimaryCustomAudioTrack(): number; - - /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract startSecondaryCustomAudioTrack(config: AudioTrackConfig): number; - - /** - * @ignore - */ - abstract stopSecondaryCustomAudioTrack(): number; - /** * Sets the format of the captured raw audio data. * Sets the audio format for the onRecordAudioFrame callback.Ensure that you call this method before joining a channel.The SDK calculates the sampling interval based on the samplesPerCall, sampleRate and channel parameters set in this method.Sample interval (sec) = samplePerCall/(sampleRate × channel). Ensure that the sample interval ≥ 0.01 (s). @@ -4237,6 +4320,15 @@ export abstract class IRtcEngine { option: StreamFallbackOptions ): number; + /** + * @ignore + */ + abstract setHighPriorityUserList( + uidList: number[], + uidNum: number, + option: StreamFallbackOptions + ): number; + /** * Enables loopback audio capturing. * If you enable loopback audio capturing, the output of the sound card is mixed into the audio stream sent to the other end.This method applies to the macOS and Windows platforms only.macOS does not support loopback audio capture of the default sound card. If you need to use this function, use a virtual sound card and pass its name to the deviceName parameter. Agora recommends using AgoraALD as the virtual sound card for audio capturing.You can call this method either before or after joining a channel. @@ -4665,17 +4757,6 @@ export abstract class IRtcEngine { */ abstract setScreenCaptureContentHint(contentHint: VideoContentHint): number; - /** - * Sets the screen sharing scenario. - * When you start screen sharing or window sharing, you can call this method to set the screen sharing scenario. The SDK adjusts the video quality and experience of the sharing according to the scenario.This method applies to macOS and Windows only. - * - * @param screenScenario The screen sharing scenario. See ScreenScenarioType . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract setScreenCaptureScenario(screenScenario: ScreenScenarioType): number; - /** * Updates the screen sharing region. * Call this method after starting screen sharing or window sharing. @@ -4711,6 +4792,14 @@ export abstract class IRtcEngine { */ abstract startScreenCapture(captureParams: ScreenCaptureParameters2): number; + /** + * @ignore + */ + abstract startScreenCaptureDesktop( + type: VideoSourceType, + config: ScreenCaptureConfiguration + ): number; + /** * Updates the screen sharing parameters. * This method is for Windows and macOS only.Call this method after starting screen sharing or window sharing. @@ -4722,13 +4811,29 @@ export abstract class IRtcEngine { */ abstract updateScreenCapture(captureParams: ScreenCaptureParameters2): number; + /** + * @ignore + */ + abstract queryScreenCaptureCapability(): number; + + /** + * Sets the screen sharing scenario. + * When you start screen sharing or window sharing, you can call this method to set the screen sharing scenario. The SDK adjusts the video quality and experience of the sharing according to the scenario.This method applies to macOS and Windows only. + * + * @param screenScenario The screen sharing scenario. See ScreenScenarioType . + * + * @returns + * 0: Success.< 0: Failure. + */ + abstract setScreenCaptureScenario(screenScenario: ScreenScenarioType): number; + /** * Stops screen sharing. * * @returns * 0: Success.< 0: Failure. */ - abstract stopScreenCapture(): number; + abstract stopScreenCapture(type?: VideoSourceType): number; /** * Retrieves the call ID. @@ -4845,47 +4950,17 @@ export abstract class IRtcEngine { abstract stopLocalVideoTranscoder(): number; /** - * Starts video capture with a primary camera. - * - * @param config The configuration of the video capture. See CameraCapturerConfiguration . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract startPrimaryCameraCapture( - config: CameraCapturerConfiguration - ): number; - - /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ - abstract startSecondaryCameraCapture( + abstract startCameraCapture( + type: VideoSourceType, config: CameraCapturerConfiguration ): number; /** - * Stops capturing video through the first camera. - * You can call this method to stop capturing video through the first camera after calling startPrimaryCameraCapture .If you are using the local video mixing function, calling this method can cause the local video mixing to be interrupted. - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract stopPrimaryCameraCapture(): number; - - /** - * Stops capturing video through the second camera. - * startSecondaryCameraCapture You can call this method to stop capturing video through the second camera after calling the . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ - abstract stopSecondaryCameraCapture(): number; + abstract stopCameraCapture(type: VideoSourceType): number; /** * Sets the rotation angle of the captured video. @@ -4917,42 +4992,6 @@ export abstract class IRtcEngine { orientation: VideoOrientation ): number; - /** - * Starts sharing the primary screen. - * - * @param config The configuration of the captured screen. See ScreenCaptureConfiguration . - */ - abstract startPrimaryScreenCapture( - config: ScreenCaptureConfiguration - ): number; - - /** - * Starts sharing a secondary screen. - * - * @param config The configuration of the captured screen. See ScreenCaptureConfiguration . - */ - abstract startSecondaryScreenCapture( - config: ScreenCaptureConfiguration - ): number; - - /** - * Stops sharing the first screen. - * After calling startPrimaryScreenCapture , you can call this method to stop sharing the first screen. - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract stopPrimaryScreenCapture(): number; - - /** - * Stops sharing the second screen. - * After calling startSecondaryScreenCapture , you can call this method to stop sharing the secondary screen. - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract stopSecondaryScreenCapture(): number; - /** * Gets the current connection state of the SDK. * You can call this method either before or after joining a channel. @@ -5166,6 +5205,11 @@ export abstract class IRtcEngine { location: string ): number; + /** + * @ignore + */ + abstract setAINSMode(enabled: boolean, mode: AudioAinsMode): number; + /** * Registers a user account. * Once registered, the user account can be used to identify the local user when the user joins the channel. After the registration is successful, the user account can identify the identity of the local user, and the user can use it to join the channel.After the user successfully registers a user account, the SDK triggers the onLocalUserRegistered callback on the local client, reporting the user ID and account of the local user.This method is optional. To join a channel with a user account, you can choose either of the following ways:Call registerLocalUserAccount to create a user account, and then call joinChannelWithUserAccount to join the channel.Call the joinChannelWithUserAccount method to join the channel.The difference between the two ways is that the time elapsed between calling the registerLocalUserAccount method and joining the channel is shorter than directly calling joinChannelWithUserAccount.Ensure that you set the userAccount parameter; otherwise, this method does not take effect.Ensure that the userAccount is unique in the channel.To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a user ID, then ensure all the other users use the user ID too. The same applies to the user account. If a user joins the channel with the Agora Web SDK, ensure that the ID of the user is set to the same parameter type. @@ -5239,6 +5283,13 @@ export abstract class IRtcEngine { */ abstract getUserInfoByUid(uid: number): UserInfo; + /** + * @ignore + */ + abstract startOrUpdateChannelMediaRelay( + configuration: ChannelMediaRelayConfiguration + ): number; + /** * Starts relaying media streams across channels. This method can be used to implement scenarios such as co-host across channels. * After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks, and these callbacks return the state and events of the media stream relay.If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), and the onChannelMediaRelayEvent callback returns RelayEventPacketSentToDestChannel (4), it means that the SDK starts relaying media streams between the source channel and the target channel.If the onChannelMediaRelayStateChanged callback returnsRelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.After a successful method call, if you want to call this method again, ensure that you call the stopChannelMediaRelay method to quit the current relay.The relaying media streams across channels function needs to be enabled by contacting .We do not support string user accounts in this API. @@ -5411,22 +5462,15 @@ export abstract class IRtcEngine { * 0: Success.< 0: Failure. */ abstract adjustCustomAudioPublishVolume( - sourceId: number, + trackId: number, volume: number ): number; /** - * Adjusts the volume of the custom external audio source when it is published in the channel. - * Ensure you have called the setExternalAudioSource method to create an external audio track before calling this method.If you want to change the volume of the audio to be published, you need to call this method again. - * - * @param sourceId The ID of external audio source. If you want to publish a custom external audio source, set this parameter to the ID of the corresponding custom audio track you want to publish. - * @param volume The volume of the audio source. The value can range from 0 to 100. 0 means mute; 100 means the original volume. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract adjustCustomAudioPlayoutVolume( - sourceId: number, + trackId: number, volume: number ): number; @@ -5525,6 +5569,11 @@ export abstract class IRtcEngine { */ abstract enableInstantMediaRendering(): number; + /** + * @ignore + */ + abstract getNtpTimeInMs(): number; + /** * Destroys a video renderer object. * @@ -5583,15 +5632,6 @@ export abstract class IRtcEngine { */ abstract getMediaEngine(): IMediaEngine; - /** - * Gets one IMediaRecorder object. - * Make sure the IRtcEngine is initialized before you call this method. - * - * @returns - * One IMediaRecorder object. - */ - abstract getMediaRecorder(): IMediaRecorder; - /** * Gets one ILocalSpatialAudioEngine object. * Make sure the IRtcEngine is initialized before you call this method. diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 35ae3a078..8cbf9b7bb 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -3,6 +3,7 @@ import { IRtcEngine, ChannelMediaOptions, LeaveChannelOptions, + StreamFallbackOptions, } from './IAgoraRtcEngine'; import { VideoEncoderConfiguration, @@ -398,6 +399,29 @@ export abstract class IRtcEngineEx extends IRtcEngine { deviceName?: string ): number; + /** + * @ignore + */ + abstract adjustRecordingSignalVolumeEx( + volume: number, + connection: RtcConnection + ): number; + + /** + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success. < 0: Failure. + */ + abstract muteRecordingSignalEx( + mute: boolean, + connection: RtcConnection + ): number; + /** * Adjusts the playback signal volume of a specified remote user. * You can call this method to adjust the playback volume of a specified remote user. To adjust the playback volume of different remote users, call the method as many times, once for each remote user.Call this method after joining a channel.The playback volume here refers to the mixed volume of a specified remote user. @@ -610,6 +634,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { */ abstract stopRtmpStreamEx(url: string, connection: RtcConnection): number; + /** + * @ignore + */ + abstract startOrUpdateChannelMediaRelayEx( + configuration: ChannelMediaRelayConfiguration, + connection: RtcConnection + ): number; + /** * Starts relaying media streams across channels. This method can be used to implement scenarios such as co-host across channels. * After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks, and these callbacks return the state and events of the media stream relay.If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), and the onChannelMediaRelayEvent callback returns RelayEventPacketSentToDestChannel (4), it means that the SDK starts relaying media streams between the source channel and the target channel.If the onChannelMediaRelayStateChanged callback returnsRelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.After a successful method call, if you want to call this method again, ensure that you call the stopChannelMediaRelayEx method to quit the current relay.The relaying media streams across channels function needs to be enabled by contacting .We do not support string user accounts in this API. @@ -744,7 +776,12 @@ export abstract class IRtcEngineEx extends IRtcEngine { * @returns * 0: Success.< 0: Failure. */ - abstract enableWirelessAccelerate(enabled: boolean): number; + abstract setHighPriorityUserListEx( + uidList: number[], + uidNum: number, + option: StreamFallbackOptions, + connection: RtcConnection + ): number; /** * Takes a snapshot of a video stream. diff --git a/ts/Private/impl/AgoraBaseImpl.ts b/ts/Private/impl/AgoraBaseImpl.ts index db8b09f1b..7a595d486 100644 --- a/ts/Private/impl/AgoraBaseImpl.ts +++ b/ts/Private/impl/AgoraBaseImpl.ts @@ -6,7 +6,7 @@ export function processIAudioEncodedFrameObserver( jsonParams: any ) { switch (event) { - case 'OnRecordAudioEncodedFrame': + case 'onRecordAudioEncodedFrame': if (handler.onRecordAudioEncodedFrame !== undefined) { handler.onRecordAudioEncodedFrame( jsonParams.frameBuffer, @@ -16,7 +16,7 @@ export function processIAudioEncodedFrameObserver( } break; - case 'OnPlaybackAudioEncodedFrame': + case 'onPlaybackAudioEncodedFrame': if (handler.onPlaybackAudioEncodedFrame !== undefined) { handler.onPlaybackAudioEncodedFrame( jsonParams.frameBuffer, @@ -26,7 +26,7 @@ export function processIAudioEncodedFrameObserver( } break; - case 'OnMixedAudioEncodedFrame': + case 'onMixedAudioEncodedFrame': if (handler.onMixedAudioEncodedFrame !== undefined) { handler.onMixedAudioEncodedFrame( jsonParams.frameBuffer, diff --git a/ts/Private/impl/AgoraMediaBaseImpl.ts b/ts/Private/impl/AgoraMediaBaseImpl.ts index 8889a999f..5da7b9cd6 100644 --- a/ts/Private/impl/AgoraMediaBaseImpl.ts +++ b/ts/Private/impl/AgoraMediaBaseImpl.ts @@ -1,4 +1,5 @@ import { + IAudioPcmFrameSink, IAudioFrameObserverBase, IAudioFrameObserver, IAudioSpectrumObserver, @@ -7,6 +8,20 @@ import { IMediaRecorderObserver, } from '../AgoraMediaBase'; +export function processIAudioPcmFrameSink( + handler: IAudioPcmFrameSink, + event: string, + jsonParams: any +) { + switch (event) { + case 'onFrame': + if (handler.onFrame !== undefined) { + handler.onFrame(jsonParams.frame); + } + break; + } +} + export function processIAudioFrameObserverBase( handler: IAudioFrameObserverBase, event: string, @@ -110,37 +125,13 @@ export function processIVideoFrameObserver( switch (event) { case 'onCaptureVideoFrame': if (handler.onCaptureVideoFrame !== undefined) { - handler.onCaptureVideoFrame(jsonParams.videoFrame); + handler.onCaptureVideoFrame(jsonParams.type, jsonParams.videoFrame); } break; case 'onPreEncodeVideoFrame': if (handler.onPreEncodeVideoFrame !== undefined) { - handler.onPreEncodeVideoFrame(jsonParams.videoFrame); - } - break; - - case 'onSecondaryCameraCaptureVideoFrame': - if (handler.onSecondaryCameraCaptureVideoFrame !== undefined) { - handler.onSecondaryCameraCaptureVideoFrame(jsonParams.videoFrame); - } - break; - - case 'onSecondaryPreEncodeCameraVideoFrame': - if (handler.onSecondaryPreEncodeCameraVideoFrame !== undefined) { - handler.onSecondaryPreEncodeCameraVideoFrame(jsonParams.videoFrame); - } - break; - - case 'onScreenCaptureVideoFrame': - if (handler.onScreenCaptureVideoFrame !== undefined) { - handler.onScreenCaptureVideoFrame(jsonParams.videoFrame); - } - break; - - case 'onPreEncodeScreenVideoFrame': - if (handler.onPreEncodeScreenVideoFrame !== undefined) { - handler.onPreEncodeScreenVideoFrame(jsonParams.videoFrame); + handler.onPreEncodeVideoFrame(jsonParams.type, jsonParams.videoFrame); } break; @@ -153,18 +144,6 @@ export function processIVideoFrameObserver( } break; - case 'onSecondaryScreenCaptureVideoFrame': - if (handler.onSecondaryScreenCaptureVideoFrame !== undefined) { - handler.onSecondaryScreenCaptureVideoFrame(jsonParams.videoFrame); - } - break; - - case 'onSecondaryPreEncodeScreenVideoFrame': - if (handler.onSecondaryPreEncodeScreenVideoFrame !== undefined) { - handler.onSecondaryPreEncodeScreenVideoFrame(jsonParams.videoFrame); - } - break; - case 'onRenderVideoFrame': if (handler.onRenderVideoFrame !== undefined) { handler.onRenderVideoFrame( @@ -191,13 +170,22 @@ export function processIMediaRecorderObserver( switch (event) { case 'onRecorderStateChanged': if (handler.onRecorderStateChanged !== undefined) { - handler.onRecorderStateChanged(jsonParams.state, jsonParams.error); + handler.onRecorderStateChanged( + jsonParams.channelId, + jsonParams.uid, + jsonParams.state, + jsonParams.error + ); } break; case 'onRecorderInfoUpdated': if (handler.onRecorderInfoUpdated !== undefined) { - handler.onRecorderInfoUpdated(jsonParams.info); + handler.onRecorderInfoUpdated( + jsonParams.channelId, + jsonParams.uid, + jsonParams.info + ); } break; } diff --git a/ts/Private/impl/IAgoraMediaEngineImpl.ts b/ts/Private/impl/IAgoraMediaEngineImpl.ts index f789cdf4e..de3b38905 100644 --- a/ts/Private/impl/IAgoraMediaEngineImpl.ts +++ b/ts/Private/impl/IAgoraMediaEngineImpl.ts @@ -4,12 +4,16 @@ import { IAudioFrameObserver, IVideoFrameObserver, IVideoEncodedFrameObserver, - MediaSourceType, AudioFrame, ExternalVideoSourceType, ExternalVideoFrame, } from '../AgoraMediaBase'; -import { SenderOptions, EncodedVideoFrameInfo } from '../AgoraBase'; +import { + SenderOptions, + AudioTrackType, + AudioTrackConfig, + EncodedVideoFrameInfo, +} from '../AgoraBase'; // @ts-ignore export class IMediaEngineImpl implements IMediaEngine { registerAudioFrameObserver(observer: IAudioFrameObserver): number { @@ -69,29 +73,15 @@ export class IMediaEngineImpl implements IMediaEngine { return 'MediaEngine_registerVideoEncodedFrameObserver'; } - pushAudioFrame( - type: MediaSourceType, - frame: AudioFrame, - wrap: boolean = false, - sourceId: number = 0 - ): number { - const apiType = this.getApiTypeFromPushAudioFrame( - type, - frame, - wrap, - sourceId - ); + pushAudioFrame(frame: AudioFrame, trackId: number = 0): number { + const apiType = this.getApiTypeFromPushAudioFrame(frame, trackId); const jsonParams = { - type: type, frame: frame, - wrap: wrap, - sourceId: sourceId, + trackId: trackId, toJSON: () => { return { - type: type, frame: frame, - wrap: wrap, - sourceId: sourceId, + trackId: trackId, }; }, }; @@ -100,68 +90,12 @@ export class IMediaEngineImpl implements IMediaEngine { } protected getApiTypeFromPushAudioFrame( - type: MediaSourceType, frame: AudioFrame, - wrap: boolean = false, - sourceId: number = 0 + trackId: number = 0 ): string { return 'MediaEngine_pushAudioFrame'; } - pushCaptureAudioFrame(frame: AudioFrame): number { - const apiType = this.getApiTypeFromPushCaptureAudioFrame(frame); - const jsonParams = { - frame: frame, - toJSON: () => { - return { - frame: frame, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromPushCaptureAudioFrame(frame: AudioFrame): string { - return 'MediaEngine_pushCaptureAudioFrame'; - } - - pushReverseAudioFrame(frame: AudioFrame): number { - const apiType = this.getApiTypeFromPushReverseAudioFrame(frame); - const jsonParams = { - frame: frame, - toJSON: () => { - return { - frame: frame, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromPushReverseAudioFrame(frame: AudioFrame): string { - return 'MediaEngine_pushReverseAudioFrame'; - } - - pushDirectAudioFrame(frame: AudioFrame): number { - const apiType = this.getApiTypeFromPushDirectAudioFrame(frame); - const jsonParams = { - frame: frame, - toJSON: () => { - return { - frame: frame, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromPushDirectAudioFrame(frame: AudioFrame): string { - return 'MediaEngine_pushDirectAudioFrame'; - } - pullAudioFrame(): AudioFrame { const apiType = this.getApiTypeFromPullAudioFrame(); const jsonParams = {}; @@ -217,7 +151,6 @@ export class IMediaEngineImpl implements IMediaEngine { enabled: boolean, sampleRate: number, channels: number, - sourceNumber: number = 1, localPlayback: boolean = false, publish: boolean = true ): number { @@ -225,7 +158,6 @@ export class IMediaEngineImpl implements IMediaEngine { enabled, sampleRate, channels, - sourceNumber, localPlayback, publish ); @@ -233,7 +165,6 @@ export class IMediaEngineImpl implements IMediaEngine { enabled: enabled, sampleRate: sampleRate, channels: channels, - sourceNumber: sourceNumber, localPlayback: localPlayback, publish: publish, toJSON: () => { @@ -241,7 +172,6 @@ export class IMediaEngineImpl implements IMediaEngine { enabled: enabled, sampleRate: sampleRate, channels: channels, - sourceNumber: sourceNumber, localPlayback: localPlayback, publish: publish, }; @@ -255,13 +185,59 @@ export class IMediaEngineImpl implements IMediaEngine { enabled: boolean, sampleRate: number, channels: number, - sourceNumber: number = 1, localPlayback: boolean = false, publish: boolean = true ): string { return 'MediaEngine_setExternalAudioSource'; } + createCustomAudioTrack( + trackType: AudioTrackType, + config: AudioTrackConfig + ): number { + const apiType = this.getApiTypeFromCreateCustomAudioTrack( + trackType, + config + ); + const jsonParams = { + trackType: trackType, + config: config, + toJSON: () => { + return { + trackType: trackType, + config: config, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromCreateCustomAudioTrack( + trackType: AudioTrackType, + config: AudioTrackConfig + ): string { + return 'MediaEngine_createCustomAudioTrack'; + } + + destroyCustomAudioTrack(trackId: number): number { + const apiType = this.getApiTypeFromDestroyCustomAudioTrack(trackId); + const jsonParams = { + trackId: trackId, + toJSON: () => { + return { + trackId: trackId, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromDestroyCustomAudioTrack(trackId: number): string { + return 'MediaEngine_destroyCustomAudioTrack'; + } + setExternalAudioSink( enabled: boolean, sampleRate: number, @@ -296,17 +272,17 @@ export class IMediaEngineImpl implements IMediaEngine { return 'MediaEngine_setExternalAudioSink'; } - enableCustomAudioLocalPlayback(sourceId: number, enabled: boolean): number { + enableCustomAudioLocalPlayback(trackId: number, enabled: boolean): number { const apiType = this.getApiTypeFromEnableCustomAudioLocalPlayback( - sourceId, + trackId, enabled ); const jsonParams = { - sourceId: sourceId, + trackId: trackId, enabled: enabled, toJSON: () => { return { - sourceId: sourceId, + trackId: trackId, enabled: enabled, }; }, @@ -316,41 +292,12 @@ export class IMediaEngineImpl implements IMediaEngine { } protected getApiTypeFromEnableCustomAudioLocalPlayback( - sourceId: number, + trackId: number, enabled: boolean ): string { return 'MediaEngine_enableCustomAudioLocalPlayback'; } - setDirectExternalAudioSource( - enable: boolean, - localPlayback: boolean = false - ): number { - const apiType = this.getApiTypeFromSetDirectExternalAudioSource( - enable, - localPlayback - ); - const jsonParams = { - enable: enable, - localPlayback: localPlayback, - toJSON: () => { - return { - enable: enable, - localPlayback: localPlayback, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromSetDirectExternalAudioSource( - enable: boolean, - localPlayback: boolean = false - ): string { - return 'MediaEngine_setDirectExternalAudioSource'; - } - pushVideoFrame(frame: ExternalVideoFrame, videoTrackId: number = 0): number { const apiType = this.getApiTypeFromPushVideoFrame(frame, videoTrackId); const jsonParams = { diff --git a/ts/Private/impl/IAgoraMediaPlayerImpl.ts b/ts/Private/impl/IAgoraMediaPlayerImpl.ts index 5f6df3b37..bd6cad97d 100644 --- a/ts/Private/impl/IAgoraMediaPlayerImpl.ts +++ b/ts/Private/impl/IAgoraMediaPlayerImpl.ts @@ -1,7 +1,6 @@ import { callIrisApi } from '../internal/IrisApiEngine'; import { IMediaPlayer, - IMediaPlayerAudioFrameObserver, IMediaPlayerVideoFrameObserver, IMediaPlayerCacheManager, } from '../IAgoraMediaPlayer'; @@ -10,6 +9,8 @@ import { RenderModeType, IAudioSpectrumObserver, AudioDualMonoMode, + IAudioPcmFrameSink, + RawAudioFrameOpModeType, } from '../AgoraMediaBase'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import { SpatialAudioParams } from '../AgoraBase'; @@ -866,12 +867,21 @@ export class IMediaPlayerImpl implements IMediaPlayer { return 'MediaPlayer_setSoundPositionParams'; } - registerAudioFrameObserver(observer: IMediaPlayerAudioFrameObserver): number { - const apiType = this.getApiTypeFromRegisterAudioFrameObserver(observer); + registerAudioFrameObserver( + observer: IAudioPcmFrameSink, + mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly + ): number { + const apiType = this.getApiTypeFromRegisterAudioFrameObserver( + observer, + mode + ); const jsonParams = { observer: observer, + mode: mode, toJSON: () => { - return {}; + return { + mode: mode, + }; }, }; const jsonResults = callIrisApi.call(this, apiType, jsonParams); @@ -879,14 +889,13 @@ export class IMediaPlayerImpl implements IMediaPlayer { } protected getApiTypeFromRegisterAudioFrameObserver( - observer: IMediaPlayerAudioFrameObserver + observer: IAudioPcmFrameSink, + mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly ): string { return 'MediaPlayer_registerAudioFrameObserver'; } - unregisterAudioFrameObserver( - observer: IMediaPlayerAudioFrameObserver - ): number { + unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number { const apiType = this.getApiTypeFromUnregisterAudioFrameObserver(observer); const jsonParams = { observer: observer, @@ -899,7 +908,7 @@ export class IMediaPlayerImpl implements IMediaPlayer { } protected getApiTypeFromUnregisterAudioFrameObserver( - observer: IMediaPlayerAudioFrameObserver + observer: IAudioPcmFrameSink ): string { return 'MediaPlayer_unregisterAudioFrameObserver'; } @@ -1110,20 +1119,6 @@ export class IMediaPlayerCacheManagerImpl implements IMediaPlayerCacheManager { } } -export function processIMediaPlayerAudioFrameObserver( - handler: IMediaPlayerAudioFrameObserver, - event: string, - jsonParams: any -) { - switch (event) { - case 'onFrame': - if (handler.onFrame !== undefined) { - handler.onFrame(jsonParams.frame); - } - break; - } -} - export function processIMediaPlayerVideoFrameObserver( handler: IMediaPlayerVideoFrameObserver, event: string, diff --git a/ts/Private/impl/IAgoraMediaRecorderImpl.ts b/ts/Private/impl/IAgoraMediaRecorderImpl.ts index 4b7707ae8..bf72ca310 100644 --- a/ts/Private/impl/IAgoraMediaRecorderImpl.ts +++ b/ts/Private/impl/IAgoraMediaRecorderImpl.ts @@ -1,27 +1,17 @@ import { callIrisApi } from '../internal/IrisApiEngine'; import { IMediaRecorder } from '../IAgoraMediaRecorder'; -import { RtcConnection } from '../IAgoraRtcEngineEx'; import { IMediaRecorderObserver, MediaRecorderConfiguration, } from '../AgoraMediaBase'; // @ts-ignore export class IMediaRecorderImpl implements IMediaRecorder { - setMediaRecorderObserver( - connection: RtcConnection, - callback: IMediaRecorderObserver - ): number { - const apiType = this.getApiTypeFromSetMediaRecorderObserver( - connection, - callback - ); + setMediaRecorderObserver(callback: IMediaRecorderObserver): number { + const apiType = this.getApiTypeFromSetMediaRecorderObserver(callback); const jsonParams = { - connection: connection, callback: callback, toJSON: () => { - return { - connection: connection, - }; + return {}; }, }; const jsonResults = callIrisApi.call(this, apiType, jsonParams); @@ -29,23 +19,17 @@ export class IMediaRecorderImpl implements IMediaRecorder { } protected getApiTypeFromSetMediaRecorderObserver( - connection: RtcConnection, callback: IMediaRecorderObserver ): string { return 'MediaRecorder_setMediaRecorderObserver'; } - startRecording( - connection: RtcConnection, - config: MediaRecorderConfiguration - ): number { - const apiType = this.getApiTypeFromStartRecording(connection, config); + startRecording(config: MediaRecorderConfiguration): number { + const apiType = this.getApiTypeFromStartRecording(config); const jsonParams = { - connection: connection, config: config, toJSON: () => { return { - connection: connection, config: config, }; }, @@ -55,37 +39,19 @@ export class IMediaRecorderImpl implements IMediaRecorder { } protected getApiTypeFromStartRecording( - connection: RtcConnection, config: MediaRecorderConfiguration ): string { return 'MediaRecorder_startRecording'; } - stopRecording(connection: RtcConnection): number { - const apiType = this.getApiTypeFromStopRecording(connection); - const jsonParams = { - connection: connection, - toJSON: () => { - return { - connection: connection, - }; - }, - }; + stopRecording(): number { + const apiType = this.getApiTypeFromStopRecording(); + const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); return jsonResults.result; } - protected getApiTypeFromStopRecording(connection: RtcConnection): string { + protected getApiTypeFromStopRecording(): string { return 'MediaRecorder_stopRecording'; } - - release(): void { - const apiType = this.getApiTypeFromRelease(); - const jsonParams = {}; - callIrisApi.call(this, apiType, jsonParams); - } - - protected getApiTypeFromRelease(): string { - return 'MediaRecorder_release'; - } } diff --git a/ts/Private/impl/IAgoraMusicContentCenterImpl.ts b/ts/Private/impl/IAgoraMusicContentCenterImpl.ts index 1d7d9c2d1..625c18cc5 100644 --- a/ts/Private/impl/IAgoraMusicContentCenterImpl.ts +++ b/ts/Private/impl/IAgoraMusicContentCenterImpl.ts @@ -8,6 +8,7 @@ import { IMusicPlayer, IMusicContentCenter, MusicContentCenterConfiguration, + MusicCacheInfo, } from '../IAgoraMusicContentCenter'; import { IMediaPlayerImpl } from './IAgoraMediaPlayerImpl'; // @ts-ignore @@ -117,8 +118,8 @@ export function processIMusicContentCenterEventHandler( if (handler.onMusicChartsResult !== undefined) { handler.onMusicChartsResult( jsonParams.requestId, - jsonParams.status, - jsonParams.result + jsonParams.result, + jsonParams.error_code ); } break; @@ -127,15 +128,19 @@ export function processIMusicContentCenterEventHandler( if (handler.onMusicCollectionResult !== undefined) { handler.onMusicCollectionResult( jsonParams.requestId, - jsonParams.status, - jsonParams.result + jsonParams.result, + jsonParams.error_code ); } break; case 'onLyricResult': if (handler.onLyricResult !== undefined) { - handler.onLyricResult(jsonParams.requestId, jsonParams.lyricUrl); + handler.onLyricResult( + jsonParams.requestId, + jsonParams.lyricUrl, + jsonParams.error_code + ); } break; @@ -144,9 +149,9 @@ export function processIMusicContentCenterEventHandler( handler.onPreLoadEvent( jsonParams.songCode, jsonParams.percent, + jsonParams.lyricUrl, jsonParams.status, - jsonParams.msg, - jsonParams.lyricUrl + jsonParams.error_code ); } break; @@ -388,6 +393,40 @@ export class IMusicContentCenterImpl implements IMusicContentCenter { return 'MusicContentCenter_preload'; } + removeCache(songCode: number): number { + const apiType = this.getApiTypeFromRemoveCache(songCode); + const jsonParams = { + songCode: songCode, + toJSON: () => { + return { + songCode: songCode, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromRemoveCache(songCode: number): string { + return 'MusicContentCenter_removeCache'; + } + + getCaches(): { cacheInfo: MusicCacheInfo[]; cacheInfoSize: number } { + const apiType = this.getApiTypeFromGetCaches(); + const jsonParams = {}; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + const cacheInfo = jsonResults.cacheInfo; + const cacheInfoSize = jsonResults.cacheInfoSize; + return { + cacheInfo, + cacheInfoSize, + }; + } + + protected getApiTypeFromGetCaches(): string { + return 'MusicContentCenter_getCaches'; + } + isPreloaded(songCode: number): number { const apiType = this.getApiTypeFromIsPreloaded(songCode); const jsonParams = { diff --git a/ts/Private/impl/IAgoraRtcEngineExImpl.ts b/ts/Private/impl/IAgoraRtcEngineExImpl.ts index e52729ad6..1b7d76bc3 100644 --- a/ts/Private/impl/IAgoraRtcEngineExImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineExImpl.ts @@ -1,7 +1,11 @@ import { callIrisApi } from '../internal/IrisApiEngine'; import { IRtcEngineImpl } from './IAgoraRtcEngineImpl'; import { IRtcEngineEx, RtcConnection } from '../IAgoraRtcEngineEx'; -import { ChannelMediaOptions, LeaveChannelOptions } from '../IAgoraRtcEngine'; +import { + ChannelMediaOptions, + LeaveChannelOptions, + StreamFallbackOptions, +} from '../IAgoraRtcEngine'; import { VideoEncoderConfiguration, VideoCanvas, @@ -685,6 +689,58 @@ export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { return 'RtcEngineEx_enableLoopbackRecordingEx'; } + adjustRecordingSignalVolumeEx( + volume: number, + connection: RtcConnection + ): number { + const apiType = this.getApiTypeFromAdjustRecordingSignalVolumeEx( + volume, + connection + ); + const jsonParams = { + volume: volume, + connection: connection, + toJSON: () => { + return { + volume: volume, + connection: connection, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromAdjustRecordingSignalVolumeEx( + volume: number, + connection: RtcConnection + ): string { + return 'RtcEngineEx_adjustRecordingSignalVolumeEx'; + } + + muteRecordingSignalEx(mute: boolean, connection: RtcConnection): number { + const apiType = this.getApiTypeFromMuteRecordingSignalEx(mute, connection); + const jsonParams = { + mute: mute, + connection: connection, + toJSON: () => { + return { + mute: mute, + connection: connection, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromMuteRecordingSignalEx( + mute: boolean, + connection: RtcConnection + ): string { + return 'RtcEngineEx_muteRecordingSignalEx'; + } + adjustUserPlaybackSignalVolumeEx( uid: number, volume: number, @@ -1095,6 +1151,35 @@ export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { return 'RtcEngineEx_stopRtmpStreamEx'; } + startOrUpdateChannelMediaRelayEx( + configuration: ChannelMediaRelayConfiguration, + connection: RtcConnection + ): number { + const apiType = this.getApiTypeFromStartOrUpdateChannelMediaRelayEx( + configuration, + connection + ); + const jsonParams = { + configuration: configuration, + connection: connection, + toJSON: () => { + return { + configuration: configuration, + connection: connection, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromStartOrUpdateChannelMediaRelayEx( + configuration: ChannelMediaRelayConfiguration, + connection: RtcConnection + ): string { + return 'RtcEngineEx_startOrUpdateChannelMediaRelayEx'; + } + startChannelMediaRelayEx( configuration: ChannelMediaRelayConfiguration, connection: RtcConnection @@ -1374,13 +1459,29 @@ export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { return 'RtcEngineEx_setDualStreamModeEx'; } - enableWirelessAccelerate(enabled: boolean): number { - const apiType = this.getApiTypeFromEnableWirelessAccelerate(enabled); + setHighPriorityUserListEx( + uidList: number[], + uidNum: number, + option: StreamFallbackOptions, + connection: RtcConnection + ): number { + const apiType = this.getApiTypeFromSetHighPriorityUserListEx( + uidList, + uidNum, + option, + connection + ); const jsonParams = { - enabled: enabled, + uidList: uidList, + uidNum: uidNum, + option: option, + connection: connection, toJSON: () => { return { - enabled: enabled, + uidList: uidList, + uidNum: uidNum, + option: option, + connection: connection, }; }, }; @@ -1388,8 +1489,13 @@ export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { return jsonResults.result; } - protected getApiTypeFromEnableWirelessAccelerate(enabled: boolean): string { - return 'RtcEngineEx_enableWirelessAccelerate'; + protected getApiTypeFromSetHighPriorityUserListEx( + uidList: number[], + uidNum: number, + option: StreamFallbackOptions, + connection: RtcConnection + ): string { + return 'RtcEngineEx_setHighPriorityUserListEx'; } takeSnapshotEx( diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index 505abc8a5..aab9a4eb0 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -13,7 +13,6 @@ import { CameraCapturerConfiguration, AudioEqualizationBandFrequency, AudioReverbType, - AudioTrackConfig, StreamFallbackOptions, Size, ScreenCaptureSourceInfo, @@ -29,10 +28,11 @@ import { } from '../IAgoraRtcEngine'; import { VideoFormat, + CodecCapInfo, ChannelProfileType, ClientRoleType, ClientRoleOptions, - VideoSourceType, + EchoTestConfiguration, LastmileProbeConfig, VideoEncoderConfiguration, BeautyOptions, @@ -42,6 +42,7 @@ import { VirtualBackgroundSource, SegmentationProperty, VideoCanvas, + VideoApplicationScenarioType, AudioProfileType, AudioScenarioType, VideoStreamType, @@ -64,8 +65,8 @@ import { ScreenCaptureParameters, DeviceInfo, VideoContentHint, - ScreenScenarioType, ScreenCaptureParameters2, + ScreenScenarioType, LiveTranscoding, LocalTranscoderConfiguration, VideoOrientation, @@ -73,10 +74,12 @@ import { EncryptionConfig, DataStreamConfig, WatermarkOptions, + AudioAinsMode, UserInfo, ChannelMediaRelayConfiguration, } from '../AgoraBase'; import { + VideoSourceType, MediaSourceType, RenderModeType, RawAudioFrameOpModeType, @@ -84,12 +87,13 @@ import { ContentInspectConfig, } from '../AgoraMediaBase'; import { IMediaPlayer } from '../IAgoraMediaPlayer'; +import { RtcConnection } from '../IAgoraRtcEngineEx'; +import { IMediaRecorder } from '../IAgoraMediaRecorder'; import { AudioMixingDualMonoMode, IMediaEngine } from '../IAgoraMediaEngine'; import { LogFilterType, LogLevel } from '../IAgoraLog'; import { AgoraRhythmPlayerConfig } from '../IAgoraRhythmPlayer'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; import { IMusicContentCenter } from '../IAgoraMusicContentCenter'; -import { IMediaRecorder } from '../IAgoraMediaRecorder'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; export function processIRtcEngineEventHandler( handler: IRtcEngineEventHandler, @@ -393,16 +397,6 @@ export function processIRtcEngineEventHandler( } break; - case 'onApiCallExecuted': - if (handler.onApiCallExecuted !== undefined) { - handler.onApiCallExecuted( - jsonParams.err, - jsonParams.api, - jsonParams.result - ); - } - break; - case 'onLocalAudioStats': if (handler.onLocalAudioStats !== undefined) { handler.onLocalAudioStats(jsonParams.connection, jsonParams.stats); @@ -910,6 +904,15 @@ export function processIRtcEngineEventHandler( } break; + case 'onLocalVideoTranscoderError': + if (handler.onLocalVideoTranscoderError !== undefined) { + handler.onLocalVideoTranscoderError( + jsonParams.stream, + jsonParams.error + ); + } + break; + case 'onVideoRenderingTracingResult': if (handler.onVideoRenderingTracingResult !== undefined) { handler.onVideoRenderingTracingResult( @@ -1158,6 +1161,22 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_getErrorDescription'; } + queryCodecCapability(): { codecInfo: CodecCapInfo[]; size: number } { + const apiType = this.getApiTypeFromQueryCodecCapability(); + const jsonParams = {}; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + const codecInfo = jsonResults.codec_info; + const size = jsonResults.size; + return { + codecInfo, + size, + }; + } + + protected getApiTypeFromQueryCodecCapability(): string { + return 'RtcEngine_queryCodecCapability'; + } + joinChannel( token: string, channelId: string, @@ -1296,13 +1315,13 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setClientRole'; } - startEchoTest(intervalInSeconds: number = 10): number { - const apiType = this.getApiTypeFromStartEchoTest(intervalInSeconds); + startEchoTest(config: EchoTestConfiguration): number { + const apiType = this.getApiTypeFromStartEchoTest(config); const jsonParams = { - intervalInSeconds: intervalInSeconds, + config: config, toJSON: () => { return { - intervalInSeconds: intervalInSeconds, + config: config, }; }, }; @@ -1310,9 +1329,7 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromStartEchoTest( - intervalInSeconds: number = 10 - ): string { + protected getApiTypeFromStartEchoTest(config: EchoTestConfiguration): string { return 'RtcEngine_startEchoTest'; } @@ -1681,6 +1698,26 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setupLocalVideo'; } + setVideoScenario(scenarioType: VideoApplicationScenarioType): number { + const apiType = this.getApiTypeFromSetVideoScenario(scenarioType); + const jsonParams = { + scenarioType: scenarioType, + toJSON: () => { + return { + scenarioType: scenarioType, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromSetVideoScenario( + scenarioType: VideoApplicationScenarioType + ): string { + return 'RtcEngine_setVideoScenario'; + } + enableAudio(): number { const apiType = this.getApiTypeFromEnableAudio(); const jsonParams = {}; @@ -2247,6 +2284,70 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_destroyMediaPlayer'; } + createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder { + const apiType = this.getApiTypeFromCreateLocalMediaRecorder(connection); + const jsonParams = { + connection: connection, + toJSON: () => { + return { + connection: connection, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromCreateLocalMediaRecorder( + connection: RtcConnection + ): string { + return 'RtcEngine_createLocalMediaRecorder'; + } + + createRemoteMediaRecorder(channelId: string, uid: number): IMediaRecorder { + const apiType = this.getApiTypeFromCreateRemoteMediaRecorder( + channelId, + uid + ); + const jsonParams = { + channelId: channelId, + uid: uid, + toJSON: () => { + return { + channelId: channelId, + uid: uid, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromCreateRemoteMediaRecorder( + channelId: string, + uid: number + ): string { + return 'RtcEngine_createRemoteMediaRecorder'; + } + + destroyMediaRecorder(mediaRecorder: IMediaRecorder): number { + const apiType = this.getApiTypeFromDestroyMediaRecorder(mediaRecorder); + const jsonParams = { + mediaRecorder: mediaRecorder, + toJSON: () => { + return {}; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromDestroyMediaRecorder( + mediaRecorder: IMediaRecorder + ): string { + return 'RtcEngine_destroyMediaRecorder'; + } + startAudioMixing( filePath: string, loopback: boolean, @@ -3161,6 +3262,24 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setLocalVoicePitch'; } + setLocalVoiceFormant(formantRatio: number): number { + const apiType = this.getApiTypeFromSetLocalVoiceFormant(formantRatio); + const jsonParams = { + formantRatio: formantRatio, + toJSON: () => { + return { + formantRatio: formantRatio, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromSetLocalVoiceFormant(formantRatio: number): string { + return 'RtcEngine_setLocalVoiceFormant'; + } + setLocalVoiceEqualization( bandFrequency: AudioEqualizationBandFrequency, bandGain: number @@ -3487,46 +3606,17 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setDualStreamMode'; } - enableEchoCancellationExternal( - enabled: boolean, - audioSourceDelay: number - ): number { - const apiType = this.getApiTypeFromEnableEchoCancellationExternal( - enabled, - audioSourceDelay - ); - const jsonParams = { - enabled: enabled, - audioSourceDelay: audioSourceDelay, - toJSON: () => { - return { - enabled: enabled, - audioSourceDelay: audioSourceDelay, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromEnableEchoCancellationExternal( - enabled: boolean, - audioSourceDelay: number - ): string { - return 'RtcEngine_enableEchoCancellationExternal'; - } - - enableCustomAudioLocalPlayback(sourceId: number, enabled: boolean): number { + enableCustomAudioLocalPlayback(trackId: number, enabled: boolean): number { const apiType = this.getApiTypeFromEnableCustomAudioLocalPlayback( - sourceId, + trackId, enabled ); const jsonParams = { - sourceId: sourceId, + trackId: trackId, enabled: enabled, toJSON: () => { return { - sourceId: sourceId, + trackId: trackId, enabled: enabled, }; }, @@ -3536,74 +3626,12 @@ export class IRtcEngineImpl implements IRtcEngine { } protected getApiTypeFromEnableCustomAudioLocalPlayback( - sourceId: number, + trackId: number, enabled: boolean ): string { return 'RtcEngine_enableCustomAudioLocalPlayback'; } - startPrimaryCustomAudioTrack(config: AudioTrackConfig): number { - const apiType = this.getApiTypeFromStartPrimaryCustomAudioTrack(config); - const jsonParams = { - config: config, - toJSON: () => { - return { - config: config, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStartPrimaryCustomAudioTrack( - config: AudioTrackConfig - ): string { - return 'RtcEngine_startPrimaryCustomAudioTrack'; - } - - stopPrimaryCustomAudioTrack(): number { - const apiType = this.getApiTypeFromStopPrimaryCustomAudioTrack(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStopPrimaryCustomAudioTrack(): string { - return 'RtcEngine_stopPrimaryCustomAudioTrack'; - } - - startSecondaryCustomAudioTrack(config: AudioTrackConfig): number { - const apiType = this.getApiTypeFromStartSecondaryCustomAudioTrack(config); - const jsonParams = { - config: config, - toJSON: () => { - return { - config: config, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStartSecondaryCustomAudioTrack( - config: AudioTrackConfig - ): string { - return 'RtcEngine_startSecondaryCustomAudioTrack'; - } - - stopSecondaryCustomAudioTrack(): number { - const apiType = this.getApiTypeFromStopSecondaryCustomAudioTrack(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStopSecondaryCustomAudioTrack(): string { - return 'RtcEngine_stopSecondaryCustomAudioTrack'; - } - setRecordingAudioFrameParameters( sampleRate: number, channel: number, @@ -3973,6 +4001,40 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setRemoteSubscribeFallbackOption'; } + setHighPriorityUserList( + uidList: number[], + uidNum: number, + option: StreamFallbackOptions + ): number { + const apiType = this.getApiTypeFromSetHighPriorityUserList( + uidList, + uidNum, + option + ); + const jsonParams = { + uidList: uidList, + uidNum: uidNum, + option: option, + toJSON: () => { + return { + uidList: uidList, + uidNum: uidNum, + option: option, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromSetHighPriorityUserList( + uidList: number[], + uidNum: number, + option: StreamFallbackOptions + ): string { + return 'RtcEngine_setHighPriorityUserList'; + } + enableLoopbackRecording(enabled: boolean, deviceName?: string): number { const apiType = this.getApiTypeFromEnableLoopbackRecording( enabled, @@ -4884,26 +4946,6 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setScreenCaptureContentHint'; } - setScreenCaptureScenario(screenScenario: ScreenScenarioType): number { - const apiType = this.getApiTypeFromSetScreenCaptureScenario(screenScenario); - const jsonParams = { - screenScenario: screenScenario, - toJSON: () => { - return { - screenScenario: screenScenario, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromSetScreenCaptureScenario( - screenScenario: ScreenScenarioType - ): string { - return 'RtcEngine_setScreenCaptureScenario'; - } - updateScreenCaptureRegion(regionRect: Rectangle): number { const apiType = this.getApiTypeFromUpdateScreenCaptureRegion(regionRect); const jsonParams = { @@ -4967,6 +5009,32 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_startScreenCapture'; } + startScreenCaptureDesktop( + type: VideoSourceType, + config: ScreenCaptureConfiguration + ): number { + const apiType = this.getApiTypeFromStartScreenCaptureDesktop(type, config); + const jsonParams = { + type: type, + config: config, + toJSON: () => { + return { + type: type, + config: config, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromStartScreenCaptureDesktop( + type: VideoSourceType, + config: ScreenCaptureConfiguration + ): string { + return 'RtcEngine_startScreenCaptureDesktop'; + } + updateScreenCapture(captureParams: ScreenCaptureParameters2): number { const apiType = this.getApiTypeFromUpdateScreenCapture(captureParams); const jsonParams = { @@ -4987,14 +5055,56 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_updateScreenCapture'; } - stopScreenCapture(): number { - const apiType = this.getApiTypeFromStopScreenCapture(); + queryScreenCaptureCapability(): number { + const apiType = this.getApiTypeFromQueryScreenCaptureCapability(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); return jsonResults.result; } - protected getApiTypeFromStopScreenCapture(): string { + protected getApiTypeFromQueryScreenCaptureCapability(): string { + return 'RtcEngine_queryScreenCaptureCapability'; + } + + setScreenCaptureScenario(screenScenario: ScreenScenarioType): number { + const apiType = this.getApiTypeFromSetScreenCaptureScenario(screenScenario); + const jsonParams = { + screenScenario: screenScenario, + toJSON: () => { + return { + screenScenario: screenScenario, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromSetScreenCaptureScenario( + screenScenario: ScreenScenarioType + ): string { + return 'RtcEngine_setScreenCaptureScenario'; + } + + stopScreenCapture( + type: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + ): number { + const apiType = this.getApiTypeFromStopScreenCapture(type); + const jsonParams = { + type: type, + toJSON: () => { + return { + type: type, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromStopScreenCapture( + type: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + ): string { return 'RtcEngine_stopScreenCapture'; } @@ -5200,12 +5310,17 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_stopLocalVideoTranscoder'; } - startPrimaryCameraCapture(config: CameraCapturerConfiguration): number { - const apiType = this.getApiTypeFromStartPrimaryCameraCapture(config); + startCameraCapture( + type: VideoSourceType, + config: CameraCapturerConfiguration + ): number { + const apiType = this.getApiTypeFromStartCameraCapture(type, config); const jsonParams = { + type: type, config: config, toJSON: () => { return { + type: type, config: config, }; }, @@ -5214,19 +5329,20 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromStartPrimaryCameraCapture( + protected getApiTypeFromStartCameraCapture( + type: VideoSourceType, config: CameraCapturerConfiguration ): string { - return 'RtcEngine_startPrimaryCameraCapture'; + return 'RtcEngine_startCameraCapture'; } - startSecondaryCameraCapture(config: CameraCapturerConfiguration): number { - const apiType = this.getApiTypeFromStartSecondaryCameraCapture(config); + stopCameraCapture(type: VideoSourceType): number { + const apiType = this.getApiTypeFromStopCameraCapture(type); const jsonParams = { - config: config, + type: type, toJSON: () => { return { - config: config, + type: type, }; }, }; @@ -5234,32 +5350,8 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromStartSecondaryCameraCapture( - config: CameraCapturerConfiguration - ): string { - return 'RtcEngine_startSecondaryCameraCapture'; - } - - stopPrimaryCameraCapture(): number { - const apiType = this.getApiTypeFromStopPrimaryCameraCapture(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStopPrimaryCameraCapture(): string { - return 'RtcEngine_stopPrimaryCameraCapture'; - } - - stopSecondaryCameraCapture(): number { - const apiType = this.getApiTypeFromStopSecondaryCameraCapture(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStopSecondaryCameraCapture(): string { - return 'RtcEngine_stopSecondaryCameraCapture'; + protected getApiTypeFromStopCameraCapture(type: VideoSourceType): string { + return 'RtcEngine_stopCameraCapture'; } setCameraDeviceOrientation( @@ -5320,68 +5412,6 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setScreenCaptureOrientation'; } - startPrimaryScreenCapture(config: ScreenCaptureConfiguration): number { - const apiType = this.getApiTypeFromStartPrimaryScreenCapture(config); - const jsonParams = { - config: config, - toJSON: () => { - return { - config: config, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStartPrimaryScreenCapture( - config: ScreenCaptureConfiguration - ): string { - return 'RtcEngine_startPrimaryScreenCapture'; - } - - startSecondaryScreenCapture(config: ScreenCaptureConfiguration): number { - const apiType = this.getApiTypeFromStartSecondaryScreenCapture(config); - const jsonParams = { - config: config, - toJSON: () => { - return { - config: config, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStartSecondaryScreenCapture( - config: ScreenCaptureConfiguration - ): string { - return 'RtcEngine_startSecondaryScreenCapture'; - } - - stopPrimaryScreenCapture(): number { - const apiType = this.getApiTypeFromStopPrimaryScreenCapture(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStopPrimaryScreenCapture(): string { - return 'RtcEngine_stopPrimaryScreenCapture'; - } - - stopSecondaryScreenCapture(): number { - const apiType = this.getApiTypeFromStopSecondaryScreenCapture(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromStopSecondaryScreenCapture(): string { - return 'RtcEngine_stopSecondaryScreenCapture'; - } - getConnectionState(): ConnectionStateType { const apiType = this.getApiTypeFromGetConnectionState(); const jsonParams = {}; @@ -5827,6 +5857,29 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_stopAudioFrameDump'; } + setAINSMode(enabled: boolean, mode: AudioAinsMode): number { + const apiType = this.getApiTypeFromSetAINSMode(enabled, mode); + const jsonParams = { + enabled: enabled, + mode: mode, + toJSON: () => { + return { + enabled: enabled, + mode: mode, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromSetAINSMode( + enabled: boolean, + mode: AudioAinsMode + ): string { + return 'RtcEngine_setAINSMode'; + } + registerLocalUserAccount(appId: string, userAccount: string): number { const apiType = this.getApiTypeFromRegisterLocalUserAccount( appId, @@ -5971,6 +6024,29 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_getUserInfoByUid'; } + startOrUpdateChannelMediaRelay( + configuration: ChannelMediaRelayConfiguration + ): number { + const apiType = + this.getApiTypeFromStartOrUpdateChannelMediaRelay(configuration); + const jsonParams = { + configuration: configuration, + toJSON: () => { + return { + configuration: configuration, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromStartOrUpdateChannelMediaRelay( + configuration: ChannelMediaRelayConfiguration + ): string { + return 'RtcEngine_startOrUpdateChannelMediaRelay'; + } + startChannelMediaRelay( configuration: ChannelMediaRelayConfiguration ): number { @@ -6267,17 +6343,17 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_enableContentInspect'; } - adjustCustomAudioPublishVolume(sourceId: number, volume: number): number { + adjustCustomAudioPublishVolume(trackId: number, volume: number): number { const apiType = this.getApiTypeFromAdjustCustomAudioPublishVolume( - sourceId, + trackId, volume ); const jsonParams = { - sourceId: sourceId, + trackId: trackId, volume: volume, toJSON: () => { return { - sourceId: sourceId, + trackId: trackId, volume: volume, }; }, @@ -6287,23 +6363,23 @@ export class IRtcEngineImpl implements IRtcEngine { } protected getApiTypeFromAdjustCustomAudioPublishVolume( - sourceId: number, + trackId: number, volume: number ): string { return 'RtcEngine_adjustCustomAudioPublishVolume'; } - adjustCustomAudioPlayoutVolume(sourceId: number, volume: number): number { + adjustCustomAudioPlayoutVolume(trackId: number, volume: number): number { const apiType = this.getApiTypeFromAdjustCustomAudioPlayoutVolume( - sourceId, + trackId, volume ); const jsonParams = { - sourceId: sourceId, + trackId: trackId, volume: volume, toJSON: () => { return { - sourceId: sourceId, + trackId: trackId, volume: volume, }; }, @@ -6313,7 +6389,7 @@ export class IRtcEngineImpl implements IRtcEngine { } protected getApiTypeFromAdjustCustomAudioPlayoutVolume( - sourceId: number, + trackId: number, volume: number ): string { return 'RtcEngine_adjustCustomAudioPlayoutVolume'; @@ -6512,6 +6588,17 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_enableInstantMediaRendering'; } + getNtpTimeInMs(): number { + const apiType = this.getApiTypeFromGetNtpTimeInMs(); + const jsonParams = {}; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromGetNtpTimeInMs(): string { + return 'RtcEngine_getNtpTimeInMs'; + } + destroyRendererByView(view: any): void { const apiType = this.getApiTypeFromDestroyRendererByView(view); const jsonParams = { @@ -6606,17 +6693,6 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_getMediaEngine'; } - getMediaRecorder(): IMediaRecorder { - const apiType = this.getApiTypeFromGetMediaRecorder(); - const jsonParams = {}; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromGetMediaRecorder(): string { - return 'RtcEngine_getMediaRecorder'; - } - getLocalSpatialAudioEngine(): ILocalSpatialAudioEngine { const apiType = this.getApiTypeFromGetLocalSpatialAudioEngine(); const jsonParams = {}; diff --git a/ts/Private/ti/AgoraMediaBase-ti.ts b/ts/Private/ti/AgoraMediaBase-ti.ts index 65ae27659..48d2bf47e 100644 --- a/ts/Private/ti/AgoraMediaBase-ti.ts +++ b/ts/Private/ti/AgoraMediaBase-ti.ts @@ -4,6 +4,10 @@ import * as t from "ts-interface-checker"; // tslint:disable:object-literal-key-quotes +export const IAudioPcmFrameSink = t.iface([], { + "onFrame": t.opt(t.func("void", t.param("frame", "AudioPcmFrame"))), +}); + export const IAudioFrameObserverBase = t.iface([], { "onRecordAudioFrame": t.opt(t.func("boolean", t.param("channelId", "string"), t.param("audioFrame", "AudioFrame"))), "onPlaybackAudioFrame": t.opt(t.func("boolean", t.param("channelId", "string"), t.param("audioFrame", "AudioFrame"))), @@ -25,25 +29,20 @@ export const IVideoEncodedFrameObserver = t.iface([], { }); export const IVideoFrameObserver = t.iface([], { - "onCaptureVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), - "onPreEncodeVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), - "onSecondaryCameraCaptureVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), - "onSecondaryPreEncodeCameraVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), - "onScreenCaptureVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), - "onPreEncodeScreenVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), + "onCaptureVideoFrame": t.opt(t.func("boolean", t.param("type", "VideoSourceType"), t.param("videoFrame", "VideoFrame"))), + "onPreEncodeVideoFrame": t.opt(t.func("boolean", t.param("type", "VideoSourceType"), t.param("videoFrame", "VideoFrame"))), "onMediaPlayerVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"), t.param("mediaPlayerId", "number"))), - "onSecondaryScreenCaptureVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), - "onSecondaryPreEncodeScreenVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), "onRenderVideoFrame": t.opt(t.func("boolean", t.param("channelId", "string"), t.param("remoteUid", "number"), t.param("videoFrame", "VideoFrame"))), "onTranscodedVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), }); export const IMediaRecorderObserver = t.iface([], { - "onRecorderStateChanged": t.opt(t.func("void", t.param("state", "RecorderState"), t.param("error", "RecorderErrorCode"))), - "onRecorderInfoUpdated": t.opt(t.func("void", t.param("info", "RecorderInfo"))), + "onRecorderStateChanged": t.opt(t.func("void", t.param("channelId", "string"), t.param("uid", "number"), t.param("state", "RecorderState"), t.param("error", "RecorderErrorCode"))), + "onRecorderInfoUpdated": t.opt(t.func("void", t.param("channelId", "string"), t.param("uid", "number"), t.param("info", "RecorderInfo"))), }); const exportedTypeSuite: t.ITypeSuite = { + IAudioPcmFrameSink, IAudioFrameObserverBase, IAudioFrameObserver, IAudioSpectrumObserver, diff --git a/ts/Private/ti/IAgoraMediaPlayer-ti.ts b/ts/Private/ti/IAgoraMediaPlayer-ti.ts index 3ffa634f1..24b87ba3a 100644 --- a/ts/Private/ti/IAgoraMediaPlayer-ti.ts +++ b/ts/Private/ti/IAgoraMediaPlayer-ti.ts @@ -4,16 +4,11 @@ import * as t from "ts-interface-checker"; // tslint:disable:object-literal-key-quotes -export const IMediaPlayerAudioFrameObserver = t.iface([], { - "onFrame": t.opt(t.func("void", t.param("frame", "AudioPcmFrame"))), -}); - export const IMediaPlayerVideoFrameObserver = t.iface([], { "onFrame": t.opt(t.func("void", t.param("frame", "VideoFrame"))), }); const exportedTypeSuite: t.ITypeSuite = { - IMediaPlayerAudioFrameObserver, IMediaPlayerVideoFrameObserver, }; export default exportedTypeSuite; diff --git a/ts/Private/ti/IAgoraMusicContentCenter-ti.ts b/ts/Private/ti/IAgoraMusicContentCenter-ti.ts index 3da226aac..344da2053 100644 --- a/ts/Private/ti/IAgoraMusicContentCenter-ti.ts +++ b/ts/Private/ti/IAgoraMusicContentCenter-ti.ts @@ -5,10 +5,10 @@ import * as t from "ts-interface-checker"; // tslint:disable:object-literal-key-quotes export const IMusicContentCenterEventHandler = t.iface([], { - "onMusicChartsResult": t.opt(t.func("void", t.param("requestId", "string"), t.param("status", "MusicContentCenterStatusCode"), t.param("result", t.array("MusicChartInfo")))), - "onMusicCollectionResult": t.opt(t.func("void", t.param("requestId", "string"), t.param("status", "MusicContentCenterStatusCode"), t.param("result", "MusicCollection"))), - "onLyricResult": t.opt(t.func("void", t.param("requestId", "string"), t.param("lyricUrl", "string"))), - "onPreLoadEvent": t.opt(t.func("void", t.param("songCode", "number"), t.param("percent", "number"), t.param("status", "PreloadStatusCode"), t.param("msg", "string"), t.param("lyricUrl", "string", true))), + "onMusicChartsResult": t.opt(t.func("void", t.param("requestId", "string"), t.param("result", t.array("MusicChartInfo")), t.param("errorCode", "MusicContentCenterStatusCode"))), + "onMusicCollectionResult": t.opt(t.func("void", t.param("requestId", "string"), t.param("result", "MusicCollection"), t.param("errorCode", "MusicContentCenterStatusCode"))), + "onLyricResult": t.opt(t.func("void", t.param("requestId", "string"), t.param("lyricUrl", "string"), t.param("errorCode", "MusicContentCenterStatusCode"))), + "onPreLoadEvent": t.opt(t.func("void", t.param("songCode", "number"), t.param("percent", "number"), t.param("lyricUrl", "string"), t.param("status", "PreloadStatusCode"), t.param("errorCode", "MusicContentCenterStatusCode"))), }); const exportedTypeSuite: t.ITypeSuite = { diff --git a/ts/Private/ti/IAgoraRtcEngine-ti.ts b/ts/Private/ti/IAgoraRtcEngine-ti.ts index 323208876..de442bdb7 100644 --- a/ts/Private/ti/IAgoraRtcEngine-ti.ts +++ b/ts/Private/ti/IAgoraRtcEngine-ti.ts @@ -38,7 +38,6 @@ export const IRtcEngineEventHandler = t.iface([], { "onUserEnableVideo": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("remoteUid", "number"), t.param("enabled", "boolean"))), "onUserStateChanged": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("remoteUid", "number"), t.param("state", "number"))), "onUserEnableLocalVideo": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("remoteUid", "number"), t.param("enabled", "boolean"))), - "onApiCallExecuted": t.opt(t.func("void", t.param("err", "ErrorCodeType"), t.param("api", "string"), t.param("result", "string"))), "onLocalAudioStats": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("stats", "LocalAudioStats"))), "onRemoteAudioStats": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("stats", "RemoteAudioStats"))), "onLocalVideoStats": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("stats", "LocalVideoStats"))), @@ -97,6 +96,7 @@ export const IRtcEngineEventHandler = t.iface([], { "onExtensionStopped": t.opt(t.func("void", t.param("provider", "string"), t.param("extension", "string"))), "onExtensionError": t.opt(t.func("void", t.param("provider", "string"), t.param("extension", "string"), t.param("error", "number"), t.param("message", "string"))), "onUserAccountUpdated": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("remoteUid", "number"), t.param("userAccount", "string"))), + "onLocalVideoTranscoderError": t.opt(t.func("void", t.param("stream", "TranscodingVideoStream"), t.param("error", "VideoTranscoderError"))), "onVideoRenderingTracingResult": t.opt(t.func("void", t.param("connection", "RtcConnection"), t.param("uid", "number"), t.param("currentEvent", "MediaTraceEvent"), t.param("tracingInfo", "VideoRenderingTracingInfo"))), }); From 514bafc4911b3a1d4a0a357a331b6ce10f148498 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Thu, 6 Apr 2023 11:23:20 +0800 Subject: [PATCH 07/74] [AUTO] Generate code by terra (#972) Co-authored-by: LichKing-2234 --- ts/Private/AgoraBase.ts | 26 ++++++++++++---- ts/Private/AgoraMediaBase.ts | 7 +++-- ts/Private/IAgoraRtcEngine.ts | 20 ++++++++++-- ts/Private/IAgoraRtcEngineEx.ts | 18 +---------- ts/Private/impl/AgoraMediaBaseImpl.ts | 10 ++++-- ts/Private/impl/IAgoraRtcEngineExImpl.ts | 39 ------------------------ ts/Private/impl/IAgoraRtcEngineImpl.ts | 22 +++++++------ ts/Private/ti/AgoraMediaBase-ti.ts | 4 +-- 8 files changed, 65 insertions(+), 81 deletions(-) diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index bfea99e9e..44637533c 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -682,7 +682,7 @@ export enum FrameWidth { /** * @ignore */ - FrameWidth640 = 640, + FrameWidth960 = 960, } /** @@ -692,7 +692,7 @@ export enum FrameHeight { /** * @ignore */ - FrameHeight360 = 360, + FrameHeight540 = 540, } /** @@ -786,19 +786,19 @@ export class VideoDimensions { /** * @ignore */ -export enum ScreenCaptureCapabilityLevel { +export enum ScreenCaptureFramerateCapability { /** * @ignore */ - ScreenCaptureCapabilityLevel15Fps = 0, + ScreenCaptureFramerateCapability15Fps = 0, /** * @ignore */ - ScreenCaptureCapabilityLevel30Fps = 1, + ScreenCaptureFramerateCapability30Fps = 1, /** * @ignore */ - ScreenCaptureCapabilityLevel60Fps = 2, + ScreenCaptureFramerateCapability60Fps = 2, } /** @@ -4556,6 +4556,20 @@ export class VideoRenderingTracingInfo { remoteJoined2PacketReceived?: number; } +/** + * @ignore + */ +export enum ConfigFetchType { + /** + * @ignore + */ + ConfigFetchTypeInitialize = 1, + /** + * @ignore + */ + ConfigFetchTypeJoinChannel = 2, +} + /** * The spatial audio parameters. */ diff --git a/ts/Private/AgoraMediaBase.ts b/ts/Private/AgoraMediaBase.ts index 29cbed3a0..95d0f9e16 100644 --- a/ts/Private/AgoraMediaBase.ts +++ b/ts/Private/AgoraMediaBase.ts @@ -986,7 +986,10 @@ export interface IVideoFrameObserver { * @returns * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. */ - onCaptureVideoFrame?(type: VideoSourceType, videoFrame: VideoFrame): boolean; + onCaptureVideoFrame?( + sourceType: VideoSourceType, + videoFrame: VideoFrame + ): boolean; /** * Occurs each time the SDK receives a video frame before encoding. @@ -1004,7 +1007,7 @@ export interface IVideoFrameObserver { * false: Sets the SDK to discard the video frame. */ onPreEncodeVideoFrame?( - type: VideoSourceType, + sourceType: VideoSourceType, videoFrame: VideoFrame ): boolean; diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index 9913dc3be..4954edf99 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -554,6 +554,10 @@ export class RemoteVideoStats { * Deprecated:In scenarios where audio and video are synchronized, you can get the video delay data from networkTransportDelay and jitterBufferDelay in RemoteAudioStats .The video delay (ms). */ delay?: number; + /** + * @ignore + */ + e2eDelay?: number; /** * The width (pixels) of the video. */ @@ -990,6 +994,10 @@ export class ScreenCaptureSourceInfo { * (For Windows only) Whether the window is minimized:true: The window is minimized.false: The window is not minimized. */ minimizeWindow?: boolean; + /** + * @ignore + */ + sourceDisplayId?: any; } /** @@ -4953,14 +4961,20 @@ export abstract class IRtcEngine { * @ignore */ abstract startCameraCapture( - type: VideoSourceType, + sourceType: VideoSourceType, config: CameraCapturerConfiguration ): number; /** - * @ignore + * Stops the local video preview. + * After calling startPreview to start the preview, if you want to close the local video preview, call this method.Call this method before joining a channel or after leaving a channel. + * + * @param sourceType The type of the video frame, see VideoSourceType . + * + * @returns + * < 0: Failure. */ - abstract stopCameraCapture(type: VideoSourceType): number; + abstract stopCameraCapture(sourceType: VideoSourceType): number; /** * Sets the rotation angle of the captured video. diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 8cbf9b7bb..99a6d88dc 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -716,16 +716,6 @@ export abstract class IRtcEngineEx extends IRtcEngine { */ abstract getUserInfoByUidEx(uid: number, connection: RtcConnection): UserInfo; - /** - * @ignore - */ - abstract setVideoProfileEx( - width: number, - height: number, - frameRate: number, - bitrate: number - ): number; - /** * Enables or disables dual-stream mode on the sender side. * After you enable dual-stream mode, you can call setRemoteVideoStreamType to choose to receive either the high-quality video stream or the low-quality video stream on the subscriber side. @@ -768,13 +758,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Enables interoperability with the Agora Web SDK (applicable only in the live streaming scenarios). - * Deprecated:The SDK automatically enables interoperability with the Web SDK, so you no longer need to call this method.You can call this method to enable or disable interoperability with the Agora Web SDK. If a channel has Web SDK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user.This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios. - * - * @param enabled Whether to enable interoperability:true: Enable interoperability.false: (Default) Disable interoperability. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setHighPriorityUserListEx( uidList: number[], diff --git a/ts/Private/impl/AgoraMediaBaseImpl.ts b/ts/Private/impl/AgoraMediaBaseImpl.ts index 5da7b9cd6..c171bcd00 100644 --- a/ts/Private/impl/AgoraMediaBaseImpl.ts +++ b/ts/Private/impl/AgoraMediaBaseImpl.ts @@ -125,13 +125,19 @@ export function processIVideoFrameObserver( switch (event) { case 'onCaptureVideoFrame': if (handler.onCaptureVideoFrame !== undefined) { - handler.onCaptureVideoFrame(jsonParams.type, jsonParams.videoFrame); + handler.onCaptureVideoFrame( + jsonParams.sourceType, + jsonParams.videoFrame + ); } break; case 'onPreEncodeVideoFrame': if (handler.onPreEncodeVideoFrame !== undefined) { - handler.onPreEncodeVideoFrame(jsonParams.type, jsonParams.videoFrame); + handler.onPreEncodeVideoFrame( + jsonParams.sourceType, + jsonParams.videoFrame + ); } break; diff --git a/ts/Private/impl/IAgoraRtcEngineExImpl.ts b/ts/Private/impl/IAgoraRtcEngineExImpl.ts index 1b7d76bc3..666d57ee7 100644 --- a/ts/Private/impl/IAgoraRtcEngineExImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineExImpl.ts @@ -1352,45 +1352,6 @@ export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { return 'RtcEngineEx_getUserInfoByUidEx'; } - setVideoProfileEx( - width: number, - height: number, - frameRate: number, - bitrate: number - ): number { - const apiType = this.getApiTypeFromSetVideoProfileEx( - width, - height, - frameRate, - bitrate - ); - const jsonParams = { - width: width, - height: height, - frameRate: frameRate, - bitrate: bitrate, - toJSON: () => { - return { - width: width, - height: height, - frameRate: frameRate, - bitrate: bitrate, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromSetVideoProfileEx( - width: number, - height: number, - frameRate: number, - bitrate: number - ): string { - return 'RtcEngineEx_setVideoProfileEx'; - } - enableDualStreamModeEx( enabled: boolean, streamConfig: SimulcastStreamConfig, diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index aab9a4eb0..67917012d 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -5311,16 +5311,16 @@ export class IRtcEngineImpl implements IRtcEngine { } startCameraCapture( - type: VideoSourceType, + sourceType: VideoSourceType, config: CameraCapturerConfiguration ): number { - const apiType = this.getApiTypeFromStartCameraCapture(type, config); + const apiType = this.getApiTypeFromStartCameraCapture(sourceType, config); const jsonParams = { - type: type, + sourceType: sourceType, config: config, toJSON: () => { return { - type: type, + sourceType: sourceType, config: config, }; }, @@ -5330,19 +5330,19 @@ export class IRtcEngineImpl implements IRtcEngine { } protected getApiTypeFromStartCameraCapture( - type: VideoSourceType, + sourceType: VideoSourceType, config: CameraCapturerConfiguration ): string { return 'RtcEngine_startCameraCapture'; } - stopCameraCapture(type: VideoSourceType): number { - const apiType = this.getApiTypeFromStopCameraCapture(type); + stopCameraCapture(sourceType: VideoSourceType): number { + const apiType = this.getApiTypeFromStopCameraCapture(sourceType); const jsonParams = { - type: type, + sourceType: sourceType, toJSON: () => { return { - type: type, + sourceType: sourceType, }; }, }; @@ -5350,7 +5350,9 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromStopCameraCapture(type: VideoSourceType): string { + protected getApiTypeFromStopCameraCapture( + sourceType: VideoSourceType + ): string { return 'RtcEngine_stopCameraCapture'; } diff --git a/ts/Private/ti/AgoraMediaBase-ti.ts b/ts/Private/ti/AgoraMediaBase-ti.ts index 48d2bf47e..230cd1ae8 100644 --- a/ts/Private/ti/AgoraMediaBase-ti.ts +++ b/ts/Private/ti/AgoraMediaBase-ti.ts @@ -29,8 +29,8 @@ export const IVideoEncodedFrameObserver = t.iface([], { }); export const IVideoFrameObserver = t.iface([], { - "onCaptureVideoFrame": t.opt(t.func("boolean", t.param("type", "VideoSourceType"), t.param("videoFrame", "VideoFrame"))), - "onPreEncodeVideoFrame": t.opt(t.func("boolean", t.param("type", "VideoSourceType"), t.param("videoFrame", "VideoFrame"))), + "onCaptureVideoFrame": t.opt(t.func("boolean", t.param("sourceType", "VideoSourceType"), t.param("videoFrame", "VideoFrame"))), + "onPreEncodeVideoFrame": t.opt(t.func("boolean", t.param("sourceType", "VideoSourceType"), t.param("videoFrame", "VideoFrame"))), "onMediaPlayerVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"), t.param("mediaPlayerId", "number"))), "onRenderVideoFrame": t.opt(t.func("boolean", t.param("channelId", "string"), t.param("remoteUid", "number"), t.param("videoFrame", "VideoFrame"))), "onTranscodedVideoFrame": t.opt(t.func("boolean", t.param("videoFrame", "VideoFrame"))), From b81f589571f2ca09ed3db71f1955deb159143581 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 6 Apr 2023 11:37:31 +0800 Subject: [PATCH 08/74] ci: optimize --- example/README.md | 2 +- .../LocalVideoTranscoder.tsx | 100 +++++++----------- .../advanced/MediaRecorder/MediaRecorder.tsx | 89 +++++++++++----- .../MusicContentCenter/MusicContentCenter.tsx | 18 ++-- .../SendMultiVideoStream.tsx | 11 +- .../examples/advanced/{index.tsx => index.ts} | 0 .../examples/basic/{index.tsx => index.ts} | 0 .../JoinMultipleChannel.tsx | 2 +- .../examples/hooks/StringUid/StringUid.tsx | 7 +- .../VirtualBackground/VirtualBackground.tsx | 28 +++-- .../examples/hooks/{index.tsx => index.ts} | 0 package.json | 15 ++- .../agora_node_ext/agora_electron_bridge.cpp | 100 +++++++++--------- .../agora_node_ext/agora_electron_bridge.h | 6 +- ts/Private/IAgoraMediaPlayer.ts | 6 +- .../extension/IAgoraMediaPlayerExtension.ts | 9 +- .../extension/IAgoraMediaRecorderExtension.ts | 5 + ts/Private/impl/IAgoraMediaPlayerImpl.ts | 6 +- ts/Private/internal/IrisApiEngine.ts | 42 +++++--- ts/Private/internal/MediaPlayerInternal.ts | 38 ++++--- ts/Private/internal/MediaRecorderInternal.ts | 40 +++---- ts/Private/internal/RtcEngineExInternal.ts | 58 ++++++---- ts/Renderer/AgoraView.ts | 3 +- ts/Renderer/RendererManager.ts | 18 ++-- ts/Types.ts | 5 +- ts/Utils.ts | 2 +- 26 files changed, 349 insertions(+), 261 deletions(-) rename example/src/renderer/examples/advanced/{index.tsx => index.ts} (100%) rename example/src/renderer/examples/basic/{index.tsx => index.ts} (100%) rename example/src/renderer/examples/hooks/{index.tsx => index.ts} (100%) diff --git a/example/README.md b/example/README.md index b3fd21370..90f920f1e 100644 --- a/example/README.md +++ b/example/README.md @@ -22,7 +22,7 @@ Then do the following: git clone git@github.com:AgoraIO-Extensions/Electron-SDK.git cd example yarn -yarn dev +yarn start ``` #### (Optional) Build From Local SDK diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 2f0ee595e..9ee274b7b 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -5,6 +5,7 @@ import createAgoraRtcEngine, { IMediaPlayer, IMediaPlayerSourceObserver, IRtcEngineEventHandler, + LocalTranscoderConfiguration, MediaPlayerError, MediaPlayerState, RtcConnection, @@ -14,8 +15,6 @@ import createAgoraRtcEngine, { TranscodingVideoStream, VideoDeviceInfo, VideoSourceType, - MediaSourceType, - LocalTranscoderConfiguration, } from 'agora-electron-sdk'; import Config from '../../../config/agora.config'; @@ -155,37 +154,13 @@ export default class LocalVideoTranscoder }; startCameraCapture = (deviceId: string) => { - if ( - VideoSourceType.VideoSourceCameraPrimary === - this._getVideoSourceTypeCamera(deviceId) - ) { - this.engine?.startPrimaryCameraCapture({ - deviceId, - }); - } - if ( - VideoSourceType.VideoSourceCameraSecondary === - this._getVideoSourceTypeCamera(deviceId) - ) { - this.engine?.startSecondaryCameraCapture({ - deviceId, - }); - } + const type = this._getVideoSourceTypeCamera(deviceId); + this.engine?.startCameraCapture(type, { deviceId }); }; stopCameraCapture = (deviceId: string) => { - if ( - VideoSourceType.VideoSourceCameraPrimary === - this._getVideoSourceTypeCamera(deviceId) - ) { - this.engine?.stopPrimaryCameraCapture(); - } - if ( - VideoSourceType.VideoSourceCameraSecondary === - this._getVideoSourceTypeCamera(deviceId) - ) { - this.engine?.stopSecondaryCameraCapture(); - } + const type = this._getVideoSourceTypeCamera(deviceId); + this.engine?.stopScreenCapture(type); }; /** @@ -212,25 +187,28 @@ export default class LocalVideoTranscoder this.error(`targetSource is invalid`); } - this.engine?.startPrimaryScreenCapture({ - isCaptureWindow: - targetSource!.type === - ScreenCaptureSourceType.ScreencapturesourcetypeWindow, - screenRect: { width: 0, height: 0, x: 0, y: 0 }, - windowId: targetSource!.sourceId, - displayId: targetSource!.sourceId, - params: { - dimensions: { width: 1920, height: 1080 }, - bitrate: 1000, - frameRate: 15, - captureMouseCursor: false, - windowFocus: false, - excludeWindowList: [], - excludeWindowCount: 0, - }, - - regionRect: { x: 0, y: 0, width: 0, height: 0 }, - }); + this.engine?.startScreenCaptureDesktop( + VideoSourceType.VideoSourceScreenPrimary, + { + isCaptureWindow: + targetSource!.type === + ScreenCaptureSourceType.ScreencapturesourcetypeWindow, + screenRect: { width: 0, height: 0, x: 0, y: 0 }, + windowId: targetSource!.sourceId, + displayId: targetSource!.sourceId, + params: { + dimensions: { width: 1920, height: 1080 }, + bitrate: 1000, + frameRate: 15, + captureMouseCursor: false, + windowFocus: false, + excludeWindowList: [], + excludeWindowCount: 0, + }, + + regionRect: { x: 0, y: 0, width: 0, height: 0 }, + } + ); this.setState({ startScreenCapture: true }); }; @@ -238,7 +216,7 @@ export default class LocalVideoTranscoder * Step 3-4 (Optional): stopScreenCapture */ stopScreenCapture = () => { - this.engine?.stopPrimaryScreenCapture(); + this.engine?.stopScreenCapture(VideoSourceType.VideoSourceScreenPrimary); this.setState({ startScreenCapture: false }); }; @@ -301,6 +279,8 @@ export default class LocalVideoTranscoder return [ VideoSourceType.VideoSourceCameraPrimary, VideoSourceType.VideoSourceCameraSecondary, + VideoSourceType.VideoSourceCameraThird, + VideoSourceType.VideoSourceCameraFourth, ][videoDevices?.findIndex(({ deviceId }) => deviceId === value) ?? -1]; }; @@ -312,33 +292,33 @@ export default class LocalVideoTranscoder height = 300; const streams: TranscodingVideoStream[] = []; - if (videoDeviceId?.length) { + videoDeviceId?.map((v) => { streams.push({ - sourceType: MediaSourceType.PrimaryCameraSource, + sourceType: this._getVideoSourceTypeCamera(v), }); - } + }); if (startScreenCapture) { streams.push({ - sourceType: MediaSourceType.PrimaryScreenSource, + sourceType: VideoSourceType.VideoSourceScreenPrimary, }); } if (open) { streams.push({ - sourceType: MediaSourceType.MediaPlayerSource, - imageUrl: this.player?.getMediaPlayerId().toString(), + sourceType: VideoSourceType.VideoSourceMediaPlayer, + mediaPlayerId: this.player?.getMediaPlayerId(), }); } if (imageUrl) { const getImageType = (url) => { if (url.endsWith('.png')) { - return MediaSourceType.RtcImagePngSource; + return VideoSourceType.VideoSourceRtcImagePng; } else if (url.endsWith('.jepg') || url.endsWith('.jpg')) { - return MediaSourceType.RtcImageJpegSource; + return VideoSourceType.VideoSourceRtcImageJpeg; } else if (url.endsWith('.gif')) { - return MediaSourceType.RtcImageGifSource; + return VideoSourceType.VideoSourceRtcImageGif; } }; streams.push({ @@ -362,7 +342,7 @@ export default class LocalVideoTranscoder return { streamCount: streams.length, - VideoInputStreams: streams, + videoInputStreams: streams, videoOutputConfiguration: { dimensions: { width: max_width, height: max_height }, }, diff --git a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx index 5e25dd60b..6bb4873f7 100644 --- a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx +++ b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx @@ -11,6 +11,7 @@ import { RecorderErrorCode, RecorderInfo, RecorderState, + IMediaRecorder, } from 'agora-electron-sdk'; import Config from '../../../config/agora.config'; @@ -41,6 +42,8 @@ export default class MediaRecorder extends BaseComponent<{}, State> implements IRtcEngineEventHandler, IMediaRecorderObserver { + protected recorder?: IMediaRecorder; + protected createState(): State { return { appId: Config.appId, @@ -85,6 +88,8 @@ export default class MediaRecorder // Start preview before joinChannel this.engine.startPreview(); this.setState({ startPreview: true }); + + this.createMediaRecorder(); } /** @@ -114,11 +119,22 @@ export default class MediaRecorder } /** - * Step 3-1: startRecording + * Step 3-1: createMediaRecorder + */ + createMediaRecorder = () => { + const { channelId, uid } = this.state; + this.recorder = this.engine?.createLocalMediaRecorder({ + channelId, + localUid: uid, + }); + this.recorder?.setMediaRecorderObserver(this); + }; + + /** + * Step 3-2: startRecording */ startRecording = () => { const { - channelId, uid, storagePath, containerFormat, @@ -126,50 +142,75 @@ export default class MediaRecorder maxDurationMs, recorderInfoUpdateInterval, } = this.state; - this.engine - ?.getMediaRecorder() - .setMediaRecorderObserver({ channelId, localUid: uid }, this); - this.engine?.getMediaRecorder().startRecording( - { channelId, localUid: uid }, - { - storagePath: `${storagePath}/${uid}.mp4`, - containerFormat, - streamType, - maxDurationMs, - recorderInfoUpdateInterval, - } - ); + this.recorder?.startRecording({ + storagePath: `${storagePath}/${uid}.mp4`, + containerFormat, + streamType, + maxDurationMs, + recorderInfoUpdateInterval, + }); }; /** - * Step 3-2: stopRecording + * Step 3-3: stopRecording */ stopRecording = () => { - const { channelId, uid } = this.state; - this.engine?.getMediaRecorder().stopRecording({ channelId, localUid: uid }); + this.recorder?.stopRecording(); }; /** - * Step 4: leaveChannel + * Step 4: destroyMediaRecorder + */ + protected destroyMediaRecorder() { + if (!this.recorder) return; + this.engine?.destroyMediaRecorder(this.recorder); + } + + /** + * Step 5: leaveChannel */ protected leaveChannel() { this.engine?.leaveChannel(); } /** - * Step 5: releaseRtcEngine + * Step 6: releaseRtcEngine */ protected releaseRtcEngine() { + this.destroyMediaRecorder(); this.engine?.unregisterEventHandler(this); this.engine?.release(); } - onRecorderInfoUpdated(info: RecorderInfo) { - this.info('onRecorderInfoUpdated', 'info', info); + onRecorderInfoUpdated(channelId: string, uid: number, info: RecorderInfo) { + this.info( + 'onRecorderInfoUpdated', + 'channelId', + channelId, + 'uid', + uid, + 'info', + info + ); } - onRecorderStateChanged(state: RecorderState, error: RecorderErrorCode) { - this.info('onRecorderStateChanged', 'state', state, 'error', error); + onRecorderStateChanged( + channelId: string, + uid: number, + state: RecorderState, + error: RecorderErrorCode + ) { + this.info( + 'onRecorderStateChanged', + 'channelId', + channelId, + 'uid', + uid, + 'state', + state, + 'error', + error + ); switch (state) { case RecorderState.RecorderStateStart: this.setState({ startRecoding: true }); diff --git a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx index c9911adce..9392cfda3 100644 --- a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx +++ b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx @@ -250,19 +250,19 @@ export default class MusicContentCenter onMusicChartsResult( requestId: string, - status: MusicContentCenterStatusCode, - result: MusicChartInfo[] + result: MusicChartInfo[], + errorCode: MusicContentCenterStatusCode ) { - this.info('onMusicChartsResult', requestId, status, result); + this.info('onMusicChartsResult', requestId, result, errorCode); this.setState({ musicChartInfos: result }); } onMusicCollectionResult( requestId: string, - status: MusicContentCenterStatusCode, - result: MusicCollection + result: MusicCollection, + errorCode: MusicContentCenterStatusCode ) { - this.info('onMusicCollectionResult', requestId, status, result); + this.info('onMusicCollectionResult', requestId, result, errorCode); this.setState({ musicCollection: result, musics: Array.from({ length: result.getCount() }, (value, index) => { @@ -274,11 +274,11 @@ export default class MusicContentCenter onPreLoadEvent( songCode: number, percent: number, + lyricUrl: string, status: PreloadStatusCode, - msg: string, - lyricUrl?: string + errorCode: MusicContentCenterStatusCode ) { - this.info('onPreLoadEvent', songCode, percent, status, msg, lyricUrl); + this.info('onPreLoadEvent', songCode, percent, lyricUrl, status, errorCode); if (songCode === this.state.songCode) { this.setState({ preload: status === PreloadStatusCode.KPreloadStatusCompleted, diff --git a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx index 9388323f1..4435f6b47 100644 --- a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx +++ b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx @@ -7,7 +7,7 @@ import { createAgoraRtcEngine, IAudioFrameObserver, IMediaPlayer, - IMediaPlayerAudioFrameObserver, + IAudioPcmFrameSink, IMediaPlayerSourceObserver, IMediaPlayerVideoFrameObserver, IRtcEngineEventHandler, @@ -44,7 +44,7 @@ export default class SendMultiVideoStream IMediaPlayerSourceObserver, IAudioFrameObserver, IVideoFrameObserver, - IMediaPlayerAudioFrameObserver, + IAudioPcmFrameSink, IMediaPlayerVideoFrameObserver { // @ts-ignore @@ -273,8 +273,11 @@ export default class SendMultiVideoStream return true; } - onCaptureVideoFrame(videoFrame: VideoFrame): boolean { - this.info('onCaptureVideoFrame', videoFrame); + onCaptureVideoFrame( + sourceType: VideoSourceType, + videoFrame: VideoFrame + ): boolean { + this.info('onCaptureVideoFrame', sourceType, videoFrame); return true; } diff --git a/example/src/renderer/examples/advanced/index.tsx b/example/src/renderer/examples/advanced/index.ts similarity index 100% rename from example/src/renderer/examples/advanced/index.tsx rename to example/src/renderer/examples/advanced/index.ts diff --git a/example/src/renderer/examples/basic/index.tsx b/example/src/renderer/examples/basic/index.ts similarity index 100% rename from example/src/renderer/examples/basic/index.tsx rename to example/src/renderer/examples/basic/index.ts diff --git a/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx index dd4196c3b..ecd802be8 100644 --- a/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -42,7 +42,7 @@ export default function JoinMultipleChannel() { const engine = useRef(createAgoraRtcEngine()); const [channelId, setChannelId] = useState(Config.channelId); const [channelId2, setChannelId2] = useState(''); - const [token2, setToken2] = useState(''); + const [token2] = useState(''); const [uid, setUid] = useState(Config.uid); const [uid2, setUid2] = useState(0); const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); diff --git a/example/src/renderer/examples/hooks/StringUid/StringUid.tsx b/example/src/renderer/examples/hooks/StringUid/StringUid.tsx index 1927d986e..35c142aff 100644 --- a/example/src/renderer/examples/hooks/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/hooks/StringUid/StringUid.tsx @@ -74,7 +74,7 @@ export default function StringUid() { const getUserInfoByUserAccount = () => { const userInfo = engine.current.getUserInfoByUserAccount(userAccount); if (userInfo) { - log.debug('getUserInfoByUserAccount', 'userInfo', userInfo); + log.debug('getUserInfoByUserAccount', userInfo); } else { log.error('getUserInfoByUserAccount'); } @@ -170,7 +170,10 @@ export default function StringUid() { }; }, [initRtcEngine]); - const onChannelIdChange = useCallback((text) => setChannelId(text), []); + const onChannelIdChange = useCallback( + (text: string) => setChannelId(text), + [] + ); return ( diff --git a/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx index 34934c6aa..d989c1b28 100644 --- a/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx +++ b/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx @@ -51,18 +51,20 @@ export default function VirtualBackground() { const [enableVirtualBackground, setEnableVirtualBackground] = useState(false); + const setupOtherExtension = useCallback(() => { + engine.current.enableExtension( + 'agora_video_filters_segmentation', + 'portrait_segmentation', + true + ); + }, [engine]); + const { token, initRtcEngine, startPreview } = useInitRtcEngine({ enableAudio, enableVideo, enablePreview, engine: engine.current, - setupOtherExtension: () => { - engine.current.enableExtension( - 'agora_video_filters_segmentation', - 'portrait_segmentation', - true - ); - }, + setupOtherExtension, }); /** @@ -200,20 +202,16 @@ export default function VirtualBackground() { } ); - engine.current.addListener( - 'onLocalUserRegistered', - (uid: number, userAccount: string) => { - log.info('LocalUserRegistered', 'uid', uid, 'userAccount', userAccount); - } - ); - const engineCopy = engine.current; return () => { engineCopy.removeAllListeners(); }; }, [initRtcEngine]); - const onChannelIdChange = useCallback((text) => setChannelId(text), []); + const onChannelIdChange = useCallback( + (text: string) => setChannelId(text), + [] + ); return ( diff --git a/example/src/renderer/examples/hooks/index.tsx b/example/src/renderer/examples/hooks/index.ts similarity index 100% rename from example/src/renderer/examples/hooks/index.tsx rename to example/src/renderer/examples/hooks/index.ts diff --git a/package.json b/package.json index 2d1fdbe11..28a0fb341 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "env": { "es6": true, "node": true, - "browser": true + "shared-node-browser": true }, "parser": "@typescript-eslint/parser", "parserOptions": { @@ -132,7 +132,18 @@ "define": false, "obj_attrib": false, "info": false, - "NodeJS": false + "NodeJS": false, + "window": false, + "alert": false, + "document": false, + "HTMLElement": false, + "HTMLDivElement": false, + "WebGL2RenderingContext": false, + "WebGLTexture": false, + "HTMLCanvasElement": false, + "ResizeObserver": false, + "name": false, + "Element": false }, "rules": { "prettier/prettier": [ diff --git a/source_code/agora_node_ext/agora_electron_bridge.cpp b/source_code/agora_node_ext/agora_electron_bridge.cpp index 86ae36f50..691020336 100644 --- a/source_code/agora_node_ext/agora_electron_bridge.cpp +++ b/source_code/agora_node_ext/agora_electron_bridge.cpp @@ -46,13 +46,15 @@ napi_value AgoraElectronBridge::Init(napi_env env, napi_value exports) { DECLARE_NAPI_METHOD("GetVideoFrame", GetVideoFrame), DECLARE_NAPI_METHOD("SetAddonLogFile", SetAddonLogFile), DECLARE_NAPI_METHOD("InitializeEnv", InitializeEnv), - DECLARE_NAPI_METHOD("ReleaseEnv", ReleaseEnv)}; + DECLARE_NAPI_METHOD("ReleaseEnv", ReleaseEnv), + DECLARE_NAPI_METHOD("ReleaseRenderer", ReleaseRenderer)}; napi_value cons; // method count !!! - status = napi_define_class(env, _class_name, NAPI_AUTO_LENGTH, New, nullptr, - 9, properties, &cons); + status = napi_define_class( + env, _class_name, NAPI_AUTO_LENGTH, New, nullptr, + sizeof(properties) / sizeof(napi_property_descriptor), properties, &cons); assert(status == napi_ok); AgoraElectronBridge::_ref_construcotr_ptr = new napi_ref(); @@ -285,19 +287,17 @@ napi_value AgoraElectronBridge::EnableVideoFrameCache(napi_env env, status = napi_unwrap(env, jsthis, reinterpret_cast(&agoraElectronBridge)); - IrisVideoFrameBufferConfig config; + IrisRtcVideoFrameConfig config = EmptyIrisRtcVideoFrameConfig; napi_value obj = args[0]; - int videoSourceType; std::string channelId = ""; unsigned int width = 0; unsigned int height = 0; - napi_obj_get_property(env, obj, "uid", config.id); - napi_obj_get_property(env, obj, "videoSourceType", videoSourceType); - config.type = (IrisVideoSourceType) videoSourceType; + napi_obj_get_property(env, obj, "uid", config.uid); + napi_obj_get_property(env, obj, "videoSourceType", config.video_source_type); napi_obj_get_property(env, obj, "channelId", channelId); - strcpy(config.key, channelId.c_str()); + strcpy(config.channelId, channelId.c_str()); napi_obj_get_property(env, obj, "width", width); napi_obj_get_property(env, obj, "height", height); @@ -305,15 +305,12 @@ napi_value AgoraElectronBridge::EnableVideoFrameCache(napi_env env, memset(result, '\0', kBasicStringLength); int ret = ERR_FAILED; - if (!agoraElectronBridge->_iris_video_frame_buffer_manager) { + if (!agoraElectronBridge->_iris_rendering) { ret = ERR_NOT_INITIALIZED; - LOG_F(INFO, "IrisVideoFrameBufferManager Not Init"); + LOG_F(INFO, "IrisRtcRendering Not Init"); } else { try { - iris::IrisVideoFrameBuffer buffer( - IrisVideoFrameType::kVideoFrameTypeYUV420); - agoraElectronBridge->_iris_video_frame_buffer_manager - ->EnableVideoFrameBuffer(buffer, &config); + agoraElectronBridge->_iris_rendering->AddVideoFrameCacheKey(config); ret = ERR_OK; } catch (std::exception &e) { LOG_F(INFO, "%s catch exception %s", __FUNCTION__, e.what()); @@ -338,28 +335,25 @@ AgoraElectronBridge::DisableVideoFrameCache(napi_env env, napi_unwrap(env, jsthis, reinterpret_cast(&agoraElectronBridge)); napi_value obj = args[0]; - IrisVideoFrameBufferConfig config; + IrisRtcVideoFrameConfig config = EmptyIrisRtcVideoFrameConfig; - int videoSourceType; std::string channelId = ""; - napi_obj_get_property(env, obj, "uid", config.id); - napi_obj_get_property(env, obj, "videoSourceType", videoSourceType); - config.type = (IrisVideoSourceType) videoSourceType; + napi_obj_get_property(env, obj, "uid", config.uid); + napi_obj_get_property(env, obj, "videoSourceType", config.video_source_type); napi_obj_get_property(env, obj, "channelId", channelId); - strcpy(config.key, channelId.c_str()); + strcpy(config.channelId, channelId.c_str()); char result[kBasicStringLength]; memset(result, '\0', kBasicStringLength); int ret = ERR_FAILED; - if (!agoraElectronBridge->_iris_video_frame_buffer_manager) { + if (!agoraElectronBridge->_iris_rendering) { ret = ERR_NOT_INITIALIZED; - LOG_F(INFO, "IrisVideoFrameBufferManager Not Init"); + LOG_F(INFO, "IrisRtcRendering Not Init"); } else { try { - agoraElectronBridge->_iris_video_frame_buffer_manager - ->DisableVideoFrameBuffer(&config); + agoraElectronBridge->_iris_rendering->RemoveVideoFrameCacheKey(config); ret = ERR_OK; } catch (std::exception &e) { LOG_F(INFO, "%s catch exception %s", __FUNCTION__, e.what()); @@ -381,7 +375,7 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, AgoraElectronBridge *agoraElectronBridge; status = napi_unwrap(env, jsthis, reinterpret_cast(&agoraElectronBridge)); - IrisVideoFrameBufferConfig config; + IrisRtcVideoFrameConfig config = EmptyIrisRtcVideoFrameConfig; napi_value obj = args[0]; int videoSourceType; @@ -398,11 +392,10 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, int height; int width; - napi_obj_get_property(env, obj, "uid", config.id); - napi_obj_get_property(env, obj, "videoSourceType", videoSourceType); - config.type = (IrisVideoSourceType) videoSourceType; + napi_obj_get_property(env, obj, "uid", config.uid); + napi_obj_get_property(env, obj, "videoSourceType", config.video_source_type); napi_obj_get_property(env, obj, "channelId", channel_id); - strcpy(config.key, channel_id.c_str()); + strcpy(config.channelId, channel_id.c_str()); napi_obj_get_property(env, obj, "yBuffer", y_buffer_obj); napi_get_buffer_info(env, y_buffer_obj, &y_buffer, &y_length); @@ -416,10 +409,10 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, napi_obj_get_property(env, obj, "height", height); napi_obj_get_property(env, obj, "width", width); - IrisVideoFrame videoFrame = IrisVideoFrame_default; - videoFrame.y_buffer = y_buffer; - videoFrame.u_buffer = u_buffer; - videoFrame.v_buffer = v_buffer; + IrisCVideoFrame videoFrame; + videoFrame.yBuffer = (uint8_t *) y_buffer; + videoFrame.uBuffer = (uint8_t *) u_buffer; + videoFrame.vBuffer = (uint8_t *) v_buffer; videoFrame.height = height; videoFrame.width = width; @@ -428,23 +421,23 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, int32_t ret = ERR_NOT_INITIALIZED; status = napi_create_object(env, &retObj); - if (!agoraElectronBridge->_iris_video_frame_buffer_manager.get()) { + if (!agoraElectronBridge->_iris_rendering) { napi_obj_set_property(env, retObj, "ret", ret); - LOG_F(INFO, "IrisVideoFrameBufferManager Not Init"); + LOG_F(INFO, "IrisRtcRendering Not Init"); return retObj; } - ret = agoraElectronBridge->_iris_video_frame_buffer_manager->GetVideoFrame( - videoFrame, isFresh, &config); + ret = agoraElectronBridge->_iris_rendering->GetVideoFrameCache( + config, &videoFrame, isFresh); unsigned int rotation = 0; napi_obj_set_property(env, retObj, "ret", ret); napi_obj_set_property(env, retObj, "isNewFrame", isFresh); napi_obj_set_property(env, retObj, "width", videoFrame.width); napi_obj_set_property(env, retObj, "height", videoFrame.height); - napi_obj_set_property(env, retObj, "yStride", videoFrame.y_stride); + napi_obj_set_property(env, retObj, "yStride", videoFrame.yStride); napi_obj_set_property(env, retObj, "rotation", rotation); - napi_obj_set_property(env, retObj, "timestamp", videoFrame.render_time_ms); + napi_obj_set_property(env, retObj, "timestamp", videoFrame.renderTimeMs); return retObj; } @@ -484,29 +477,40 @@ napi_value AgoraElectronBridge::ReleaseEnv(napi_env env, return retValue; } +napi_value AgoraElectronBridge::ReleaseRenderer(napi_env env, + napi_callback_info info) { + napi_status status; + napi_value jsthis; + size_t argc = 2; + napi_value args[2]; + status = napi_get_cb_info(env, info, &argc, args, &jsthis, nullptr); + + AgoraElectronBridge *agoraElectronBridge; + status = + napi_unwrap(env, jsthis, reinterpret_cast(&agoraElectronBridge)); + + agoraElectronBridge->_iris_rendering.reset(); + LOG_F(INFO, __FUNCTION__); + napi_value retValue = nullptr; + return retValue; +} + void AgoraElectronBridge::Init() { if (!_iris_api_engine) { LOG_F(INFO, __FUNCTION__); // create auto engine = createIrisRtcEngine(nullptr); - auto bufferManager = std::make_shared(); ::enableUseJsonArray(true); - // combine - engine->Attach(bufferManager.get()); - // assign _iris_api_engine.reset(engine); - _iris_video_frame_buffer_manager = bufferManager; + _iris_rendering.reset(iris::IrisRtcRendering::Create(engine)); } } void AgoraElectronBridge::Release() { if (_iris_api_engine) { - // uncontrol - _iris_api_engine->Detach(_iris_video_frame_buffer_manager.get()); // reset - _iris_video_frame_buffer_manager.reset(); _iris_api_engine.reset(); } LOG_F(INFO, __FUNCTION__); diff --git a/source_code/agora_node_ext/agora_electron_bridge.h b/source_code/agora_node_ext/agora_electron_bridge.h index e1eb4a2ae..8e0064cbd 100644 --- a/source_code/agora_node_ext/agora_electron_bridge.h +++ b/source_code/agora_node_ext/agora_electron_bridge.h @@ -6,7 +6,7 @@ */ #pragma once #include "iris_engine_base.h" -#include "iris_video_processor_cxx.h" +#include "iris_rtc_rendering_cxx.h" #include "node_base.h" #include #include @@ -38,6 +38,7 @@ class AgoraElectronBridge { static napi_value SetAddonLogFile(napi_env env, napi_callback_info info); static napi_value InitializeEnv(napi_env env, napi_callback_info info); static napi_value ReleaseEnv(napi_env env, napi_callback_info info); + static napi_value ReleaseRenderer(napi_env env, napi_callback_info info); void OnApiError(const char *errorMessage); void Init(); @@ -52,8 +53,7 @@ class AgoraElectronBridge { napi_ref _ref; std::shared_ptr _iris_api_engine; std::shared_ptr _iris_rtc_event_handler; - std::shared_ptr - _iris_video_frame_buffer_manager; + std::shared_ptr _iris_rendering; private: char _result[kBasicResultLength]; diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index 211eeb903..f152f932f 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -1,5 +1,9 @@ import './extension/IAgoraMediaPlayerExtension'; -import { PlayerStreamInfo, MediaPlayerState } from './AgoraMediaPlayerTypes'; +import { + MediaSource, + PlayerStreamInfo, + MediaPlayerState, +} from './AgoraMediaPlayerTypes'; import { RenderModeType, IAudioSpectrumObserver, diff --git a/ts/Private/extension/IAgoraMediaPlayerExtension.ts b/ts/Private/extension/IAgoraMediaPlayerExtension.ts index 0b3ec3753..fda7dafa1 100644 --- a/ts/Private/extension/IAgoraMediaPlayerExtension.ts +++ b/ts/Private/extension/IAgoraMediaPlayerExtension.ts @@ -1,13 +1,10 @@ import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; -import { - IMediaPlayerAudioFrameObserver, - IMediaPlayerVideoFrameObserver, -} from '../IAgoraMediaPlayer'; -import { IAudioSpectrumObserver } from '../AgoraMediaBase'; +import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; +import { IAudioPcmFrameSink, IAudioSpectrumObserver } from '../AgoraMediaBase'; import { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaPlayerEvent = IMediaPlayerSourceObserver & - IMediaPlayerAudioFrameObserver & + IAudioPcmFrameSink & IMediaPlayerVideoFrameObserver & IAudioSpectrumObserver; diff --git a/ts/Private/extension/IAgoraMediaRecorderExtension.ts b/ts/Private/extension/IAgoraMediaRecorderExtension.ts index 94174ae02..c22938ddd 100644 --- a/ts/Private/extension/IAgoraMediaRecorderExtension.ts +++ b/ts/Private/extension/IAgoraMediaRecorderExtension.ts @@ -51,5 +51,10 @@ declare module '../IAgoraMediaRecorder' { removeAllListeners( eventType?: EventType ): void; + + /** + * @ignore + */ + release(): void; } } diff --git a/ts/Private/impl/IAgoraMediaPlayerImpl.ts b/ts/Private/impl/IAgoraMediaPlayerImpl.ts index bd6cad97d..b4e2358d0 100644 --- a/ts/Private/impl/IAgoraMediaPlayerImpl.ts +++ b/ts/Private/impl/IAgoraMediaPlayerImpl.ts @@ -4,7 +4,11 @@ import { IMediaPlayerVideoFrameObserver, IMediaPlayerCacheManager, } from '../IAgoraMediaPlayer'; -import { PlayerStreamInfo, MediaPlayerState } from '../AgoraMediaPlayerTypes'; +import { + MediaSource, + PlayerStreamInfo, + MediaPlayerState, +} from '../AgoraMediaPlayerTypes'; import { RenderModeType, IAudioSpectrumObserver, diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index d62b5b521..90d8c26ba 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -6,6 +6,7 @@ import { AudioFrame, AudioPcmFrame, IAudioFrameObserver, + IAudioPcmFrameSink, IAudioSpectrumObserver, IMediaRecorderObserver, IVideoEncodedFrameObserver, @@ -20,7 +21,6 @@ import { } from '../IAgoraRtcEngine'; import { IMediaPlayer, - IMediaPlayerAudioFrameObserver, IMediaPlayerVideoFrameObserver, } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; @@ -30,6 +30,7 @@ import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; import { processIAudioFrameObserver, processIAudioFrameObserverBase, + processIAudioPcmFrameSink, processIAudioSpectrumObserver, processIMediaRecorderObserver, processIVideoEncodedFrameObserver, @@ -40,10 +41,7 @@ import { processIMetadataObserver, processIRtcEngineEventHandler, } from '../impl/IAgoraRtcEngineImpl'; -import { - processIMediaPlayerAudioFrameObserver, - processIMediaPlayerVideoFrameObserver, -} from '../impl/IAgoraMediaPlayerImpl'; +import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; @@ -103,7 +101,7 @@ export type EventProcessor = { | IAudioEncodedFrameObserver | IVideoEncodedFrameObserver | IMediaPlayerSourceObserver - | IMediaPlayerAudioFrameObserver + | IAudioPcmFrameSink | IMediaPlayerVideoFrameObserver | IMediaRecorderObserver | IMetadataObserver @@ -217,7 +215,7 @@ export const EVENT_PROCESSORS = { IMediaPlayerAudioFrameObserver: { suffix: 'MediaPlayer_AudioFrameObserver_', type: EVENT_TYPE.IMediaPlayer, - func: [processIMediaPlayerAudioFrameObserver], + func: [processIAudioPcmFrameSink], preprocess: (event: string, data: any, buffers: Uint8Array[]) => { if (data.frame) { (data.frame as AudioPcmFrame).data_ = Array.from(buffers[0] ?? []); @@ -247,9 +245,7 @@ export const EVENT_PROCESSORS = { type: EVENT_TYPE.IMediaRecorder, func: [processIMediaRecorderObserver], handlers: (data: any) => [ - MediaRecorderInternal._observers.get( - (data.connection.channelId ?? '') + data.connection.localUid - ), + MediaRecorderInternal._observers.get(data.nativeHandle), ], }, IMetadataObserver: { @@ -355,7 +351,7 @@ function handleEvent(...[event, data, buffers]: any) { /** * @internal */ -export function callIrisApi(funcName: string, params: any): any { +export function callIrisApi(funcName: string, params: any): any { try { const buffers: Uint8Array[] = []; @@ -375,6 +371,8 @@ export function callIrisApi(funcName: string, params: any): any { buffers.push(Buffer.from('')); // frame.metadata_buffer buffers.push(Buffer.from('')); + // frame.alphaBuffer + buffers.push(params.frame.alphaBuffer); break; case 'MediaEngine_pushEncodedVideoImage': // imageBuffer @@ -391,6 +389,13 @@ export function callIrisApi(funcName: string, params: any): any { params.toJSON = function () { return { ...json, playerId: params.mediaPlayerId }; }; + } else if (funcName.startsWith('MediaRecorder_')) { + // @ts-ignore + params.nativeHandle = (this as MediaRecorderInternal).nativeHandle; + const json = params.toJSON?.call(); + params.toJSON = function () { + return { ...json, nativeHandle: params.nativeHandle }; + }; } else if (funcName.startsWith('RtcEngine_')) { switch (funcName) { case 'RtcEngine_initialize': @@ -421,6 +426,13 @@ export function callIrisApi(funcName: string, params: any): any { return { playerId: params.mediaPlayerId }; }; break; + case 'RtcEngine_destroyMediaRecorder': + // @ts-ignore + params.nativeHandle = (this as MediaRecorderInternal).nativeHandle; + params.toJSON = function () { + return { nativeHandle: params.nativeHandle }; + }; + break; } } @@ -432,15 +444,15 @@ export function callIrisApi(funcName: string, params: any): any { ); let ret = callApiResult; if (ret !== undefined && ret !== null && ret !== '') { - ret = JSON.parse(ret); + const retObj = JSON.parse(ret); if (isDebuggable()) { - if (typeof ret.result === 'number' && ret.result < 0) { + if (typeof retObj.result === 'number' && retObj.result < 0) { console.error('callApi', funcName, JSON.stringify(params), ret); } else { console.debug('callApi', funcName, JSON.stringify(params), ret); } } - return ret; + return retObj; } else { if (isDebuggable()) { console.error( @@ -465,8 +477,8 @@ export function callIrisApi(funcName: string, params: any): any { } else { console.warn('callApi', funcName, JSON.stringify(params), e); } - return {}; } + return {}; } /** diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index cf218843a..60bf1f0f1 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -2,20 +2,25 @@ import { createCheckers } from 'ts-interface-checker'; import { AgoraEnv, logWarn } from '../../Utils'; -import { ErrorCodeType, VideoSourceType } from '../AgoraBase'; -import { IAudioSpectrumObserver, RenderModeType } from '../AgoraMediaBase'; +import { ErrorCodeType } from '../AgoraBase'; import { - IMediaPlayerAudioFrameObserver, - IMediaPlayerVideoFrameObserver, -} from '../IAgoraMediaPlayer'; + IAudioSpectrumObserver, + IAudioPcmFrameSink, + RawAudioFrameOpModeType, + VideoSourceType, + RenderModeType, +} from '../AgoraMediaBase'; +import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import { IMediaPlayerEvent } from '../extension/IAgoraMediaPlayerExtension'; -import { processIAudioSpectrumObserver } from '../impl/AgoraMediaBaseImpl'; +import { + processIAudioPcmFrameSink, + processIAudioSpectrumObserver, +} from '../impl/AgoraMediaBaseImpl'; import { IMediaPlayerImpl, - processIMediaPlayerAudioFrameObserver, processIMediaPlayerVideoFrameObserver, } from '../impl/IAgoraMediaPlayerImpl'; import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; @@ -37,8 +42,10 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { number, IMediaPlayerSourceObserver[] >(); - static _audio_frame_observers: Map = - new Map(); + static _audio_frame_observers: Map = new Map< + number, + IAudioPcmFrameSink[] + >(); static _video_frame_observers: Map = new Map(); static _audio_spectrum_observers: Map = @@ -143,7 +150,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { eventType, data[1] ); - processIMediaPlayerAudioFrameObserver( + processIAudioPcmFrameSink( { [eventType]: listener }, eventType, data[1] @@ -224,7 +231,10 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.unregisterPlayerSourceObserver(observer); } - registerAudioFrameObserver(observer: IMediaPlayerAudioFrameObserver): number { + registerAudioFrameObserver( + observer: IAudioPcmFrameSink, + mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly + ): number { let observers = MediaPlayerInternal._audio_frame_observers.get( this._mediaPlayerId ); @@ -238,12 +248,10 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { if (!observers.find((value) => value === observer)) { observers.push(observer); } - return super.registerAudioFrameObserver(observer); + return super.registerAudioFrameObserver(observer, mode); } - unregisterAudioFrameObserver( - observer: IMediaPlayerAudioFrameObserver - ): number { + unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number { let observers = MediaPlayerInternal._audio_frame_observers.get( this._mediaPlayerId ); diff --git a/ts/Private/internal/MediaRecorderInternal.ts b/ts/Private/internal/MediaRecorderInternal.ts index 855b3f51a..a825a0c81 100644 --- a/ts/Private/internal/MediaRecorderInternal.ts +++ b/ts/Private/internal/MediaRecorderInternal.ts @@ -2,7 +2,6 @@ import { createCheckers } from 'ts-interface-checker'; import { ErrorCodeType } from '../AgoraBase'; import { IMediaRecorderObserver } from '../AgoraMediaBase'; -import { RtcConnection } from '../IAgoraRtcEngineEx'; import { IMediaRecorderEvent } from '../extension/IAgoraMediaRecorderExtension'; @@ -20,6 +19,7 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { string, IMediaRecorderObserver >(); + private readonly _nativeHandle: string; private _events: Map< any, { @@ -34,22 +34,27 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { } >(); - setMediaRecorderObserver( - connection: RtcConnection, - callback: IMediaRecorderObserver - ): number { - const key = (connection.channelId ?? '') + connection.localUid; - if (MediaRecorderInternal._observers.has(key)) { - return ErrorCodeType.ErrOk; - } - MediaRecorderInternal._observers.set(key, callback); - return super.setMediaRecorderObserver(connection, callback); + constructor(nativeHandle: string) { + super(); + this._nativeHandle = nativeHandle; } release() { - MediaRecorderInternal._observers.clear(); + MediaRecorderInternal._observers.delete(this._nativeHandle); this.removeAllListeners(); - super.release(); + } + + get nativeHandle(): string { + return this._nativeHandle; + } + + setMediaRecorderObserver(callback: IMediaRecorderObserver): number { + const key = this._nativeHandle; + if (MediaRecorderInternal._observers.has(key)) { + return ErrorCodeType.ErrOk; + } + MediaRecorderInternal._observers.set(key, callback); + return super.setMediaRecorderObserver(callback); } _addListenerPreCheck( @@ -60,11 +65,10 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { [eventType]: undefined, }) ) { - if (MediaRecorderInternal._observers.size === 0) { - console.error( - 'Please call `setMediaRecorderObserver` before you want to receive event by `addListener`' - ); - return false; + if ( + MediaRecorderInternal._observers.get(this._nativeHandle) === undefined + ) { + this.setMediaRecorderObserver({}); } } return true; diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 8777dff45..c4991f437 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -9,16 +9,20 @@ import { ClientRoleOptions, ClientRoleType, DataStreamConfig, - ErrorCodeType, + EchoTestConfiguration, IAudioEncodedFrameObserver, SimulcastStreamConfig, SimulcastStreamMode, + WatermarkOptions, VideoCanvas, VideoMirrorModeType, - VideoSourceType, - WatermarkOptions, + ErrorCodeType, } from '../AgoraBase'; -import { IAudioSpectrumObserver, RenderModeType } from '../AgoraMediaBase'; +import { + VideoSourceType, + IAudioSpectrumObserver, + RenderModeType, +} from '../AgoraMediaBase'; import { IMediaEngine } from '../IAgoraMediaEngine'; import { IMediaPlayer } from '../IAgoraMediaPlayer'; import { IMediaRecorder } from '../IAgoraMediaRecorder'; @@ -56,6 +60,11 @@ import { import AgoraBaseTI from '../ti/AgoraBase-ti'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; import IAgoraRtcEngineTI from '../ti/IAgoraRtcEngine-ti'; +const checkers = createCheckers( + AgoraBaseTI, + AgoraMediaBaseTI, + IAgoraRtcEngineTI +); import { AudioDeviceManagerInternal } from './AudioDeviceManagerInternal'; import { LocalSpatialAudioEngineInternal } from './LocalSpatialAudioEngineInternal'; @@ -68,12 +77,6 @@ import { callIrisApi, DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; import { EmitterSubscription } from './emitter/EventEmitter'; import { RendererManager } from '../../Renderer/RendererManager'; -const checkers = createCheckers( - AgoraBaseTI, - AgoraMediaBaseTI, - IAgoraRtcEngineTI -); - export class RtcEngineExInternal extends IRtcEngineExImpl { static _event_handlers: IRtcEngineEventHandler[] = []; static _direct_cdn_streaming_event_handler: IDirectCdnStreamingEventHandler[] = @@ -86,7 +89,6 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { private _video_device_manager: IVideoDeviceManager = new IVideoDeviceManagerImpl(); private _media_engine: IMediaEngine = new MediaEngineInternal(); - private _media_recorder: IMediaRecorder = new MediaRecorderInternal(); private _music_content_center: IMusicContentCenter = new MusicContentCenterInternal(); private _local_spatial_audio_engine: ILocalSpatialAudioEngine = @@ -116,12 +118,11 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { } release(sync: boolean = false) { - AgoraEnv.AgoraRendererManager?.enableRender(false); + AgoraEnv.AgoraRendererManager?.clear(); AgoraEnv.AgoraRendererManager = undefined; this._audio_device_manager.release(); this._video_device_manager.release(); this._media_engine.release(); - this._media_recorder.release(); this._local_spatial_audio_engine.release(); RtcEngineExInternal._event_handlers = []; RtcEngineExInternal._direct_cdn_streaming_event_handler = []; @@ -302,6 +303,27 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return ret; } + createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder { + // @ts-ignore + const nativeHandle = super.createLocalMediaRecorder(connection) as string; + return new MediaRecorderInternal(nativeHandle); + } + + createRemoteMediaRecorder(channelId: string, uid: number): IMediaRecorder { + // @ts-ignore + const nativeHandle = super.createRemoteMediaRecorder( + channelId, + uid + ) as string; + return new MediaRecorderInternal(nativeHandle); + } + + destroyMediaRecorder(mediaRecorder: IMediaRecorder): number { + const ret = super.destroyMediaRecorder(mediaRecorder); + mediaRecorder.release?.call(mediaRecorder); + return ret; + } + startDirectCdnStreaming( eventHandler: IDirectCdnStreamingEventHandler, publishUrl: string, @@ -371,10 +393,8 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { : 'RtcEngine_setClientRole2'; } - protected getApiTypeFromStartEchoTest( - intervalInSeconds: number = 10 - ): string { - return 'RtcEngine_startEchoTest2'; + protected getApiTypeFromStartEchoTest(config: EchoTestConfiguration): string { + return 'RtcEngine_startEchoTest3'; } protected getApiTypeFromStartPreview( @@ -473,10 +493,6 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return this._media_engine; } - getMediaRecorder(): IMediaRecorder { - return this._media_recorder; - } - getMusicContentCenter(): IMusicContentCenter { return this._music_content_center; } diff --git a/ts/Renderer/AgoraView.ts b/ts/Renderer/AgoraView.ts index ff58b7c99..3a024cb00 100644 --- a/ts/Renderer/AgoraView.ts +++ b/ts/Renderer/AgoraView.ts @@ -1,5 +1,4 @@ -import { VideoSourceType } from '../Private/AgoraBase'; -import { RenderModeType } from '../Private/AgoraMediaBase'; +import { RenderModeType, VideoSourceType } from '../Private/AgoraMediaBase'; import { AgoraEnv } from '../Utils'; const VIDEO_SOURCE_TYPE_STRING = 'video-source-type'; diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index 07aa3e48e..681470773 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -1,5 +1,5 @@ -import { ErrorCodeType, VideoSourceType } from '../Private/AgoraBase'; -import { RenderModeType } from '../Private/AgoraMediaBase'; +import { ErrorCodeType } from '../Private/AgoraBase'; +import { RenderModeType, VideoSourceType } from '../Private/AgoraMediaBase'; import { AgoraElectronBridge, Channel, @@ -304,6 +304,7 @@ export class RendererManager { * @ignore */ public clear(): void { + AgoraEnv.AgoraElectronBridge.ReleaseRenderer(); this.stopRender(); this.removeAllRenderer(); } @@ -346,14 +347,11 @@ export class RendererManager { switch (finalResult.ret) { case 0: - // IRIS_VIDEO_PROCESS_ERR::ERR_OK = 0, + // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::OK = 0, // everything is ok break; - case 1: - // IRIS_VIDEO_PROCESS_ERR::ERR_NULL_POINTER = 1, - break; - case 2: { - // IRIS_VIDEO_PROCESS_ERR::ERR_SIZE_NOT_MATCHING + case 1: { + // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::RESIZED const { width, height } = finalResult; const newShareVideoFrame = this.resizeShareVideoFrame( videoSourceType, @@ -366,8 +364,8 @@ export class RendererManager { finalResult = this.msgBridge.GetVideoFrame(newShareVideoFrame); break; } - case 5: - // IRIS_VIDEO_PROCESS_ERR::ERR_BUFFER_EMPTY + case 2: + // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::NO_CACHE // setupVideo/AgoraView render before initialize this.enableVideoFrameCache({ videoSourceType, channelId, uid }); return; diff --git a/ts/Types.ts b/ts/Types.ts index ba572fc14..9c95c9c17 100644 --- a/ts/Types.ts +++ b/ts/Types.ts @@ -1,5 +1,4 @@ -import { VideoSourceType } from './Private/AgoraBase'; -import { RenderModeType } from './Private/AgoraMediaBase'; +import { RenderModeType, VideoSourceType } from './Private/AgoraMediaBase'; import { IRenderer } from './Renderer/IRenderer'; import { RendererManager } from './Renderer/RendererManager'; @@ -243,6 +242,8 @@ export interface AgoraElectronBridge { ReleaseEnv(): void; + ReleaseRenderer(): void; + EnableVideoFrameCache(config: VideoFrameCacheConfig): void; DisableVideoFrameCache(config: VideoFrameCacheConfig): void; diff --git a/ts/Utils.ts b/ts/Utils.ts index 1d120f662..d43f95591 100644 --- a/ts/Utils.ts +++ b/ts/Utils.ts @@ -1,4 +1,4 @@ -import { VideoSourceType } from './Private/AgoraBase'; +import { VideoSourceType } from './Private/AgoraMediaBase'; import { AgoraEnvType, FormatRendererVideoConfig, From 2ae081b8a10e5fc74bb50aa8ce3cc4f193d7a1a5 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Thu, 6 Apr 2023 12:50:27 +0800 Subject: [PATCH 09/74] [AUTO] Generate code by terra (#973) Co-authored-by: LichKing-2234 --- ts/Private/IAgoraRtcEngine.ts | 11 +++++++---- ts/Private/impl/IAgoraRtcEngineImpl.ts | 23 +++++++++++++---------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index 4954edf99..c85972d94 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -4804,7 +4804,7 @@ export abstract class IRtcEngine { * @ignore */ abstract startScreenCaptureDesktop( - type: VideoSourceType, + sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): number; @@ -4836,12 +4836,15 @@ export abstract class IRtcEngine { abstract setScreenCaptureScenario(screenScenario: ScreenScenarioType): number; /** - * Stops screen sharing. + * Stops the local video preview. + * After calling startPreview to start the preview, if you want to close the local video preview, call this method.Call this method before joining a channel or after leaving a channel. + * + * @param sourceType The type of the video frame, see VideoSourceType . * * @returns - * 0: Success.< 0: Failure. + * < 0: Failure. */ - abstract stopScreenCapture(type?: VideoSourceType): number; + abstract stopScreenCapture(sourceType?: VideoSourceType): number; /** * Retrieves the call ID. diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index 67917012d..fa84fa919 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -5010,16 +5010,19 @@ export class IRtcEngineImpl implements IRtcEngine { } startScreenCaptureDesktop( - type: VideoSourceType, + sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): number { - const apiType = this.getApiTypeFromStartScreenCaptureDesktop(type, config); + const apiType = this.getApiTypeFromStartScreenCaptureDesktop( + sourceType, + config + ); const jsonParams = { - type: type, + sourceType: sourceType, config: config, toJSON: () => { return { - type: type, + sourceType: sourceType, config: config, }; }, @@ -5029,7 +5032,7 @@ export class IRtcEngineImpl implements IRtcEngine { } protected getApiTypeFromStartScreenCaptureDesktop( - type: VideoSourceType, + sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): string { return 'RtcEngine_startScreenCaptureDesktop'; @@ -5087,14 +5090,14 @@ export class IRtcEngineImpl implements IRtcEngine { } stopScreenCapture( - type: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + sourceType: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary ): number { - const apiType = this.getApiTypeFromStopScreenCapture(type); + const apiType = this.getApiTypeFromStopScreenCapture(sourceType); const jsonParams = { - type: type, + sourceType: sourceType, toJSON: () => { return { - type: type, + sourceType: sourceType, }; }, }; @@ -5103,7 +5106,7 @@ export class IRtcEngineImpl implements IRtcEngine { } protected getApiTypeFromStopScreenCapture( - type: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + sourceType: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary ): string { return 'RtcEngine_stopScreenCapture'; } From 230e6c251397c6782af178ab58d28e49e4081bf3 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Fri, 7 Apr 2023 15:28:59 +0800 Subject: [PATCH 10/74] [AUTO] Generate code by terra (#974) Co-authored-by: LichKing-2234 --- ts/Private/AgoraBase.ts | 41 ++-- ts/Private/AgoraMediaBase.ts | 34 ++-- ts/Private/IAgoraMediaEngine.ts | 2 +- ts/Private/IAgoraMediaPlayer.ts | 20 +- ts/Private/IAgoraMediaRecorder.ts | 8 +- ts/Private/IAgoraMusicContentCenter.ts | 8 +- ts/Private/IAgoraRtcEngine.ts | 255 ++++++++++++------------- ts/Private/IAgoraRtcEngineEx.ts | 140 ++++++-------- ts/Private/IAgoraSpatialAudio.ts | 19 +- ts/Private/IAudioDeviceManager.ts | 26 +-- ts/Private/impl/IAgoraRtcEngineImpl.ts | 2 +- ts/Renderer/RendererManager.ts | 20 +- 12 files changed, 262 insertions(+), 313 deletions(-) diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index 44637533c..0bd74e78b 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -2241,11 +2241,11 @@ export enum RemoteVideoDownscaleLevel { */ export class AudioVolumeInfo { /** - * The user ID.In the local user's callback, uid = 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is one of the three highest. + * The user ID.In the local user's callback, uid is 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is the highest. */ uid?: number; /** - * The volume of the user. The value ranges between 0 (lowest volume) and 255 (highest volume). + * The volume of the user. The value ranges between 0 (the lowest volume) and 255 (the highest volume). If the local user enables audio capturing and calls muteLocalAudioStream and set it as true to mute, the value of volume indicates the volume of locally captured audio signal. */ volume?: number; /** @@ -2389,7 +2389,7 @@ export enum RtmpStreamPublishState { */ RtmpStreamPublishStateIdle = 0, /** - * 1: The SDK is connecting to Agora's streaming server and the CDN server. + * 1: The streaming server and CDN server are being connected. */ RtmpStreamPublishStateConnecting = 1, /** @@ -2397,16 +2397,15 @@ export enum RtmpStreamPublishState { */ RtmpStreamPublishStateRunning = 2, /** - * 3: The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK tries to resume RTMP or RTMPS streaming and returns this state.If the SDK successfully resumes the streaming, RtmpStreamPublishStateRunning(2) returns. - * If the streaming does not resume within 60 seconds or server errors occur, RtmpStreamPublishStateFailure(4) returns. You can also reconnect to the server by calling the stopRtmpStream method. + * 3: The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK tries to resume RTMP or RTMPS streaming and returns this state.If the SDK successfully resumes the streaming, RtmpStreamPublishStateRunning(2) returns.If the streaming does not resume within 60 seconds or server errors occur, RtmpStreamPublishStateFailure(4) returns. If you feel that 60 seconds is too long, you can also actively try to reconnect. */ RtmpStreamPublishStateRecovering = 3, /** - * 4: The RTMP or RTMPS streaming fails. See the errCode parameter for the detailed error information. + * 4: The RTMP or RTMPS streaming fails. After a failure, you can troubleshoot the cause of the error through the returned error code. */ RtmpStreamPublishStateFailure = 4, /** - * 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call stopRtmpStream to stop the streaming normally, the SDK reports the streaming state as RtmpStreamPublishStateDisconnecting and RtmpStreamPublishStateIdle in sequence. + * 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call stopRtmpStream to stop the Media Push normally, the SDK reports the Media Push state as RtmpStreamPublishStateDisconnecting and RtmpStreamPublishStateIdle in sequence. */ RtmpStreamPublishStateDisconnecting = 5, } @@ -2416,7 +2415,7 @@ export enum RtmpStreamPublishState { */ export enum RtmpStreamPublishErrorType { /** - * 0: The RTMP or RTMPS streaming publishes successfully. + * 0: The RTMP or RTMPS streaming has not started or has ended. */ RtmpStreamPublishErrorOk = 0, /** @@ -2428,11 +2427,11 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorEncryptedStreamNotAllowed = 2, /** - * 3: Timeout for the RTMP or RTMPS streaming. Try to publish the streaming again. + * 3: Timeout for the RTMP or RTMPS streaming. */ RtmpStreamPublishErrorConnectionTimeout = 3, /** - * 4: An error occurs in Agora's streaming server. Try to publish the streaming again. + * 4: An error occurs in Agora's streaming server. */ RtmpStreamPublishErrorInternalServerError = 4, /** @@ -2440,7 +2439,7 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorRtmpServerError = 5, /** - * 6: The RTMP or RTMPS streaming publishing requests are too frequent. + * 6: The RTMP or RTMPS streaming publishes too frequently. */ RtmpStreamPublishErrorTooOften = 6, /** @@ -2460,11 +2459,11 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorFormatNotSupported = 10, /** - * 11: The user role is not host, so the user cannot use the CDN live streaming function. Check your app code logic. + * 11: The user role is not host, so the user cannot use the CDN live streaming function. Check your application code logic. */ RtmpStreamPublishErrorNotBroadcaster = 11, /** - * 13: The updateRtmpTranscoding or setLiveTranscoding method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. + * 13: The updateRtmpTranscoding method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. */ RtmpStreamPublishErrorTranscodingNoMixStream = 13, /** @@ -2476,25 +2475,25 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorInvalidAppid = 15, /** - * @ignore + * 16: Your project does not have permission to use streaming services. Refer to Media Push to enable the Media Push permission. */ RtmpStreamPublishErrorInvalidPrivilege = 16, /** - * 100: The streaming has been stopped normally. After you call stopRtmpStream to stop streaming, the SDK returns this value. + * 100: The streaming has been stopped normally. After you stop the media push, the SDK returns this value. */ RtmpStreamUnpublishErrorOk = 100, } /** - * Events during the media push. + * Events during the Media Push. */ export enum RtmpStreamingEvent { /** - * 1: An error occurs when you add a background image or a watermark image in the media push. + * 1: An error occurs when you add a background image or a watermark image in the Media Push. */ RtmpStreamingEventFailedLoadImage = 1, /** - * 2: The streaming URL is already being used for CDN live streaming. If you want to start new streaming, use a new streaming URL. + * 2: The streaming URL is already being used for Media Push. If you want to start new streaming, use a new streaming URL. */ RtmpStreamingEventUrlAlreadyInUse = 2, /** @@ -3156,7 +3155,7 @@ export class VideoCanvas { */ sourceType?: VideoSourceType; /** - * The ID of the media player. You can get the Device ID by calling getMediaPlayerId . + * The ID of the media player. You can get the media player ID by calling getMediaPlayerId . */ mediaPlayerId?: number; /** @@ -3846,7 +3845,9 @@ export interface IAudioEncodedFrameObserver { * After calling registerAudioEncodedFrameObserver and setting the encoded audio as AudioEncodedFrameObserverPositionPlayback, you can get encoded audio data of all remote users through this callback. * * @param samplesPerSec Recording sample rate (Hz). - * @param channels The number of channels.1: Mono.2: Stereo. If the channel uses stereo, the data is interleaved. + * @param channels The number of channels. + * 1: Mono. + * 2: Stereo. If the channel uses stereo, the data is interleaved. * @param samplesPerChannel The number of samples per channel in the audio frame. * @param frameBuffer The audio buffer. * @param length The data length (byte). diff --git a/ts/Private/AgoraMediaBase.ts b/ts/Private/AgoraMediaBase.ts index 95d0f9e16..9f8762f57 100644 --- a/ts/Private/AgoraMediaBase.ts +++ b/ts/Private/AgoraMediaBase.ts @@ -696,10 +696,10 @@ export enum VideoModulePosition { */ export interface IAudioPcmFrameSink { /** - * Occurs each time the player receives an audio frame. - * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. + * Occurs each time the player receives a video frame. + * After registering the video frame observer, the callback occurs every time the player receives a video frame, reporting the detailed information of the video frame. * - * @param frame Audio frame information. See AudioPcmFrame . + * @param frame Video frame information. See VideoFrame . */ onFrame?(frame: AudioPcmFrame): void; } @@ -910,7 +910,7 @@ export class UserAudioSpectrumInfo { export interface IAudioSpectrumObserver { /** * Gets the statistics of a local audio spectrum. - * After successfully calling registerAudioSpectrumObserver to implement the onLocalAudioSpectrumcallback in IAudioSpectrumObserver and calling enableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum. + * After successfully calling registerAudioSpectrumObserver to implement the onLocalAudioSpectrum callback in IAudioSpectrumObserver and calling enableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum. * * @param data The audio spectrum data of the local user. See AudioSpectrumData . * @@ -979,7 +979,7 @@ export enum VideoFrameProcessMode { export interface IVideoFrameObserver { /** * Occurs each time the SDK receives a video frame captured by the local camera. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. + * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.Once the pre-processing is complete, you can directly modify videoFrame in this callback, and set the return value to true to send the modified video data to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. * * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * @@ -995,16 +995,10 @@ export interface IVideoFrameObserver { * Occurs each time the SDK receives a video frame before encoding. * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced. * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 + * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. + * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. */ onPreEncodeVideoFrame?( sourceType: VideoSourceType, @@ -1043,19 +1037,13 @@ export interface IVideoFrameObserver { ): boolean; /** - * Occurs each time the SDK receives a video frame captured by the screen. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data for screen sharing. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.This callback does not support sending processed RGBA video data back to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified. + * Occurs each time the SDK receives a video frame before encoding. + * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced. * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 + * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. + * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. */ onTranscodedVideoFrame?(videoFrame: VideoFrame): boolean; } diff --git a/ts/Private/IAgoraMediaEngine.ts b/ts/Private/IAgoraMediaEngine.ts index 58e27778f..18e73d2bb 100644 --- a/ts/Private/IAgoraMediaEngine.ts +++ b/ts/Private/IAgoraMediaEngine.ts @@ -126,7 +126,7 @@ export abstract class IMediaEngine { * Call this method before joining a channel. * * @param enabled Whether to enable the external audio source:true: Enable the external audio source.false: (Default) Disable the external audio source. - * @param sampleRate The sample rate (Hz) of the external audio which can be set as 8000, 16000, 32000, 44100, or 48000. + * @param sampleRate The sample rate (Hz) of the external audio source which can be set as 8000, 16000, 32000, 44100, or 48000. * @param channels The number of channels of the external audio source, which can be set as 1 (Mono) or 2 (Stereo). * @param sourceNumber The number of external audio sources. The value of this parameter should be larger than 0. The SDK creates a corresponding number of custom audio tracks based on this parameter value and names the audio tracks starting from 0. In ChannelMediaOptions , you can set publishCustomAudioSourceId to the audio track ID you want to publish. * @param localPlayback Whether to play the external audio source:true: Play the external audio source.false: (Default) Do not play the external source. diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index f152f932f..8268b2399 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -163,13 +163,7 @@ export abstract class IMediaPlayer { abstract setPlaybackSpeed(speed: number): number; /** - * Gets the detailed information of the media stream. - * Call this method after calling getStreamCount . - * - * @param index The index of the media stream. - * - * @returns - * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. + * @ignore */ abstract selectAudioTrack(index: number): number; @@ -203,13 +197,7 @@ export abstract class IMediaPlayer { abstract takeScreenshot(filename: string): number; /** - * Gets the detailed information of the media stream. - * Call this method after calling getStreamCount . - * - * @param index The index of the media stream. - * - * @returns - * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. + * @ignore */ abstract selectInternalSubtitle(index: number): number; @@ -332,9 +320,9 @@ export abstract class IMediaPlayer { ): number; /** - * Unregisters a receiver object for the encoded video image. + * Unregisters the encoded audio frame observer. * - * @param observer The video observer, reporting the reception of each video frame. See IVideoEncodedFrameObserver . + * @param observer The encoded audio observer. See IAudioEncodedFrameObserver . * * @returns * 0: Success.< 0: Failure. diff --git a/ts/Private/IAgoraMediaRecorder.ts b/ts/Private/IAgoraMediaRecorder.ts index 01caee1b8..7f349796d 100644 --- a/ts/Private/IAgoraMediaRecorder.ts +++ b/ts/Private/IAgoraMediaRecorder.ts @@ -22,13 +22,7 @@ export abstract class IMediaRecorder { abstract setMediaRecorderObserver(callback: IMediaRecorderObserver): number; /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract startRecording(config: MediaRecorderConfiguration): number; diff --git a/ts/Private/IAgoraMusicContentCenter.ts b/ts/Private/IAgoraMusicContentCenter.ts index abecbf5d5..4b17e5a26 100644 --- a/ts/Private/IAgoraMusicContentCenter.ts +++ b/ts/Private/IAgoraMusicContentCenter.ts @@ -108,13 +108,7 @@ export abstract class MusicChartCollection { abstract getCount(): number; /** - * Gets the detailed information of the media stream. - * Call this method after calling getStreamCount . - * - * @param index The index of the media stream. - * - * @returns - * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. + * @ignore */ abstract get(index: number): MusicChartInfo; } diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index c85972d94..785440122 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -1038,7 +1038,7 @@ export class ChannelMediaOptions { */ publishCameraTrack?: boolean; /** - * @ignore + * Whether to publish the video captured by the second camera:true: Publish the video captured by the second camera.false: (Default) Do not publish the video captured by the second camera. */ publishSecondaryCameraTrack?: boolean; /** @@ -1046,7 +1046,7 @@ export class ChannelMediaOptions { */ publishMicrophoneTrack?: boolean; /** - * Whether to publish the video captured from the screen:true: Publish the video captured from the screen.false: (Default) Do not publish the video captured from the screen.This parameter applies to Android and iOS only. + * @ignore */ publishScreenCaptureVideo?: boolean; /** @@ -1121,7 +1121,6 @@ export class ChannelMediaOptions { defaultVideoStreamType?: VideoStreamType; /** * The channel profile. See ChannelProfileType . - * */ channelProfile?: ChannelProfileType; /** @@ -1367,10 +1366,10 @@ export interface IRtcEngineEventHandler { /** * Reports the volume information of users. - * By default, this callback is disabled. You can enable it by calling enableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback according to the time interval set in enableAudioVolumeIndication. The SDK triggers two independent onAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the muteLocalAudioStream method for muting, the SDK continues to report the volume indication of the local user. In the callbacks triggered, the volume information about the local user is 0 If a remote user whose volume is one of the three highest in the channel stops publishing the audio stream for 20 seconds, the callback excludes this user's information; if all remote users stop publishing audio streams for 20 seconds, the SDK stops triggering the callback for remote users. + * By default, this callback is disabled. You can enable it by calling enableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback according to the time interval set in enableAudioVolumeIndication. The SDK triggers two independent onAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the muteLocalAudioStream method to mute, the SDK continues to report the volume indication of the local user.If a remote user whose volume is one of the three highest in the channel stops publishing the audio stream for 20 seconds, the callback excludes this user's information; if all remote users stop publishing audio streams for 20 seconds, the SDK stops triggering the callback for remote users. * * @param connection The connection information. See RtcConnection . - * @param speakers The volume information of the users, see AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or is sending a stream. + * @param speakers The volume information of the users. See AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or is sending a stream. * @param speakerNumber The total number of users.In the callback for the local user, if the local user is sending streams, the value of speakerNumber is 1.In the callback for remote users, the value range of speakerNumber is [0,3]. If the number of remote users who send streams is greater than or equal to three, the value of speakerNumber is 3. * @param totalVolume The volume of the speaker. The value range is [0,255].In the callback for the local user, totalVolume is the volume of the local user who sends a stream.In the callback for remote users, totalVolume is the sum of the volume of all remote users (up to three) whose instantaneous volume is the highest. */ @@ -1401,11 +1400,11 @@ export interface IRtcEngineEventHandler { onRtcStats?(connection: RtcConnection, stats: RtcStats): void; /** - * Occurs when the audio device state changes. - * This callback notifies the application that the system's audio device state is changed. For example, a headset is unplugged from the device.This method is for Windows and macOS only. + * Occurs when the video device state changes. + * This callback reports the change of system video devices, such as being unplugged or removed. On a Windows device with an external camera for video capturing, the video disables once the external camera is unplugged.This callback is for Windows and macOS only. * * @param deviceId The device ID. - * @param deviceType The device type. See MediaDeviceType . + * @param deviceType Media device types. See MediaDeviceType . * @param deviceState Media device states. */ onAudioDeviceStateChanged?( @@ -1467,10 +1466,13 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the token expires. - * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call joinChannel to rejoin the channel. + * Stops recording the local audio and video. + * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. * * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. */ onIntraRequestReceived?(connection: RtcConnection): void; @@ -1483,10 +1485,10 @@ export interface IRtcEngineEventHandler { onUplinkNetworkInfoUpdated?(info: UplinkNetworkInfo): void; /** - * Occurs when information related to the media player changes. - * When the information about the media player changes, the SDK triggers this callback. You can use this callback for troubleshooting. + * Occurs when the uplink network information changes. + * The SDK triggers this callback when the uplink network information changes.This callback only applies to scenarios where you push externally encoded video data in H.264 format to the SDK. * - * @param info Information related to the media player. See PlayerUpdatedInfo . + * @param info The uplink network information. See UplinkNetworkInfo . */ onDownlinkNetworkInfoUpdated?(info: DownlinkNetworkInfo): void; @@ -1494,15 +1496,7 @@ export interface IRtcEngineEventHandler { * Reports the last-mile network quality of the local user. * This callback reports the last-mile network conditions of the local user before the user joins the channel. Last mile refers to the connection between the local device and Agora's edge server.Before the user joins the channel, this callback is triggered by the SDK once startLastmileProbeTest is called and reports the last-mile network conditions of the local user. * - * @param quality The last-mile network quality. - * QualityUnknown(0): The quality is unknown. - * QualityExcellent(1): The quality is excellent. - * QualityGood(2): The network quality seems excellent, but the bitrate can be slightly lower than excellent. - * QualityPoor(3): Users can feel the communication is slightly impaired. - * QualityBad(4): Users cannot communicate smoothly. - * QualityVbad(5): The quality is so bad that users can barely communicate. - * QualityDown(6): The network is down, and users cannot communicate at all. - * See QualityType . + * @param quality The last-mile network quality. QualityUnknown(0): The quality is unknown.QualityExcellent(1): The quality is excellent.QualityGood(2): The network quality seems excellent, but the bitrate can be slightly lower than excellent.QualityPoor(3): Users can feel the communication is slightly impaired.QualityBad(4): Users cannot communicate smoothly.QualityVbad(5): The quality is so bad that users can barely communicate.QualityDown(6): The network is down, and users cannot communicate at all.See QualityType . */ onLastmileQuality?(quality: QualityType): void; @@ -1734,11 +1728,11 @@ export interface IRtcEngineEventHandler { onRemoteAudioStats?(connection: RtcConnection, stats: RemoteAudioStats): void; /** - * Occurs when a user leaves a channel. - * This callback notifies the app that the user leaves the channel by calling leaveChannel . From this callback, the app can get information such as the call duration and quality statistics. + * Reports the statistics of the video stream sent by each remote users. + * Reports the statistics of the video stream from the remote users. The SDK triggers this callback once every two seconds for each remote user. If a channel has multiple users/hosts sending video streams, the SDK triggers this callback as many times. * * @param connection The connection information. See RtcConnection . - * @param stats The statistics of the call. See RtcStats . + * @param stats Statistics of the remote video stream. */ onLocalVideoStats?(connection: RtcConnection, stats: LocalVideoStats): void; @@ -2054,12 +2048,12 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the media push state changes. - * When the media push state changes, the SDK triggers this callback and reports the URL address and the current state of the media push. This callback indicates the state of the media push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter. + * Occurs when the state of Media Push changes. + * When the state of Media Push changes, the SDK triggers this callback and reports the URL address and the current state of the Media Push. This callback indicates the state of the Media Push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter. * - * @param url The URL address where the state of the media push changes. - * @param state The current state of the media push. See RtmpStreamPublishState . - * @param errCode The detailed error information for the media push. See RtmpStreamPublishErrorType . + * @param url The URL address where the state of the Media Push changes. + * @param state The current state of the Media Push. See RtmpStreamPublishState . + * @param errCode The detailed error information for the Media Push. See RtmpStreamPublishErrorType . */ onRtmpStreamingStateChanged?( url: string, @@ -2068,10 +2062,10 @@ export interface IRtcEngineEventHandler { ): void; /** - * Reports events during the media push. + * Reports events during the Media Push. * - * @param url The URL of media push. - * @param eventCode The event code of media push. See RtmpStreamingEvent . + * @param url The URL for Media Push. + * @param eventCode The event code of Media Push. RtmpStreamingEvent */ onRtmpStreamingEvent?(url: string, eventCode: RtmpStreamingEvent): void; @@ -2489,7 +2483,16 @@ export class RtcEngineContext { */ areaCode?: number; /** - * The SDK log files are: agorasdk.log, agorasdk.1.log, agorasdk.2.log, agorasdk.3.log, and agorasdk.4.log.The API call log files are: agoraapi.log, agoraapi.1.log, agoraapi.2.log, agoraapi.3.log, and agoraapi.4.log.The default size for each SDK log file is 1,024 KB; the default size for each API call log file is 2,048 KB. These log files are encoded in UTF-8.The SDK writes the latest logs in agorasdk.log or agoraapi.log.When agorasdk.log is full, the SDK processes the log files in the following order:Delete the agorasdk.4.log file (if any).Rename agorasdk.3.log to agorasdk.4.log.Rename agorasdk.2.log to agorasdk.3.log.Rename agorasdk.1.log to agorasdk.2.log.Create a new agorasdk.log file.The overwrite rules for the agoraapi.log file are the same as for agorasdk.log.Sets the log file size. See LogConfig .By default, the SDK generates five SDK log files and five API call log files with the following rules: + * The SDK log files are: agorasdk.log, agorasdk.1.log, agorasdk.2.log, agorasdk.3.log, and agorasdk.4.log. + * The API call log files are: agoraapi.log, agoraapi.1.log, agoraapi.2.log, agoraapi.3.log, and agoraapi.4.log. + * The default size for each SDK log file is 1,024 KB; the default size for each API call log file is 2,048 KB. These log files are encoded in UTF-8. + * The SDK writes the latest logs in agorasdk.log or agoraapi.log. + * When agorasdk.log is full, the SDK processes the log files in the following order: + * Delete the agorasdk.4.log file (if any). + * Rename agorasdk.3.log to agorasdk.4.log. + * Rename agorasdk.2.log to agorasdk.3.log. + * Rename agorasdk.1.log to agorasdk.2.log. + * Create a new agorasdk.log file. The overwrite rules for the agoraapi.log file are the same as for agorasdk.log. Sets the log file size. See LogConfig .By default, the SDK generates five SDK log files and five API call log files with the following rules: */ logConfig?: LogConfig; /** @@ -2811,7 +2814,9 @@ export abstract class IRtcEngine { /** * Sets channel options and leaves the channel. - * If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback.If you have called joinChannelEx to join multiple channels, calling this method will leave the channels when calling joinChannel and joinChannelEx at the same time.This method will release all resources related to the session, leave the channel, that is, hang up or exit the call. This method can be called whether or not a call is currently in progress.After joining the channel, you must call this method or to end the call, otherwise, the next call cannot be started.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback. + * If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback. + * If you have called joinChannelEx to join multiple channels, calling this method will leave the channels when calling joinChannel and joinChannelEx at the same time. + * This method will release all resources related to the session, leave the channel, that is, hang up or exit the call. This method can be called whether or not a call is currently in progress.After joining the channel, you must call this method or to end the call, otherwise, the next call cannot be started.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback. * * @param options The options for leaving the channel. See LeaveChannelOptions . * @@ -3154,13 +3159,13 @@ export abstract class IRtcEngine { abstract muteAllRemoteAudioStreams(mute: boolean): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joining a channel.If you do not want to subscribe the video streams of remote users before joining a channel, you can call joinChannel and set autoSubscribeVideo as false. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract setDefaultMuteAllRemoteAudioStreams(mute: boolean): number; @@ -3210,13 +3215,13 @@ export abstract class IRtcEngine { abstract muteAllRemoteVideoStreams(mute: boolean): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joining a channel.If you do not want to subscribe the video streams of remote users before joining a channel, you can call joinChannel and set autoSubscribeVideo as false. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract setDefaultMuteAllRemoteVideoStreams(mute: boolean): number; @@ -3264,8 +3269,7 @@ export abstract class IRtcEngine { /** * Sets the default stream type of subscrption for remote video streams. - * The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request. - * Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamMode (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The result of this method returns in the onApiCallExecuted callback.Call this method before joining a channel. The SDK does not support changing the default subscribed video stream type after joining a channel.If you call both this method and setRemoteVideoStreamType , the SDK applies the settings in the setRemoteVideoStreamType method. + * The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request.Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamMode (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The result of this method returns in the onApiCallExecuted callback.Call this method before joining a channel. The SDK does not support changing the default subscribed video stream type after joining a channel.If you call both this method and setRemoteVideoStreamType , the SDK applies the settings in the setRemoteVideoStreamType method. * * @param streamType The default video-stream type. See VideoStreamType . * @@ -3291,9 +3295,7 @@ export abstract class IRtcEngine { /** * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * You can call this method either before or after joining a channel. - * The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. * * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. @@ -3307,12 +3309,10 @@ export abstract class IRtcEngine { ): number; /** - * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * You can call this method either before or after joining a channel. - * The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * Set the blocklist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you do not want to subscribe to.You can call this method either before or after joining a channel.The blocklist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams , and autoSubscribeAudio in ChannelMediaOptions .Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the audio streams of a user that you do not want to subscribe to, add the user ID in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeAudioBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * * @returns @@ -3324,12 +3324,10 @@ export abstract class IRtcEngine { ): number; /** - * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * You can call this method either before or after joining a channel. - * The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * Set the blocklist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you do not want to subscribe to.You can call this method either before or after joining a channel.The blocklist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams , and autoSubscribeAudio in ChannelMediaOptions .Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the audio streams of a user that you do not want to subscribe to, add the user ID in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeAudioBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * * @returns @@ -3407,10 +3405,13 @@ export abstract class IRtcEngine { abstract destroyMediaPlayer(mediaPlayer: IMediaPlayer): number; /** - * Occurs when the token expires. - * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call joinChannel to rejoin the channel. + * Stops recording the local audio and video. + * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. * * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. */ abstract createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder; @@ -3478,13 +3479,7 @@ export abstract class IRtcEngine { abstract resumeAudioMixing(): number; /** - * Gets the detailed information of the media stream. - * Call this method after calling getStreamCount . - * - * @param index The index of the media stream. - * - * @returns - * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. + * @ignore */ abstract selectAudioTrack(index: number): number; @@ -3781,10 +3776,7 @@ export abstract class IRtcEngine { * Retrieves the duration of the audio effect file. * Call this method after joining a channel. * - * @param filePath File path: - * Windows: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: C:\music\audio.mp4. - * macOS: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: /var/mobile/Containers/Data/audio.mp4. - * + * @param filePath File path:Windows: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: C:\music\audio.mp4.macOS: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: /var/mobile/Containers/Data/audio.mp4. * * @returns * The total duration (ms) of the specified audio effect file, if the method call succeeds.< 0: Failure. @@ -4258,9 +4250,9 @@ export abstract class IRtcEngine { ): number; /** - * Unregisters a receiver object for the encoded video image. + * Unregisters the encoded audio frame observer. * - * @param observer The video observer, reporting the reception of each video frame. See IVideoEncodedFrameObserver . + * @param observer The encoded audio observer. See IAudioEncodedFrameObserver . * * @returns * 0: Success.< 0: Failure. @@ -4294,10 +4286,7 @@ export abstract class IRtcEngine { * Adjusts the playback signal volume of all remote users. * This method adjusts the playback volume that is the mixed volume of all remote users.You can call this method either before or after joining a channel. * - * @param volume The volume of the user. The value range is [0,400]. - * 0: Mute. - * 100: (Default) The original volume. - * 400: Four times the original volume (amplifying the audio signals by four times). + * @param volume The volume of the user. The value range is [0,400].0: Mute.100: (Default) The original volume.400: Four times the original volume (amplifying the audio signals by four times). * * @returns * 0: Success. < 0: Failure. @@ -4431,10 +4420,7 @@ export abstract class IRtcEngine { * * @param provider The name of the extension provider. * @param extension The name of the extension. - * @param type Type of media source. See MediaSourceType .In this method, this parameter supports only the following two settings: - * The default value is UnknownMediaSource. - * If you want to use the second camera to capture video, set this parameter to SecondaryCameraSource. - * + * @param type Type of media source. See MediaSourceType .In this method, this parameter supports only the following two settings:The default value is UnknownMediaSource.If you want to use the second camera to capture video, set this parameter to SecondaryCameraSource. * * @returns * 0: Success.< 0: Failure. @@ -4506,13 +4492,7 @@ export abstract class IRtcEngine { ): string; /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setCameraCapturerConfiguration( config: CameraCapturerConfiguration @@ -4588,10 +4568,10 @@ export abstract class IRtcEngine { abstract setCameraZoomFactor(factor: number): number; /** - * Enables interoperability with the Agora Web SDK (applicable only in the live streaming scenarios). - * Deprecated:The SDK automatically enables interoperability with the Web SDK, so you no longer need to call this method.You can call this method to enable or disable interoperability with the Agora Web SDK. If a channel has Web SDK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user.This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios. + * Enables/Disables the local video capture. + * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. * - * @param enabled Whether to enable interoperability:true: Enable interoperability.false: (Default) Disable interoperability. + * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. * * @returns * 0: Success.< 0: Failure. @@ -4617,10 +4597,10 @@ export abstract class IRtcEngine { abstract setCameraTorchOn(isOn: boolean): number; /** - * Enables interoperability with the Agora Web SDK (applicable only in the live streaming scenarios). - * Deprecated:The SDK automatically enables interoperability with the Web SDK, so you no longer need to call this method.You can call this method to enable or disable interoperability with the Agora Web SDK. If a channel has Web SDK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user.This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios. + * Enables/Disables the local video capture. + * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. * - * @param enabled Whether to enable interoperability:true: Enable interoperability.false: (Default) Disable interoperability. + * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. * * @returns * 0: Success.< 0: Failure. @@ -4646,10 +4626,10 @@ export abstract class IRtcEngine { abstract isCameraAutoExposureFaceModeSupported(): boolean; /** - * Enables interoperability with the Agora Web SDK (applicable only in the live streaming scenarios). - * Deprecated:The SDK automatically enables interoperability with the Web SDK, so you no longer need to call this method.You can call this method to enable or disable interoperability with the Agora Web SDK. If a channel has Web SDK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user.This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios. + * Enables/Disables the local video capture. + * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. * - * @param enabled Whether to enable interoperability:true: Enable interoperability.false: (Default) Disable interoperability. + * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. * * @returns * 0: Success.< 0: Failure. @@ -4739,14 +4719,18 @@ export abstract class IRtcEngine { /** * Shares the whole or part of a window by specifying the window ID. - * There are two ways to start screen sharing, you can choose one according to your needs:Call this method before joining a channel, and then call joinChannel to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.Call this method after joining a channel, and then call updateChannelMediaOptions and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.This method shares a window or part of the window. You need to specify the ID of the window to be shared.This method applies to the macOS and Windows platforms only.The window sharing feature of the Agora SDK relies on WGC (Windows Graphics Capture) or GDI (Graphics Device Interface) capture, and WGC cannot be set to disable mouse capture on systems earlier than Windows 10 2004. Therefore, captureMouseCursor(false) might not work when you start window sharing on a device with a system earlier than Windows 10 2004. See ScreenCaptureParameters .This method supports window sharing of UWP (Universal Windows Platform) applications. Agora tests the mainstream UWP applications by using the lastest SDK, see details as follows: + * There are two ways to start screen sharing, you can choose one according to your needs: + * Call this method before joining a channel, and then call joinChannel to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing. + * Call this method after joining a channel, and then call updateChannelMediaOptions and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing. This method shares a window or part of the window. You need to specify the ID of the window to be shared.This method applies to the macOS and Windows platforms only.The window sharing feature of the Agora SDK relies on WGC (Windows Graphics Capture) or GDI (Graphics Device Interface) capture, and WGC cannot be set to disable mouse capture on systems earlier than Windows 10 2004. Therefore, captureMouseCursor(false) might not work when you start window sharing on a device with a system earlier than Windows 10 2004. See ScreenCaptureParameters .This method supports window sharing of UWP (Universal Windows Platform) applications. Agora tests the mainstream UWP applications by using the lastest SDK, see details as follows: * * @param windowId The ID of the window to be shared. * @param regionRect (Optional) Sets the relative location of the region to the screen. If you do not set this parameter, the SDK shares the whole screen. See Rectangle . If the specified region overruns the window, the SDK shares only the region within it; if you set width or height as 0, the SDK shares the whole window. * @param captureParams Screen sharing configurations. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure. + * -2: The parameter is invalid. + * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract startScreenCaptureByWindowId( windowId: any, @@ -4761,7 +4745,9 @@ export abstract class IRtcEngine { * @param contentHint The content hint for screen sharing. See VideoContentHint . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure. + * -2: The parameter is invalid. + * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract setScreenCaptureContentHint(contentHint: VideoContentHint): number; @@ -4772,7 +4758,9 @@ export abstract class IRtcEngine { * @param regionRect The relative location of the screen-share area to the screen or window. If you do not set this parameter, the SDK shares the whole screen or window. See Rectangle . If the specified region overruns the screen or window, the SDK shares only the region within it; if you set width or height as 0, the SDK shares the whole screen or window. * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure. + * -2: The parameter is invalid. + * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract updateScreenCaptureRegion(regionRect: Rectangle): number; @@ -4783,7 +4771,9 @@ export abstract class IRtcEngine { * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure. + * -2: The parameter is invalid. + * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract updateScreenCaptureParameters( captureParams: ScreenCaptureParameters @@ -4796,7 +4786,9 @@ export abstract class IRtcEngine { * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure. + * -2: The parameter is invalid. + * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract startScreenCapture(captureParams: ScreenCaptureParameters2): number; @@ -4815,7 +4807,9 @@ export abstract class IRtcEngine { * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure. + * -2: The parameter is invalid. + * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract updateScreenCapture(captureParams: ScreenCaptureParameters2): number; @@ -4882,12 +4876,20 @@ export abstract class IRtcEngine { /** * Starts pushing media streams to a CDN without transcoding. - * Ensure that you enable the Media Push service before using this function. See Enable Media Push.Call this method after joining a channel.Only hosts in the LIVE_BROADCASTING profile can call this method.If you want to retry pushing streams after a failed push, make sure to call stopRtmpStream first, then call this method to retry pushing streams; otherwise, the SDK returns the same error code as the last failed push.Agora recommends that you use the server-side Media Push function. You can call this method to push an audio or video stream to the specified CDN address. This method can push media streams to only one CDN address at a time, so if you need to push streams to multiple addresses, call this method multiple times.After you call this method, the SDK triggers the onRtmpStreamingStateChanged callback on the local client to report the state of the streaming. + * Ensure that you enable the Media Push service before using this function. See Enable Media Push. + * Call this method after joining a channel. + * Only hosts in the LIVE_BROADCASTING profile can call this method. + * If you want to retry pushing streams after a failed push, make sure to call stopRtmpStream first, then call this method to retry pushing streams; otherwise, the SDK returns the same error code as the last failed push. + * Agora recommends that you use the server-side Media Push function. You can call this method to push an audio or video stream to the specified CDN address. This method can push media streams to only one CDN address at a time, so if you need to push streams to multiple addresses, call this method multiple times.After you call this method, the SDK triggers the onRtmpStreamingStateChanged callback on the local client to report the state of the streaming. * * @param url The address of Media Push. The format is RTMP or RTMPS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported. * * @returns - * 0: Success.< 0: Failure.-2: The URL is null or the string length is 0.-7: The SDK is not initialized before calling this method.-19: The Media Push URL is already in use, use another URL instead. + * 0: Success. + * < 0: Failure. + * -2: The URL is null or the string length is 0. + * -7: The SDK is not initialized before calling this method. + * -19: The Media Push URL is already in use, use another URL instead. */ abstract startRtmpStreamWithoutTranscoding(url: string): number; @@ -5187,7 +5189,9 @@ export abstract class IRtcEngine { ): number; /** - * Unregisters the specified metadata observer. + * Registers the metadata observer. + * You need to implement the IMetadataObserver class and specify the metadata type in this method. This method enables you to add synchronized metadata in the video stream for more diversified + * live interactive streaming, such as sending shopping links, digital coupons, and online quizzes.Call this method before joinChannel. * * @param observer The metadata observer. See IMetadataObserver . * @param type The metadata type. The SDK currently only supports VideoMetadata. See MetadataType . @@ -5249,7 +5253,7 @@ export abstract class IRtcEngine { * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure. + * 0: Success.< 0: Failure.-2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again.-3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method.-17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.-102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel.-121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. */ abstract joinChannelWithUserAccount( token: string, @@ -5268,7 +5272,7 @@ export abstract class IRtcEngine { * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure. + * 0: Success.< 0: Failure.-2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again.-3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method.-17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.-102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel.-121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. */ abstract joinChannelWithUserAccountEx( token: string, @@ -5284,8 +5288,7 @@ export abstract class IRtcEngine { * @param userAccount The user account. * * @returns - * A pointer to the UserInfo instance, if the method call succeeds. - * If the call fails, returns NULL. + * A pointer to the UserInfo instance, if the method call succeeds.If the call fails, returns NULL. */ abstract getUserInfoByUserAccount(userAccount: string): UserInfo; @@ -5405,12 +5408,15 @@ export abstract class IRtcEngine { abstract stopDirectCdnStreaming(): number; /** - * Updates the channel media options after joining the channel. + * Sets channel options and leaves the channel. + * If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback. + * If you have called joinChannelEx to join multiple channels, calling this method will leave the channels when calling joinChannel and joinChannelEx at the same time. + * This method will release all resources related to the session, leave the channel, that is, hang up or exit the call. This method can be called whether or not a call is currently in progress.After joining the channel, you must call this method or to end the call, otherwise, the next call cannot be started.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback. * - * @param options The channel media options. See ChannelMediaOptions . + * @param options The options for leaving the channel. See LeaveChannelOptions . * * @returns - * 0: Success.< 0: Failure.-2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. + * 0: Success.< 0: Failure. */ abstract updateDirectCdnStreamingMediaOptions( options: DirectCdnStreamingMediaOptions @@ -5431,13 +5437,7 @@ export abstract class IRtcEngine { abstract stopRhythmPlayer(): number; /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract configRhythmPlayer(config: AgoraRhythmPlayerConfig): number; @@ -5547,10 +5547,10 @@ export abstract class IRtcEngine { abstract getCurrentMonotonicTimeInMs(): number; /** - * Enables interoperability with the Agora Web SDK (applicable only in the live streaming scenarios). - * Deprecated:The SDK automatically enables interoperability with the Web SDK, so you no longer need to call this method.You can call this method to enable or disable interoperability with the Agora Web SDK. If a channel has Web SDK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user.This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios. + * Enables/Disables the local video capture. + * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. * - * @param enabled Whether to enable interoperability:true: Enable interoperability.false: (Default) Disable interoperability. + * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. * * @returns * 0: Success.< 0: Failure. @@ -5602,12 +5602,7 @@ export abstract class IRtcEngine { * Destroys multiple video renderer objects at one time. * * @param sourceType The type of the video frame, see VideoSourceType . - * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters: - * All lowercase English letters: a to z. - * All uppercase English letters: A to Z. - * All numeric characters: 0 to 9. - * Space - * "!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," + * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters:All lowercase English letters: a to z.All uppercase English letters: A to Z.All numeric characters: 0 to 9.Space"!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," * @param uid The user ID of the remote user. */ abstract destroyRendererByConfig( diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 99a6d88dc..8bdb81ae2 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -89,11 +89,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. - * < 0: Failure. - * -2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter. - * -7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method. - * -8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. + * 0: Success.< 0: Failure.-2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. */ abstract updateChannelMediaOptionsEx( options: ChannelMediaOptions, @@ -101,14 +97,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Starts recording the local audio and video. - * After successfully getting the IMediaRecorder object by calling getMediaRecorder , you can call this method to enable the recoridng of the local audio and video.This method can record the audio captured by the local microphone and encoded in AAC format, and the video captured by the local camera and encoded in H.264 format. The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the onRecorderStateChanged(RecorderStateError, RecorderErrorNoStream) callback.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.Call this method after joining a channel. + * Creates a data stream. + * Creates a data stream. Each user can create up to five data streams in a single channel.Compared with createDataStreamEx , this method does not support data reliability. If a data packet is not received five seconds after it was sent, the SDK directly discards the data. * - * @param config The recording configuration. See MediaRecorderConfiguration . + * @param config The configurations for the data stream. See DataStreamConfig . * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. Ensure the following:The specified path of the recording file exists and is writable.The specified format of the recording file is supported.The maximum recording duration is correctly set.-4: IRtcEngine does not support the request. The recording is ongoing or the recording stops because an error occurs.-7: The method is called before IRtcEngine is initialized. + * ID of the created data stream, if the method call succeeds.< 0: Failure. */ abstract setVideoEncoderConfigurationEx( config: VideoEncoderConfiguration, @@ -180,14 +176,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes subscribing to the video streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteLocalAudioStreamEx( mute: boolean, @@ -195,14 +191,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes subscribing to the video streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteLocalVideoStreamEx( mute: boolean, @@ -210,14 +206,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes subscribing to the video streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteAllRemoteAudioStreamsEx( mute: boolean, @@ -225,14 +221,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes subscribing to the video streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteAllRemoteVideoStreamsEx( mute: boolean, @@ -240,15 +236,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you do not want to subscribe to. If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel. - * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . - * - * @param uidList The user ID list of users that you do not want to subscribe to. - * If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * Set the allowlist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -262,15 +254,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you do not want to subscribe to. If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel. - * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . - * - * @param uidList The user ID list of users that you do not want to subscribe to. - * If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * Set the allowlist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -284,15 +272,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you do not want to subscribe to. If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel. - * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . - * - * @param uidList The user ID list of users that you do not want to subscribe to. - * If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * Set the allowlist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -306,15 +290,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you do not want to subscribe to. If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel. - * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . - * - * @param uidList The user ID list of users that you do not want to subscribe to. - * If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * Set the allowlist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -408,14 +388,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes subscribing to the video streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteRecordingSignalEx( mute: boolean, @@ -460,14 +440,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Starts recording the local audio and video. - * After successfully getting the IMediaRecorder object by calling getMediaRecorder , you can call this method to enable the recoridng of the local audio and video.This method can record the audio captured by the local microphone and encoded in AAC format, and the video captured by the local camera and encoded in H.264 format. The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the onRecorderStateChanged(RecorderStateError, RecorderErrorNoStream) callback.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.Call this method after joining a channel. + * Creates a data stream. + * Creates a data stream. Each user can create up to five data streams in a single channel.Compared with createDataStreamEx , this method does not support data reliability. If a data packet is not received five seconds after it was sent, the SDK directly discards the data. * - * @param config The recording configuration. See MediaRecorderConfiguration . + * @param config The configurations for the data stream. See DataStreamConfig . * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. Ensure the following:The specified path of the recording file exists and is writable.The specified format of the recording file is supported.The maximum recording duration is correctly set.-4: IRtcEngine does not support the request. The recording is ongoing or the recording stops because an error occurs.-7: The method is called before IRtcEngine is initialized. + * ID of the created data stream, if the method call succeeds.< 0: Failure. */ abstract createDataStreamEx( config: DataStreamConfig, @@ -604,6 +584,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { * Agora recommends that you use the server-side Media Push function. After you start pushing media streams to CDN with transcoding, you can dynamically update the transcoding configuration according to the scenario. The SDK triggers the onTranscodingUpdated callback after the transcoding configuration is updated. * * @param transcoding The transcoding configuration for Media Push. See LiveTranscoding . + * * @param connection The connection information. See RtcConnection . * * @returns @@ -718,16 +699,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Enables or disables dual-stream mode on the sender side. - * After you enable dual-stream mode, you can call setRemoteVideoStreamType to choose to receive either the high-quality video stream or the low-quality video stream on the subscriber side. - * You can call this method to enable or disable the dual-stream mode on the publisher side. Dual streams are a pairing of a high-quality video stream and a low-quality video stream: - * High-quality video stream: High bitrate, high resolution. - * Low-quality video stream: Low bitrate, low resolution. This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-collected video streams. - * - * @param enabled Whether to enable dual-stream mode: - * true: Enable dual-stream mode. - * false: (Default) Disable dual-stream mode. - * @param streamConfig The configuration of the low-quality video stream. See SimulcastStreamConfig . + * After you enable dual-stream mode, you can call setRemoteVideoStreamType to choose to receive either the high-quality video stream or the low-quality video stream on the subscriber side.You can call this method to enable or disable the dual-stream mode on the publisher side. Dual streams are a pairing of a high-quality video stream and a low-quality video stream:High-quality video stream: High bitrate, high resolution.Low-quality video stream: Low bitrate, low resolution.This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-collected video streams. * + * @param enabled Whether to enable dual-stream mode:true: Enable dual-stream mode.false: (Default) Disable dual-stream mode. + * @param streamConfig The configuration of the low-quality video stream. See SimulcastStreamConfig . * @param connection The connection information. See RtcConnection . * * @returns @@ -769,11 +744,17 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Takes a snapshot of a video stream. - * The method is asynchronous, and the SDK has not taken the snapshot when the method call returns. After a successful method call, the SDK triggers the onSnapshotTaken callback to report whether the snapshot is successfully taken, as well as the details for that snapshot.This method takes a snapshot of a video stream from the specified user, generates a JPG image, and saves it to the specified path.Call this method after the joinChannelEx method.This method takes a snapshot of the published video stream specified in ChannelMediaOptions .If the user's video has been preprocessed, for example, watermarked or beautified, the resulting snapshot includes the pre-processing effect. + * The method is asynchronous, and the SDK has not taken the snapshot when the method call returns. After a successful method call, the SDK triggers the onSnapshotTaken callback to report whether the snapshot is successfully taken, as well as the details for that snapshot. + * This method takes a snapshot of a video stream from the specified user, generates a JPG image, and saves it to the specified path. + * Call this method after the joinChannelEx method.This method takes a snapshot of the published video stream specified in ChannelMediaOptions .If the user's video has been preprocessed, for example, watermarked or beautified, the resulting snapshot includes the pre-processing effect. * * @param connection The connection information. See RtcConnection . * @param uid The user ID. Set uid as 0 if you want to take a snapshot of the local user's video. - * @param filePath The local path (including filename extensions) of the snapshot. For example:Windows: C:\Users\\AppData\Local\Agora\\example.jpgmacOS: ~/Library/Logs/example.jpgEnsure that the path you specify exists and is writable. + * @param filePath The local path (including filename extensions) of the snapshot. For example: + * Windows: C:\Users\\AppData\Local\Agora\\example.jpg + * macOS: ~/Library/Logs/example.jpg + * Ensure that the path you specify exists and is writable. + * * * @returns * 0: Success.< 0: Failure. @@ -785,10 +766,13 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Occurs when the token expires. - * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call joinChannel to rejoin the channel. + * Stops recording the local audio and video. + * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. * * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. */ abstract startMediaRenderingTracingEx(connection: RtcConnection): number; } diff --git a/ts/Private/IAgoraSpatialAudio.ts b/ts/Private/IAgoraSpatialAudio.ts index d26f0259b..8f827ae88 100644 --- a/ts/Private/IAgoraSpatialAudio.ts +++ b/ts/Private/IAgoraSpatialAudio.ts @@ -283,10 +283,13 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { abstract clearRemotePositions(): number; /** - * Occurs when the token expires. - * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call joinChannel to rejoin the channel. + * Stops recording the local audio and video. + * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. * * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. */ abstract clearRemotePositionsEx(connection: RtcConnection): number; @@ -294,8 +297,16 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { * Sets the sound attenuation effect for the specified user. * * @param uid The user ID. This parameter must be the same as the user ID passed in when the user joined the channel. - * @param attenuation For the user's sound attenuation coefficient, the value range is [0,1]. The values are as follows:0: Broadcast mode, where the volume and timbre are not attenuated with distance, and the volume and timbre heard by local users do not change regardless of distance.(0,0.5): Weak attenuation mode, that is, the volume and timbre are only weakly attenuated during the propagation process, and the sound can travel farther than the real environment.0.5: (Default) simulates the attenuation of the volume in the real environment; the effect is equivalent to not setting the speaker_attenuation parameter.(0.5,1]: Strong attenuation mode, that is, the volume and timbre attenuate rapidly during the propagation process. - * @param forceSet Whether to force the user's sound attenuation effect:true: Force attenuation to set the sound attenuation of the user. At this time, the attenuation coefficient of the sound insulation area set in the audioAttenuation of the SpatialAudioZone does not take effect for the user.If the sound source and listener are inside and outside the sound isolation area, the sound attenuation effect is determined by the audioAttenuation in SpatialAudioZone.If the sound source and the listener are in the same sound insulation area or outside the same sound insulation area, the sound attenuation effect is determined by attenuation in this method.false: Do not force attenuation to set the user's sound attenuation effect, as shown in the following two cases. + * @param attenuation For the user's sound attenuation coefficient, the value range is [0,1]. The values are as follows: + * 0: Broadcast mode, where the volume and timbre are not attenuated with distance, and the volume and timbre heard by local users do not change regardless of distance. + * (0,0.5): Weak attenuation mode, that is, the volume and timbre are only weakly attenuated during the propagation process, and the sound can travel farther than the real environment. + * 0.5: (Default) simulates the attenuation of the volume in the real environment; the effect is equivalent to not setting the speaker_attenuation parameter. + * (0.5,1]: Strong attenuation mode, that is, the volume and timbre attenuate rapidly during the propagation process. + * + * @param forceSet Whether to force the user's sound attenuation effect:true: Force attenuation to set the sound attenuation of the user. At this time, the attenuation coefficient of the sound insulation area set in the audioAttenuation of the SpatialAudioZone does not take effect for the user. + * If the sound source and listener are inside and outside the sound isolation area, the sound attenuation effect is determined by the audioAttenuation in SpatialAudioZone. + * If the sound source and the listener are in the same sound insulation area or outside the same sound insulation area, the sound attenuation effect is determined by attenuation in this method. + * false: Do not force attenuation to set the user's sound attenuation effect, as shown in the following two cases. * * @returns * 0: Success.< 0: Failure. diff --git a/ts/Private/IAudioDeviceManager.ts b/ts/Private/IAudioDeviceManager.ts index 658594a8a..d6afd9529 100644 --- a/ts/Private/IAudioDeviceManager.ts +++ b/ts/Private/IAudioDeviceManager.ts @@ -58,13 +58,13 @@ export abstract class IAudioDeviceManager { abstract getPlaybackDeviceInfo(): AudioDeviceInfo; /** - * Sets the volume of the audio effects. - * Call this method after playEffect . + * Sets the volume of the in-ear monitor. + * Users must use wired earphones to hear their own voices.You can call this method either before or after joining a channel. * - * @param volume The playback volume. The value range is [0, 100]. The default value is 100, which represents the original volume. + * @param volume The volume of the in-ear monitor. The value ranges between 0 and 100. The default value is 100. * * @returns - * 0: Success.< 0: Failure. + * < 0: Failure. */ abstract setPlaybackDeviceVolume(volume: number): number; @@ -77,7 +77,7 @@ export abstract class IAudioDeviceManager { * Sets the audio capture device. * You can call this method to change the audio route currently being used, but this does not change the default audio route. For example, if the default audio route is microphone, you call this method to set the audio route as bluetooth earphones before joinging a channel and then start a device test, the SDK conducts device test on the bluetooth earphones. After the device test is completed and you join a channel, the SDK still uses the microphone for audio capturing. * - * @param deviceId The ID of the audio capture device. You can get the Device ID by calling enumerateRecordingDevices . Connecting or disconnecting the audio device does not change the value of deviceId.The maximum length is MaxDeviceIdLengthType . + * @param deviceId The ID of the audio capture device. You can get the media player ID by calling enumerateRecordingDevices . Connecting or disconnecting the audio device does not change the value of deviceId.The maximum length is MaxDeviceIdLengthType . * * @returns * 0: Success.< 0: Failure. @@ -137,13 +137,13 @@ export abstract class IAudioDeviceManager { abstract getLoopbackDevice(): string; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joining a channel.If you do not want to subscribe the video streams of remote users before joining a channel, you can call joinChannel and set autoSubscribeVideo as false. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract setPlaybackDeviceMute(mute: boolean): number; @@ -153,13 +153,13 @@ export abstract class IAudioDeviceManager { abstract getPlaybackDeviceMute(): boolean; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joining a channel.If you do not want to subscribe the video streams of remote users before joining a channel, you can call joinChannel and set autoSubscribeVideo as false. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract setRecordingDeviceMute(mute: boolean): number; diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index fa84fa919..8d2c6b445 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -1165,7 +1165,7 @@ export class IRtcEngineImpl implements IRtcEngine { const apiType = this.getApiTypeFromQueryCodecCapability(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); - const codecInfo = jsonResults.codec_info; + const codecInfo = jsonResults.codecInfo; const size = jsonResults.size; return { codecInfo, diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index 681470773..2fb2f3380 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -72,10 +72,10 @@ export class RendererManager { } /** - * Sets dual-stream mode on the sender side. - * The SDK enables the low-quality video stream auto mode on the sender by default, which is equivalent to calling this method and setting the mode to AutoSimulcastStream. If you want to modify this behavior, you can call this method and modify the mode to DisableSimulcastStream(never send low-quality video streams) or EnableSimulcastStream (always send low-quality video streams).The difference and connection between this method and enableDualStreamMode [1/3] is as follows:When calling this method and setting mode to DisableSimulcastStream, it has the same effect as enableDualStreamMode [1/3](false).When calling this method and setting mode to EnableSimulcastStream, it has the same effect as enableDualStreamMode [1/3](true).Both methods can be called before and after joining a channel. If they are used at the same time, the settings in the method called later shall prevail. + * Sets the channel mode of the current audio file. + * In a stereo music file, the left and right channels can store different audio data. According to your needs, you can set the channel mode to original mode, left channel mode, right channel mode, or mixed channel mode. For example, in the KTV scenario, the left channel of the music file stores the musical accompaniment, and the right channel stores the singing voice. If you only need to listen to the accompaniment, call this method to set the channel mode of the music file to left channel mode; if you need to listen to the accompaniment and the singing voice at the same time, call this method to set the channel mode to mixed channel mode.Call this method after calling open .This method only applies to stereo audio files. * - * @param mode The mode in which the video stream is sent. See SimulcastStreamMode . + * @param mode The channel mode. See AudioDualMonoMode . * * @returns * 0: Success.< 0: Failure. @@ -310,10 +310,10 @@ export class RendererManager { } /** - * Enables interoperability with the Agora Web SDK (applicable only in the live streaming scenarios). - * Deprecated:The SDK automatically enables interoperability with the Web SDK, so you no longer need to call this method.You can call this method to enable or disable interoperability with the Agora Web SDK. If a channel has Web SDK users, ensure that you call this method, or the video of the Native user will be a black screen for the Web user.This method is only applicable in live streaming scenarios, and interoperability is enabled by default in communication scenarios. + * Enables/Disables the local video capture. + * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. * - * @param enabled Whether to enable interoperability:true: Enable interoperability.false: (Default) Disable interoperability. + * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. * * @returns * 0: Success.< 0: Failure. @@ -537,13 +537,7 @@ export class RendererManager { } /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ private ensureRendererConfig(config: VideoFrameCacheConfig): | Map< From 4304e4c9ebae52151c8e39d296e23fffe51489fc Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 7 Apr 2023 16:17:30 +0800 Subject: [PATCH 11/74] chore: optimize --- .../components/RtcSurfaceView/index.tsx | 72 ++++--------------- .../DirectCdnStreaming/DirectCdnStreaming.tsx | 9 ++- .../JoinMultipleChannel.tsx | 35 ++++++--- .../LocalVideoTranscoder.tsx | 2 +- package.json | 6 +- .../agora_node_ext/agora_electron_bridge.cpp | 1 + ts/Private/internal/RtcEngineExInternal.ts | 14 ++++ ts/Renderer/GlRenderer/index.ts | 5 +- ts/Renderer/RendererManager.ts | 21 +++--- ts/Renderer/YUVCanvasRenderer/index.ts | 40 ++++++++--- ts/Types.ts | 4 ++ 11 files changed, 113 insertions(+), 96 deletions(-) diff --git a/example/src/renderer/components/RtcSurfaceView/index.tsx b/example/src/renderer/components/RtcSurfaceView/index.tsx index e7511927a..b8dd8372a 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.tsx +++ b/example/src/renderer/components/RtcSurfaceView/index.tsx @@ -3,7 +3,6 @@ import { createAgoraRtcEngine, IMediaPlayer, IRtcEngineEx, - RenderModeType, RtcConnection, VideoCanvas, VideoMirrorModeType, @@ -27,7 +26,8 @@ class RtcSurfaceView extends Component { constructor(props) { super(props); this.state = { - isMirror: false, + isMirror: + props.mirrorMode === VideoMirrorModeType.VideoMirrorModeDisabled, uniqueId: getRandomInt(), }; } @@ -47,8 +47,7 @@ class RtcSurfaceView extends Component { shouldComponentUpdate( nextProps: Readonly, - nextState: Readonly<{}>, - nextContext: any + nextState: Readonly ): boolean { return ( JSON.stringify(this.props.canvas) !== JSON.stringify(nextProps.canvas) || @@ -70,6 +69,7 @@ class RtcSurfaceView extends Component { updateRender = () => { const { canvas, connection } = this.props; + const { isMirror } = this.state; const dom = this.getHTMLElement(); const engine = createAgoraRtcEngine(); @@ -102,57 +102,17 @@ class RtcSurfaceView extends Component { } catch (e) { console.warn(e); } - funcName.call(this, { ...canvas, view: dom }, connection!); - }; - - updateMirror = () => { - const { canvas, connection } = this.props; - const { isMirror } = this.state; - const engine = createAgoraRtcEngine(); - - let funcName: - | typeof IRtcEngineEx.prototype.setRemoteRenderModeEx - | typeof IRtcEngineEx.prototype.setLocalRenderMode - | typeof IRtcEngineEx.prototype.setRemoteRenderMode; - - if (canvas.sourceType === undefined) { - if (canvas.uid) { - funcName = engine.setRemoteRenderMode; - } else { - funcName = engine.setLocalRenderMode; - } - } else if (canvas.sourceType === VideoSourceType.VideoSourceMediaPlayer) { - funcName = engine.setLocalRenderMode; - } else if (canvas.sourceType === VideoSourceType.VideoSourceRemote) { - funcName = engine.setRemoteRenderMode; - } else { - funcName = engine.setLocalRenderMode; - } - - if (funcName === engine.setRemoteRenderMode && connection) { - funcName = engine.setRemoteRenderModeEx; - } - - if (funcName === engine.setLocalRenderMode) { - funcName.call( - this, - RenderModeType.RenderModeFit, - isMirror - ? VideoMirrorModeType.VideoMirrorModeEnabled - : VideoMirrorModeType.VideoMirrorModeDisabled - ); - } else { - // @ts-ignore - funcName.call( - this, - canvas.uid!, - RenderModeType.RenderModeFit, - isMirror + funcName.call( + this, + { + ...canvas, + mirrorMode: isMirror ? VideoMirrorModeType.VideoMirrorModeEnabled : VideoMirrorModeType.VideoMirrorModeDisabled, - connection! - ); - } + view: dom, + }, + connection! + ); }; render() { @@ -163,11 +123,7 @@ class RtcSurfaceView extends Component {
{ - this.setState({ isMirror: !isMirror }, () => { - setTimeout(() => { - this.updateMirror(); - }); - }); + this.setState({ isMirror: !isMirror }, this.updateRender); }} >
value !== remoteUid), }); - } else if (connection.channelId === channelId2) { + } else if ( + connection.channelId === channelId2 && + connection.localUid === uid2 + ) { this.setState({ remoteUsers2: remoteUsers2.filter((value) => value !== remoteUid), }); diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 9ee274b7b..46d2467b1 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -337,7 +337,7 @@ export default class LocalVideoTranscoder value.height = height; value.zOrder = 1; value.alpha = 1; - value.mirror = true; + value.mirror = false; }); return { diff --git a/package.json b/package.json index 28a0fb341..9a16f3723 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.1.1-rc.1", + "version": "4.2.0-dev.3", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -203,7 +203,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.1_DCG_Windows_Video_20230330_1057.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.1_DCG_Mac_Video_20230330_1057.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.3_DCG_Windows_Video_20230407_0202.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.3_DCG_Mac_Video_20230407_0202.zip" } } diff --git a/source_code/agora_node_ext/agora_electron_bridge.cpp b/source_code/agora_node_ext/agora_electron_bridge.cpp index 691020336..052e7d0da 100644 --- a/source_code/agora_node_ext/agora_electron_bridge.cpp +++ b/source_code/agora_node_ext/agora_electron_bridge.cpp @@ -511,6 +511,7 @@ void AgoraElectronBridge::Init() { void AgoraElectronBridge::Release() { if (_iris_api_engine) { // reset + _iris_rendering.reset(); _iris_api_engine.reset(); } LOG_F(INFO, __FUNCTION__); diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index c4991f437..73231c62f 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -41,6 +41,7 @@ import { ScreenCaptureSourceInfo, SDKBuildInfo, Size, + ScreenCaptureConfiguration, } from '../IAgoraRtcEngine'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; @@ -481,6 +482,19 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return 'RtcEngineEx_createDataStreamEx2'; } + protected getApiTypeFromStartScreenCaptureDesktop( + sourceType: VideoSourceType, + config: ScreenCaptureConfiguration + ): string { + return 'RtcEngine_startScreenCapture2'; + } + + protected getApiTypeFromStopScreenCapture( + sourceType: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + ): string { + return 'RtcEngine_stopScreenCapture2'; + } + getAudioDeviceManager(): IAudioDeviceManager { return this._audio_device_manager; } diff --git a/ts/Renderer/GlRenderer/index.ts b/ts/Renderer/GlRenderer/index.ts index 47843b512..8392bde1f 100644 --- a/ts/Renderer/GlRenderer/index.ts +++ b/ts/Renderer/GlRenderer/index.ts @@ -23,7 +23,8 @@ const vertexShaderSource = const yuvShaderSource = 'precision mediump float;' + 'uniform sampler2D Ytex;' + - 'uniform sampler2D Utex,Vtex;' + + 'uniform sampler2D Utex;' + + 'uniform sampler2D Vtex;' + 'varying vec2 v_texCoord;' + 'void main(void) {' + ' float nx,ny,r,g,b,y,u,v;' + @@ -294,7 +295,7 @@ export class GlRenderer extends IRenderer { height: videoFrame.height, left: 0, top: 0, - right: 0, + right: videoFrame.yStride - videoFrame.width, bottom: 0, rotation: videoFrame.rotation || 0, yplane: videoFrame.yBuffer, diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index 2fb2f3380..194ba724f 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -352,13 +352,14 @@ export class RendererManager { break; case 1: { // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::RESIZED - const { width, height } = finalResult; + const { width, height, yStride } = finalResult; const newShareVideoFrame = this.resizeShareVideoFrame( videoSourceType, channelId, uid, width, - height + height, + yStride ); rendererItem.shareVideoFrame = newShareVideoFrame; finalResult = this.msgBridge.GetVideoFrame(newShareVideoFrame); @@ -367,10 +368,10 @@ export class RendererManager { case 2: // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::NO_CACHE // setupVideo/AgoraView render before initialize - this.enableVideoFrameCache({ videoSourceType, channelId, uid }); - return; + // this.enableVideoFrameCache({ videoSourceType, channelId, uid }); + break; default: - return; + break; } if (finalResult.ret !== 0) { logWarn('GetVideoFrame ret is', finalResult.ret, rendererItem); @@ -590,17 +591,19 @@ export class RendererManager { channelId: string, uid: number, width = 0, - height = 0 + height = 0, + yStride = 0 ): ShareVideoFrame { return { videoSourceType, channelId, uid, - yBuffer: Buffer.alloc(width * height), - uBuffer: Buffer.alloc((width * height) / 4), - vBuffer: Buffer.alloc((width * height) / 4), + yBuffer: Buffer.alloc(yStride * height), + uBuffer: Buffer.alloc((yStride * height) / 4), + vBuffer: Buffer.alloc((yStride * height) / 4), width, height, + yStride, }; } diff --git a/ts/Renderer/YUVCanvasRenderer/index.ts b/ts/Renderer/YUVCanvasRenderer/index.ts index 2d9b2ed78..ad078549b 100644 --- a/ts/Renderer/YUVCanvasRenderer/index.ts +++ b/ts/Renderer/YUVCanvasRenderer/index.ts @@ -25,6 +25,7 @@ export class YUVCanvasRenderer extends IRenderer { rotation: 0, width: 0, height: 0, + yStride: 0, yBuffer: new Uint8Array(0), uBuffer: new Uint8Array(0), vBuffer: new Uint8Array(0), @@ -174,14 +175,18 @@ export class YUVCanvasRenderer extends IRenderer { let frameHeight = frame.height; if ( - this._videoFrame.width === 0 || + this._videoFrame.yStride === 0 || this._videoFrame.height === 0 || - this._videoFrame.width != frame.width || + this._videoFrame.yStride != frame.yStride || this._videoFrame.height != frame.height ) { - this._videoFrame.yBuffer = new Uint8Array(frameWidth * frameHeight); - this._videoFrame.uBuffer = new Uint8Array((frameWidth * frameHeight) / 4); - this._videoFrame.vBuffer = new Uint8Array((frameWidth * frameHeight) / 4); + this._videoFrame.yBuffer = new Uint8Array(frame.yStride * frameHeight); + this._videoFrame.uBuffer = new Uint8Array( + (frame.yStride * frameHeight) / 4 + ); + this._videoFrame.vBuffer = new Uint8Array( + (frame.yStride * frameHeight) / 4 + ); } this._videoFrame.yBuffer.set(frame.yBuffer); @@ -190,11 +195,12 @@ export class YUVCanvasRenderer extends IRenderer { this._videoFrame.width = frame.width; this._videoFrame.height = frame.height; + this._videoFrame.yStride = frame.yStride; this._videoFrame.rotation = frame.rotation; let options: CanvasOptions = { - frameWidth: frame.width, - frameHeight: frame.height, + frameWidth, + frameHeight, rotation: frame.rotation ? frame.rotation : 0, contentMode: this.contentMode, clientWidth: this._container.clientWidth, @@ -208,12 +214,24 @@ export class YUVCanvasRenderer extends IRenderer { height: frameHeight, chromaWidth: frameWidth / 2, chromaHeight: frameHeight / 2, + cropLeft: frame.yStride - frameWidth, }); - let y = YUVBuffer.lumaPlane(format, this._videoFrame.yBuffer); - let u = YUVBuffer.chromaPlane(format, this._videoFrame.uBuffer); - let v = YUVBuffer.chromaPlane(format, this._videoFrame.vBuffer); - let yuvBufferFrame = YUVBuffer.frame(format, y, u, v); + let yuvBufferFrame = YUVBuffer.frame( + format, + { + bytes: this._videoFrame.yBuffer, + stride: frame.yStride, + }, + { + bytes: this._videoFrame.uBuffer, + stride: frame.yStride / 2, + }, + { + bytes: this._videoFrame.vBuffer, + stride: frame.yStride / 2, + } + ); this._yuvCanvasSink.drawFrame(yuvBufferFrame); } diff --git a/ts/Types.ts b/ts/Types.ts index 9c95c9c17..94c1264a6 100644 --- a/ts/Types.ts +++ b/ts/Types.ts @@ -168,6 +168,10 @@ export interface ShareVideoFrame { * @ignore */ height: number; + /** + * @ignore + */ + yStride: number; /** * @ignore */ From 8cae5cc12efd1a48ca9946cf9d0ba95849662f36 Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 10 Apr 2023 11:15:12 +0800 Subject: [PATCH 12/74] chore: optimize --- .../LocalVideoTranscoder.tsx | 26 ++++++++++--------- package.json | 6 ++--- .../agora_node_ext/agora_electron_bridge.cpp | 3 +++ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 46d2467b1..2911e91c7 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -440,21 +440,23 @@ export default class LocalVideoTranscoder } protected renderUsers(): React.ReactNode { - const { videoDeviceId, channelId } = this.state; + const { startPreview, joinChannelSuccess, videoDeviceId } = this.state; return ( <> {super.renderUsers()} - {videoDeviceId?.map((value) => { - return ( - - ); - })} + {startPreview || joinChannelSuccess + ? videoDeviceId?.map((value) => { + return ( + + ); + }) + : undefined} ); } diff --git a/package.json b/package.json index 9a16f3723..d16788dc2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.2.0-dev.3", + "version": "4.2.0-dev.4", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -203,7 +203,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.3_DCG_Windows_Video_20230407_0202.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.3_DCG_Mac_Video_20230407_0202.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.4_DCG_Windows_Video_20230410_1051.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.4_DCG_Mac_Video_20230410_1051.zip" } } diff --git a/source_code/agora_node_ext/agora_electron_bridge.cpp b/source_code/agora_node_ext/agora_electron_bridge.cpp index 052e7d0da..b72481ff5 100644 --- a/source_code/agora_node_ext/agora_electron_bridge.cpp +++ b/source_code/agora_node_ext/agora_electron_bridge.cpp @@ -391,6 +391,7 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, size_t v_length; int height; int width; + int yStride; napi_obj_get_property(env, obj, "uid", config.uid); napi_obj_get_property(env, obj, "videoSourceType", config.video_source_type); @@ -408,6 +409,7 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, napi_obj_get_property(env, obj, "height", height); napi_obj_get_property(env, obj, "width", width); + napi_obj_get_property(env, obj, "yStride", yStride); IrisCVideoFrame videoFrame; videoFrame.yBuffer = (uint8_t *) y_buffer; @@ -415,6 +417,7 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, videoFrame.vBuffer = (uint8_t *) v_buffer; videoFrame.height = height; videoFrame.width = width; + videoFrame.yStride = yStride; bool isFresh = false; napi_value retObj; From 8f5b7a761c569fe37e00387e996c9134d7a27f5d Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 10 Apr 2023 16:51:34 +0800 Subject: [PATCH 13/74] chore: optimize --- .github/workflows/ci.yml | 1 + .../src/renderer/examples/advanced/Extension/Extension.tsx | 4 +++- .../advanced/SendMultiVideoStream/SendMultiVideoStream.tsx | 4 ++-- .../examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f69c5ff46..14cb7babb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: pull_request: branches: - main + - release/* jobs: lint: diff --git a/example/src/renderer/examples/advanced/Extension/Extension.tsx b/example/src/renderer/examples/advanced/Extension/Extension.tsx index 4440cde73..d29a665f1 100644 --- a/example/src/renderer/examples/advanced/Extension/Extension.tsx +++ b/example/src/renderer/examples/advanced/Extension/Extension.tsx @@ -83,7 +83,9 @@ export default class Extension return; } - this.engine?.loadExtensionProvider(path); + if (process.platform === 'win32') { + this.engine?.loadExtensionProvider(path); + } this.engine?.enableExtension(provider, extension, true); this.setState({ enableExtension: true }); diff --git a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx index 4435f6b47..a027e213b 100644 --- a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx +++ b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx @@ -129,8 +129,8 @@ export default class SendMultiVideoStream } this.player = this.engine?.createMediaPlayer(); - // this.player.registerAudioFrameObserver(this); - // this.player.registerVideoFrameObserver(this); + // this.player?.registerAudioFrameObserver(this); + // this.player?.registerVideoFrameObserver(this); this.player?.registerPlayerSourceObserver(this); this.player?.open(url, 0); }; diff --git a/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx index 79d19ce0a..e6bf21b43 100644 --- a/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx +++ b/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx @@ -91,6 +91,7 @@ function JoinChannelAudio() { engine.current.enableLocalAudio(false); setEnableLocalAudio(false); }; + /** * Step 3-2-1 (Optional): muteLocalAudioStream */ From 0d7e043b4f416b94356006ee306bbd949639bcb2 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 12 Apr 2023 11:17:55 +0800 Subject: [PATCH 14/74] chore: optimize --- .github/workflows/ci.yml | 5 +++++ ts/Private/internal/IrisApiEngine.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 14cb7babb..9a544bdad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,9 @@ name: CI + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + on: push: branches: diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index 90d8c26ba..739c627e6 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -213,7 +213,7 @@ export const EVENT_PROCESSORS = { MediaPlayerInternal._source_observers.get(data.playerId), }, IMediaPlayerAudioFrameObserver: { - suffix: 'MediaPlayer_AudioFrameObserver_', + suffix: 'AudioPcmFrameSink_', type: EVENT_TYPE.IMediaPlayer, func: [processIAudioPcmFrameSink], preprocess: (event: string, data: any, buffers: Uint8Array[]) => { @@ -225,7 +225,7 @@ export const EVENT_PROCESSORS = { MediaPlayerInternal._audio_frame_observers.get(data.playerId), }, IMediaPlayerVideoFrameObserver: { - suffix: 'MediaPlayer_VideoFrameObserver_', + suffix: 'MediaPlayerVideoFrameObserver_', type: EVENT_TYPE.IMediaPlayer, func: [processIMediaPlayerVideoFrameObserver], preprocess: (event: string, data: any, buffers: Uint8Array[]) => { From 661840ee0a6d347e94905dc7d5e5d299e6c0d68b Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 12 Apr 2023 13:56:40 +0800 Subject: [PATCH 15/74] fix: `removeSubscription` not a function --- ts/Private/extension/IAgoraMediaEngineExtension.ts | 2 +- ts/Private/extension/IAgoraMediaPlayerExtension.ts | 2 +- ts/Private/extension/IAgoraMediaRecorderExtension.ts | 2 +- ts/Private/extension/IAgoraMusicContentCenterExtension.ts | 2 +- ts/Private/extension/IAgoraRtcEngineExtension.ts | 2 +- ts/Private/internal/IrisApiEngine.ts | 3 ++- ts/Private/internal/MediaEngineInternal.ts | 6 ++---- ts/Private/internal/MediaPlayerInternal.ts | 6 ++---- ts/Private/internal/MediaRecorderInternal.ts | 6 ++---- ts/Private/internal/MusicContentCenterInternal.ts | 6 ++---- ts/Private/internal/RtcEngineExInternal.ts | 6 ++---- 11 files changed, 17 insertions(+), 26 deletions(-) diff --git a/ts/Private/extension/IAgoraMediaEngineExtension.ts b/ts/Private/extension/IAgoraMediaEngineExtension.ts index 8e60a22e9..e30442f81 100644 --- a/ts/Private/extension/IAgoraMediaEngineExtension.ts +++ b/ts/Private/extension/IAgoraMediaEngineExtension.ts @@ -3,7 +3,7 @@ import { IVideoEncodedFrameObserver, IVideoFrameObserver, } from '../AgoraMediaBase'; -import { EmitterSubscription } from '../internal/emitter/EventEmitter'; +import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaEngineEvent = IAudioFrameObserver & IVideoFrameObserver & diff --git a/ts/Private/extension/IAgoraMediaPlayerExtension.ts b/ts/Private/extension/IAgoraMediaPlayerExtension.ts index fda7dafa1..98686e169 100644 --- a/ts/Private/extension/IAgoraMediaPlayerExtension.ts +++ b/ts/Private/extension/IAgoraMediaPlayerExtension.ts @@ -1,7 +1,7 @@ import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IAudioPcmFrameSink, IAudioSpectrumObserver } from '../AgoraMediaBase'; -import { EmitterSubscription } from '../internal/emitter/EventEmitter'; +import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaPlayerEvent = IMediaPlayerSourceObserver & IAudioPcmFrameSink & diff --git a/ts/Private/extension/IAgoraMediaRecorderExtension.ts b/ts/Private/extension/IAgoraMediaRecorderExtension.ts index c22938ddd..c3523c838 100644 --- a/ts/Private/extension/IAgoraMediaRecorderExtension.ts +++ b/ts/Private/extension/IAgoraMediaRecorderExtension.ts @@ -1,5 +1,5 @@ import { IMediaRecorderObserver } from '../AgoraMediaBase'; -import { EmitterSubscription } from '../internal/emitter/EventEmitter'; +import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaRecorderEvent = IMediaRecorderObserver; diff --git a/ts/Private/extension/IAgoraMusicContentCenterExtension.ts b/ts/Private/extension/IAgoraMusicContentCenterExtension.ts index 3efd1f29e..6525f3e25 100644 --- a/ts/Private/extension/IAgoraMusicContentCenterExtension.ts +++ b/ts/Private/extension/IAgoraMusicContentCenterExtension.ts @@ -1,5 +1,5 @@ import { IMusicContentCenterEventHandler } from '../IAgoraMusicContentCenter'; -import { EmitterSubscription } from '../internal/emitter/EventEmitter'; +import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMusicContentCenterEvent = IMusicContentCenterEventHandler; diff --git a/ts/Private/extension/IAgoraRtcEngineExtension.ts b/ts/Private/extension/IAgoraRtcEngineExtension.ts index 4092cc1c1..9b327bc74 100644 --- a/ts/Private/extension/IAgoraRtcEngineExtension.ts +++ b/ts/Private/extension/IAgoraRtcEngineExtension.ts @@ -5,7 +5,7 @@ import { } from '../IAgoraRtcEngine'; import { IAudioSpectrumObserver } from '../AgoraMediaBase'; import { IAudioEncodedFrameObserver } from '../AgoraBase'; -import { EmitterSubscription } from '../internal/emitter/EventEmitter'; +import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IRtcEngineEvent = IRtcEngineEventHandler & IDirectCdnStreamingEventHandler & diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index 739c627e6..d3ecc16a9 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -54,10 +54,11 @@ import { } from './MusicContentCenterInternal'; import { RtcEngineExInternal } from './RtcEngineExInternal'; +import type { EventEmitter as IEventEmitter } from './emitter/EventEmitter'; import EventEmitter from './emitter/EventEmitter'; // @ts-ignore -export const DeviceEventEmitter = new EventEmitter(); +export const DeviceEventEmitter: IEventEmitter = new EventEmitter(); const AgoraRtcNg = AgoraEnv.AgoraElectronBridge; AgoraRtcNg.OnEvent('call_back_with_buffer', (...params: any) => { diff --git a/ts/Private/internal/MediaEngineInternal.ts b/ts/Private/internal/MediaEngineInternal.ts index 0c7e20445..b3e2036da 100644 --- a/ts/Private/internal/MediaEngineInternal.ts +++ b/ts/Private/internal/MediaEngineInternal.ts @@ -19,7 +19,7 @@ import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import { EmitterSubscription } from './emitter/EventEmitter'; +import type { EmitterSubscription } from './emitter/EventEmitter'; export class MediaEngineInternal extends IMediaEngineImpl { static _audio_frame_observers: IAudioFrameObserver[] = []; @@ -168,9 +168,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { listener: IMediaEngineEvent[EventType] ) { if (!this._events.has(listener)) return; - DeviceEventEmitter.removeSubscription( - this._events.get(listener)!.subscription - ); + this._events.get(listener)!.subscription.remove(); this._events.delete(listener); } diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index 60bf1f0f1..476797a21 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -35,7 +35,7 @@ const checkers = createCheckers( ); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import { EmitterSubscription } from './emitter/EventEmitter'; +import type { EmitterSubscription } from './emitter/EventEmitter'; export class MediaPlayerInternal extends IMediaPlayerImpl { static _source_observers: Map = new Map< @@ -177,9 +177,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { listener: IMediaPlayerEvent[EventType] ) { if (!this._events.has(listener)) return; - DeviceEventEmitter.removeSubscription( - this._events.get(listener)!.subscription - ); + this._events.get(listener)!.subscription.remove(); this._events.delete(listener); } diff --git a/ts/Private/internal/MediaRecorderInternal.ts b/ts/Private/internal/MediaRecorderInternal.ts index a825a0c81..d769911ba 100644 --- a/ts/Private/internal/MediaRecorderInternal.ts +++ b/ts/Private/internal/MediaRecorderInternal.ts @@ -12,7 +12,7 @@ import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import { EmitterSubscription } from './emitter/EventEmitter'; +import type { EmitterSubscription } from './emitter/EventEmitter'; export class MediaRecorderInternal extends IMediaRecorderImpl { static _observers: Map = new Map< @@ -99,9 +99,7 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { listener: IMediaRecorderEvent[EventType] ) { if (!this._events.has(listener)) return; - DeviceEventEmitter.removeSubscription( - this._events.get(listener)!.subscription - ); + this._events.get(listener)!.subscription.remove(); this._events.delete(listener); } diff --git a/ts/Private/internal/MusicContentCenterInternal.ts b/ts/Private/internal/MusicContentCenterInternal.ts index db81fd653..bc7eb7f25 100644 --- a/ts/Private/internal/MusicContentCenterInternal.ts +++ b/ts/Private/internal/MusicContentCenterInternal.ts @@ -20,7 +20,7 @@ const checkers = createCheckers(IAgoraMusicContentCenterTI); import { MediaPlayerInternal } from './MediaPlayerInternal'; -import { EmitterSubscription } from './emitter/EventEmitter'; +import type { EmitterSubscription } from './emitter/EventEmitter'; import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; export class MusicContentCenterInternal extends IMusicContentCenterImpl { @@ -79,9 +79,7 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { listener: IMusicContentCenterEvent[EventType] ) { if (!this._events.has(listener)) return; - DeviceEventEmitter.removeSubscription( - this._events.get(listener)!.subscription - ); + this._events.get(listener)!.subscription.remove(); this._events.delete(listener); } diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 73231c62f..28bb12d4b 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -75,7 +75,7 @@ import { MediaRecorderInternal } from './MediaRecorderInternal'; import { MusicContentCenterInternal } from './MusicContentCenterInternal'; import { callIrisApi, DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import { EmitterSubscription } from './emitter/EventEmitter'; +import type { EmitterSubscription } from './emitter/EventEmitter'; import { RendererManager } from '../../Renderer/RendererManager'; export class RtcEngineExInternal extends IRtcEngineExImpl { @@ -239,9 +239,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { listener: IRtcEngineEvent[EventType] ) { if (!this._events.has(listener)) return; - DeviceEventEmitter.removeSubscription( - this._events.get(listener)!.subscription - ); + this._events.get(listener)!.subscription.remove(); this._events.delete(listener); } From a806482d59acdc0e7160a01a6fdb88ce7c81643b Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 12 Apr 2023 16:23:56 +0800 Subject: [PATCH 16/74] fix: ProcessVideoRawData not working --- .../advanced/ProcessVideoRawData/ProcessVideoRawData.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx index ef5c9ce98..15712030f 100644 --- a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx +++ b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx @@ -21,6 +21,7 @@ import { AgoraButton } from '../../../components/ui'; const ffi = require('ffi-napi'); const Pointer = 'uint64'; +const pluginVersion = 'v4.2.0'; let pluginName = 'VideoObserverPlugin'; let postfix = `_${process.arch}`; if (process.platform === 'darwin') { @@ -112,8 +113,7 @@ export default class ProcessVideoRawData * Step 3: enablePlugin */ enablePlugin = async () => { - const version = '4.1.0-beta.1'; - const url = `https://github.com/AgoraIO-Extensions/RawDataPluginSample/releases/download/${version}/${pluginName}`; + const url = `https://github.com/AgoraIO-Extensions/RawDataPluginSample/releases/download/${pluginVersion}/${pluginName}`; const dllPath = path.resolve(os.tmpdir(), pluginName); if (!fs.existsSync(dllPath)) { console.log(`start downloading plugin ${url} to ${dllPath}`); From 882dcf679c8a603c07c6fa8f127242a1e9b8ab53 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 13 Apr 2023 21:57:37 +0800 Subject: [PATCH 17/74] chore: optimize examples --- example/README.md | 12 +- example/src/renderer/App.tsx | 2 +- .../src/renderer/components/BaseComponent.tsx | 56 +-- .../components/RtcSurfaceView/index.scss | 6 +- example/src/renderer/components/ui/index.tsx | 54 +- .../advanced/AudioMixing/AudioMixing.tsx | 2 + .../advanced/AudioSpectrum/AudioSpectrum.tsx | 1 + .../ChannelMediaRelay/ChannelMediaRelay.tsx | 7 +- .../ContentInspect/ContentInspect.tsx | 1 + .../advanced/DeviceManager/DeviceManager.tsx | 4 - .../DirectCdnStreaming/DirectCdnStreaming.tsx | 5 + .../advanced/Encryption/Encryption.tsx | 1 + .../examples/advanced/Extension/Extension.tsx | 20 +- .../JoinMultipleChannel.tsx | 48 +- .../LocalSpatialAudioEngine.tsx | 5 + .../LocalVideoTranscoder.tsx | 21 +- .../advanced/MediaPlayer/MediaPlayer.tsx | 1 + .../advanced/MediaRecorder/MediaRecorder.tsx | 3 +- .../MusicContentCenter/MusicContentCenter.tsx | 10 +- .../advanced/PlayEffect/PlayEffect.tsx | 3 + .../advanced/RTMPStreaming/RTMPStreaming.tsx | 6 + .../advanced/ScreenShare/ScreenShare.tsx | 5 + .../SendMultiVideoStream.tsx | 1 + .../advanced/TakeSnapshot/TakeSnapshot.tsx | 2 +- .../VideoEncoderConfiguration.tsx | 5 + .../JoinChannelVideo/JoinChannelVideo.tsx | 52 +- .../hook/DeviceManager/DeviceManager.tsx | 369 ++++++++++++++ .../JoinChannelAudio/JoinChannelAudio.tsx | 255 ++++++++++ .../JoinChannelVideo/JoinChannelVideo.tsx | 126 +++++ .../JoinMultipleChannel.tsx | 376 ++++++++++++++ .../examples/hook/StringUid/StringUid.tsx | 135 +++++ .../VirtualBackground/VirtualBackground.tsx | 206 ++++++++ .../hook/components/BaseComponent.tsx | 42 ++ .../components}/BaseRenderChannel.tsx | 8 +- .../hook/components/BaseRenderUsers.tsx | 38 ++ .../examples/hook/hooks/useInitRtcEngine.tsx | 197 ++++++++ .../examples/{hooks => hook}/index.ts | 0 .../hooks/DeviceManager/DeviceManager.tsx | 469 ------------------ .../JoinChannelAudio/JoinChannelAudio.tsx | 338 ------------- .../JoinChannelVideo/JoinChannelVideo.tsx | 302 ----------- .../JoinMultipleChannel.tsx | 391 --------------- .../examples/hooks/StringUid/StringUid.tsx | 218 -------- .../VirtualBackground/VirtualBackground.tsx | 293 ----------- .../examples/hooks/base/BaseRenderUsers.tsx | 65 --- .../src/renderer/hook/useInitRtcEngine.tsx | 78 --- package.json | 4 +- 46 files changed, 1933 insertions(+), 2310 deletions(-) create mode 100644 example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx create mode 100644 example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx create mode 100644 example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx create mode 100644 example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx create mode 100644 example/src/renderer/examples/hook/StringUid/StringUid.tsx create mode 100644 example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx create mode 100644 example/src/renderer/examples/hook/components/BaseComponent.tsx rename example/src/renderer/examples/{hooks/base => hook/components}/BaseRenderChannel.tsx (83%) create mode 100644 example/src/renderer/examples/hook/components/BaseRenderUsers.tsx create mode 100644 example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx rename example/src/renderer/examples/{hooks => hook}/index.ts (100%) delete mode 100644 example/src/renderer/examples/hooks/DeviceManager/DeviceManager.tsx delete mode 100644 example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx delete mode 100644 example/src/renderer/examples/hooks/JoinChannelVideo/JoinChannelVideo.tsx delete mode 100644 example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx delete mode 100644 example/src/renderer/examples/hooks/StringUid/StringUid.tsx delete mode 100644 example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx delete mode 100644 example/src/renderer/examples/hooks/base/BaseRenderUsers.tsx delete mode 100644 example/src/renderer/hook/useInitRtcEngine.tsx diff --git a/example/README.md b/example/README.md index 90f920f1e..544d19feb 100644 --- a/example/README.md +++ b/example/README.md @@ -57,12 +57,12 @@ cd example && yarn link "agora-electron-sdk" | Demo | Description | APIs | | ---------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| [JoinChannelAudio](src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx) | basic demo to show audio call | getAudioDeviceManager, setAudioProfile,setRecordingDevice, adjustRecordingSignalVolume, adjustAudioMixingPlayoutVolume, adjustPlaybackSignalVolume | -| [JoinChannelVideo](src/renderer/examples/hooks/JoinChannelVideo/JoinChannelVideo.tsx) | video demo with role selection in Editor Inspector | enableVideo, getVideoDeviceManager,setChannelProfile, joinChannelEx, setAudioProfile, setVideoEncoderConfiguration | -| [StringUid](src/renderer/examples/hooks/StringUid/StringUid.tsx) | basic demo with string uid | joinChannelWithUserAccount | -| [JoinMultipleChannel](src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx) | Joins a channel with the connection ID | joinChannelEx, updateChannelMediaOptionsEx | -| [DeviceManager](src/renderer/examples/hooks/DeviceManager/DeviceManager.tsx) | Management tool that can switch microphone and camera | getVideoDeviceManager, getAudioDeviceManager | -| [VirtualBackground](src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx) | Enables/Disables the virtual background (beta feature) | enableExtension, enableVirtualBackground | +| [JoinChannelAudio](src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx) | basic demo to show audio call | getAudioDeviceManager, setAudioProfile,setRecordingDevice, adjustRecordingSignalVolume, adjustAudioMixingPlayoutVolume, adjustPlaybackSignalVolume | +| [JoinChannelVideo](src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx) | video demo with role selection in Editor Inspector | enableVideo, getVideoDeviceManager,setChannelProfile, joinChannelEx, setAudioProfile, setVideoEncoderConfiguration | +| [StringUid](src/renderer/examples/hook/StringUid/StringUid.tsx) | basic demo with string uid | joinChannelWithUserAccount | +| [JoinMultipleChannel](src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx) | Joins a channel with the connection ID | joinChannelEx, updateChannelMediaOptionsEx | +| [DeviceManager](src/renderer/examples/hook/DeviceManager/DeviceManager.tsx) | Management tool that can switch microphone and camera | getVideoDeviceManager, getAudioDeviceManager | +| [VirtualBackground](src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx) | Enables/Disables the virtual background (beta feature) | enableExtension, enableVirtualBackground | ## 👏 Feedback diff --git a/example/src/renderer/App.tsx b/example/src/renderer/App.tsx index 0c4b45b77..5e93d5ec9 100644 --- a/example/src/renderer/App.tsx +++ b/example/src/renderer/App.tsx @@ -13,7 +13,7 @@ import { Layout, Menu } from 'antd'; import './App.global.scss'; import AuthInfoScreen from './examples/config/AuthInfoScreen'; import basicRoute from './examples/basic'; -import hooksRoutes from './examples/hooks'; +import hooksRoutes from './examples/hook'; import advanceRoute from './examples/advanced'; const { Content, Footer, Sider } = Layout; diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index 4d0f925cb..1c22d9f42 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -1,4 +1,4 @@ -import React, { Component, ReactNode } from 'react'; +import React, { Component, ReactElement, ReactNode } from 'react'; import { ErrorCodeType, IRtcEngine, @@ -7,12 +7,13 @@ import { RtcStats, UserOfflineReasonType, } from 'agora-electron-sdk'; -import { Card, List } from 'antd'; import AgoraStyle from '../examples/config/public.scss'; import { AgoraButton, + AgoraCard, AgoraDivider, + AgoraList, AgoraText, AgoraTextInput, AgoraView, @@ -180,37 +181,14 @@ export abstract class BaseComponent< } protected renderUsers(): ReactNode { - const { - enableVideo, - startPreview, - channelId, - joinChannelSuccess, - remoteUsers, - } = this.state; + const { startPreview, joinChannelSuccess, remoteUsers } = this.state; return ( <> {startPreview || joinChannelSuccess ? ( - { - return this.renderVideo(item, channelId); + return this.renderVideo(item); }} /> ) : undefined} @@ -218,19 +196,17 @@ export abstract class BaseComponent< ); } - protected renderVideo(uid: number, channelId?: string): ReactNode { + protected renderVideo(uid: number): ReactElement { const { enableVideo } = this.state; return ( - - - {enableVideo ? ( - <> - Click view to mirror - - - ) : undefined} - - + + {enableVideo ? ( + <> + Click view to mirror + + + ) : undefined} + ); } diff --git a/example/src/renderer/components/RtcSurfaceView/index.scss b/example/src/renderer/components/RtcSurfaceView/index.scss index 167bfe43d..b1974ce34 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.scss +++ b/example/src/renderer/components/RtcSurfaceView/index.scss @@ -1,11 +1,9 @@ .window-item { - width: 320px; - height: 240px; + flex: 1; } .video-item { - width: 320px; - height: 240px; + flex: 1; background: #cccccc; overflow: hidden; } diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index 9074f80cd..3d99b19a8 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -2,21 +2,26 @@ import React, { useEffect, useState } from 'react'; import { Button, ButtonProps, - DividerProps, + Card, + CardProps, Divider, - InputProps, + DividerProps, + Dropdown, + DropdownProps, + Image, + ImageProps, Input, + InputProps, + List, + ListProps, + Menu, Slider, SliderSingleProps, - SwitchProps, Switch, - ImageProps, - Image, - Dropdown, - DropdownProps, - Menu, + SwitchProps, } from 'antd'; import { DownOutlined } from '@ant-design/icons'; +import { ListItemProps } from 'antd/lib/list'; export const AgoraView = ( props: React.DetailedHTMLProps< @@ -74,11 +79,12 @@ export const AgoraDivider = (props: DividerProps) => { export const AgoraTextInput = ( props: InputProps & { + numberKeyboard?: boolean; editable?: boolean; onChangeText?: (text: string) => void; } ) => { - const { value, editable, onChangeText, ...others } = props; + const { value, numberKeyboard, editable, onChangeText, ...others } = props; const [_value, setValue] = useState(value); @@ -91,6 +97,7 @@ export const AgoraTextInput = ( { setValue(text); @@ -186,6 +193,35 @@ export const AgoraImage = ( ); }; +export const AgoraListItem = (props: ListItemProps) => { + return ; +}; + +export function AgoraList( + props: Omit, 'dataSource'> & { data: T[] } +) { + const { data, renderItem, ...others } = props; + return ( + { + return ( + + {renderItem ? renderItem(item, index) : undefined} + + ); + }} + /> + ); +} + +export const AgoraCard = (props: CardProps) => { + return ; +}; + export interface AgoraDropdownItem { label: string; value: any; diff --git a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx index 614b556db..7014ebf27 100644 --- a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx +++ b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx @@ -222,6 +222,7 @@ export default class AudioMixing cycle: text === '' ? this.createState().cycle : +text, }); }} + numberKeyboard={true} placeholder={`cycle (defaults: ${this.createState().cycle})`} /> diff --git a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx index 49322d52b..c9a867dab 100644 --- a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx +++ b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx @@ -203,6 +203,7 @@ export default class AudioSpectrum text === '' ? this.createState().intervalInMS : +text, }); }} + numberKeyboard={true} placeholder={`intervalInMS (defaults: ${ this.createState().intervalInMS })`} diff --git a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx index 272c8bed6..846a6226e 100644 --- a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx +++ b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx @@ -15,12 +15,7 @@ import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import { - AgoraButton, - AgoraDivider, - AgoraText, - AgoraTextInput, -} from '../../../components/ui'; +import { AgoraButton, AgoraText, AgoraTextInput } from '../../../components/ui'; interface State extends BaseVideoComponentState { destChannelNames: string[]; diff --git a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx index c8a1808a9..e26f58b29 100644 --- a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx +++ b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx @@ -195,6 +195,7 @@ export default class ContentInspect interval: text === '' ? this.createState().interval : +text, }); }} + numberKeyboard={true} placeholder={`interval (defaults: ${this.createState().interval})`} /> diff --git a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx index aafc0fb03..bd0155aca 100644 --- a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx @@ -250,10 +250,6 @@ export default class DeviceManager this.setState(state); } - onMediaDeviceChanged(deviceType: MediaDeviceType) { - this.info('onMediaDeviceChanged', 'deviceType', deviceType); - } - onAudioDeviceStateChanged( deviceId: string, deviceType: MediaDeviceType, diff --git a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx index 877bc73d6..38d845c9e 100644 --- a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx +++ b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx @@ -274,6 +274,7 @@ export default class DirectCdnStreaming width: text === '' ? this.createState().width : +text, }); }} + numberKeyboard={true} placeholder={`width (defaults: ${this.createState().width})`} /> @@ -294,6 +296,7 @@ export default class DirectCdnStreaming frameRate: text === '' ? this.createState().frameRate : +text, }); }} + numberKeyboard={true} placeholder={`frameRate (defaults: ${this.createState().frameRate})`} /> +value), }); }} + numberKeyboard={true} placeholder={'encryptionKdfSalt (split by blank)'} value={encryptionKdfSalt.join(' ')} /> diff --git a/example/src/renderer/examples/advanced/Extension/Extension.tsx b/example/src/renderer/examples/advanced/Extension/Extension.tsx index d29a665f1..bd283a188 100644 --- a/example/src/renderer/examples/advanced/Extension/Extension.tsx +++ b/example/src/renderer/examples/advanced/Extension/Extension.tsx @@ -193,15 +193,17 @@ export default class Extension const { path, provider, extension } = this.state; return ( <> - { - this.setState({ - path: text, - }); - }} - placeholder={'path'} - value={path} - /> + {process.platform === 'win32' ? ( + { + this.setState({ + path: text, + }); + }} + placeholder={'path'} + value={path} + /> + ) : undefined} { this.setState({ diff --git a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx index 42b109b30..89d1a0e10 100644 --- a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { ReactElement } from 'react'; import { ChannelProfileType, ClientRoleType, @@ -11,7 +11,6 @@ import { RtcStats, UserOfflineReasonType, } from 'agora-electron-sdk'; -import { Card, List } from 'antd'; import Config from '../../../config/agora.config'; @@ -19,7 +18,13 @@ import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import { AgoraButton, AgoraText, AgoraTextInput } from '../../../components/ui'; +import { + AgoraButton, + AgoraCard, + AgoraList, + AgoraText, + AgoraTextInput, +} from '../../../components/ui'; import RtcSurfaceView from '../../../components/RtcSurfaceView'; interface State extends BaseVideoComponentState { @@ -368,6 +373,7 @@ export default class JoinMultipleChannel uid: text === '' ? this.createState().uid : +text, }); }} + numberKeyboard={true} placeholder={`uid (must > 0)`} value={uid > 0 ? uid.toString() : ''} /> @@ -391,6 +397,7 @@ export default class JoinMultipleChannel uid2: text === '' ? this.createState().uid2 : +text, }); }} + numberKeyboard={true} placeholder={`uid2 (must > 0)`} value={uid2 > 0 ? uid2.toString() : ''} /> @@ -409,6 +416,8 @@ export default class JoinMultipleChannel startPreview, channelId, channelId2, + uid, + uid2, joinChannelSuccess, joinChannelSuccess2, remoteUsers, @@ -417,22 +426,13 @@ export default class JoinMultipleChannel return ( <> {startPreview || joinChannelSuccess || joinChannelSuccess2 ? ( - { return this.renderVideo( item, - remoteUsers2.indexOf(item) === -1 ? channelId : channelId2 + remoteUsers2.indexOf(item) === -1 ? channelId : channelId2, + remoteUsers2.indexOf(item) === -1 ? uid : uid2 ); }} /> @@ -441,14 +441,16 @@ export default class JoinMultipleChannel ); } - protected renderVideo(uid: number, channelId?: string): React.ReactNode { + protected renderVideo( + uid: number, + channelId?: string, + localUid?: number + ): ReactElement { return ( - - - Click view to mirror - - - + + Click view to mirror + + ); } diff --git a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx index 0c519e389..6c8cd0e10 100644 --- a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx +++ b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx @@ -190,6 +190,7 @@ export default class LocalSpatialAudioEngine range: text === '' ? this.createState().range : +text, }); }} + numberKeyboard={true} placeholder={`range (defaults: ${this.createState().range})`} /> - - Click view to mirror - - - + + Click view to mirror + + ); } diff --git a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx index 65565e931..686c4375f 100644 --- a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx +++ b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx @@ -333,6 +333,7 @@ export default class MediaPlayer loopCount: text === '' ? this.createState().loopCount : +text, }); }} + numberKeyboard={true} placeholder={`loopCount (defaults: ${this.createState().loopCount})`} /> { const { musicChartId, page, pageSize } = this.state; - if (!musicChartId) { + if (musicChartId < 0) { this.error(`musicChartId is invalid`); } this.musicContentCenter?.getMusicCollectionByMusicChartId( - musicChartId!, + musicChartId, page, pageSize ); @@ -153,7 +153,7 @@ export default class MusicContentCenter this.error(`songCode is invalid`); } - this.musicContentCenter?.preload(songCode!); + this.musicContentCenter?.preload(songCode); }; /** @@ -175,7 +175,7 @@ export default class MusicContentCenter } this.createMusicPlayer(); - this.player?.openWithSongCode(songCode!, 0); + this.player?.openWithSongCode(songCode, 0); }; /** @@ -300,7 +300,7 @@ export default class MusicContentCenter case MediaPlayerState.PlayerStateOpenCompleted: this.setState({ open: true, - duration: this.player?.getDuration()!, + duration: this.player?.getDuration() ?? 0, }); break; case MediaPlayerState.PlayerStatePlaying: diff --git a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx index 960db1ff8..c57416d0c 100644 --- a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx +++ b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx @@ -202,6 +202,7 @@ export default class PlayEffect soundId: text === '' ? this.createState().soundId : +text, }); }} + numberKeyboard={true} placeholder={`soundId (defaults: ${this.createState().soundId})`} /> diff --git a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx index 277cb570b..da89a7234 100644 --- a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx +++ b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx @@ -374,6 +374,7 @@ export default class RTMPStreaming width: text === '' ? this.createState().width : +text, }); }} + numberKeyboard={true} placeholder={`width (defaults: ${this.createState().width})`} /> @@ -395,6 +397,7 @@ export default class RTMPStreaming text === '' ? this.createState().videoBitrate : +text, }); }} + numberKeyboard={true} placeholder={`videoBitrate (defaults: ${ this.createState().videoBitrate })`} @@ -407,6 +410,7 @@ export default class RTMPStreaming text === '' ? this.createState().videoFramerate : +text, }); }} + numberKeyboard={true} placeholder={`videoFramerate (defaults: ${ this.createState().videoFramerate })`} @@ -418,6 +422,7 @@ export default class RTMPStreaming videoGop: text === '' ? this.createState().videoGop : +text, }); }} + numberKeyboard={true} placeholder={`videoGop (defaults: ${ this.createState().videoGop })`} @@ -471,6 +476,7 @@ export default class RTMPStreaming text === '' ? this.createState().audioBitrate : +text, }); }} + numberKeyboard={true} placeholder={`audioBitrate (defaults: ${ this.createState().audioBitrate })`} diff --git a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx index 82dc2d639..545e583cc 100644 --- a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx @@ -447,6 +447,7 @@ export default class ScreenShare uid2: text === '' ? this.createState().uid2 : +text, }); }} + numberKeyboard={true} placeholder={`uid2 (must > 0)`} value={uid2 > 0 ? uid2.toString() : ''} /> @@ -458,6 +459,7 @@ export default class ScreenShare width: text === '' ? this.createState().width : +text, }); }} + numberKeyboard={true} placeholder={`width (defaults: ${this.createState().width})`} /> @@ -477,6 +480,7 @@ export default class ScreenShare frameRate: text === '' ? this.createState().frameRate : +text, }); }} + numberKeyboard={true} placeholder={`frameRate (defaults: ${this.createState().frameRate})`} /> {targetSource?.type === diff --git a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx index a027e213b..8f7684b07 100644 --- a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx +++ b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx @@ -304,6 +304,7 @@ export default class SendMultiVideoStream uid2: text === '' ? this.createState().uid2 : +text, }); }} + numberKeyboard={true} placeholder={`uid2 (must > 0)`} value={uid2 > 0 ? uid2.toString() : ''} /> diff --git a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx index 7ea422953..b4736d023 100644 --- a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx +++ b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import os from 'os'; import { ChannelProfileType, ClientRoleType, @@ -8,6 +7,7 @@ import { IRtcEngineEventHandler, RtcConnection, } from 'agora-electron-sdk'; +import os from 'os'; import Config from '../../../config/agora.config'; diff --git a/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx b/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx index 444a61817..91b9d21a9 100644 --- a/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx +++ b/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx @@ -185,6 +185,7 @@ export default class VideoEncoderConfiguration width: text === '' ? this.createState().width : +text, }); }} + numberKeyboard={true} placeholder={`width (defaults: ${this.createState().width})`} /> @@ -205,6 +207,7 @@ export default class VideoEncoderConfiguration frameRate: text === '' ? this.createState().frameRate : +text, }); }} + numberKeyboard={true} placeholder={`frameRate (defaults: ${this.createState().frameRate})`} /> {startPreview || joinChannelSuccess ? ( - ) : undefined} @@ -190,23 +184,21 @@ export default class JoinChannelVideo ); } - protected renderVideo(uid: number): ReactNode { + protected renderVideo(uid: number): ReactElement { const { enableVideo, remoteUsers } = this.state; return ( - - - Click view to mirror - {enableVideo ? : undefined} - { - this.setState({ - remoteUsers: [...remoteUsers!, uid], - }); - }} - /> - - + + Click view to mirror + {enableVideo ? : undefined} + { + this.setState({ + remoteUsers: [...remoteUsers!, uid], + }); + }} + /> + ); } } diff --git a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx new file mode 100644 index 000000000..e48b8b173 --- /dev/null +++ b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx @@ -0,0 +1,369 @@ +import React, { ReactNode, useCallback, useEffect, useState } from 'react'; +import { + AudioDeviceInfo, + ClientRoleType, + LocalVideoStreamError, + LocalVideoStreamState, + MediaDeviceType, + VideoDeviceInfo, + VideoSourceType, +} from 'agora-electron-sdk'; + +import { + AgoraButton, + AgoraDivider, + AgoraDropdown, + AgoraSlider, + AgoraSwitch, +} from '../../../components/ui'; +import * as log from '../../../utils/log'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import { BaseComponent } from '../components/BaseComponent'; + +export default function DeviceManager() { + const { + channelId, + setChannelId, + token, + uid, + joinChannelSuccess, + remoteUsers, + startPreview, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(true); + + const [playbackDevices, setPlaybackDevices] = useState([]); + const [playbackDeviceId, setPlaybackDeviceId] = useState< + string | undefined + >(); + const [playbackDeviceVolume, setPlaybackDeviceVolume] = useState(100); + const [playbackDeviceMute, setPlaybackDeviceMute] = useState(false); + const [recordingDevices, setRecordingDevices] = useState( + [] + ); + const [recordingDeviceId, setRecordingDeviceId] = useState< + string | undefined + >(); + const [recordingDeviceVolume, setRecordingDeviceVolume] = + useState(100); + const [recordingDeviceMute, setRecordingDeviceMute] = + useState(false); + const [videoDevices, setVideoDevices] = useState([]); + const [videoDeviceId, setVideoDeviceId] = useState(); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3-1: enumerateDevices + */ + const enumerateDevices = useCallback(() => { + const playbackDevices = engine.current + .getAudioDeviceManager() + .enumeratePlaybackDevices(); + const recordingDevices = engine.current + .getAudioDeviceManager() + .enumerateRecordingDevices(); + const videoDevices = engine.current + .getVideoDeviceManager() + .enumerateVideoDevices(); + + setPlaybackDevices(playbackDevices); + setPlaybackDeviceId(() => playbackDevices?.at(0)?.deviceId ?? ''); + setRecordingDevices(recordingDevices); + setRecordingDeviceId(() => recordingDevices?.at(0)?.deviceId ?? ''); + setVideoDevices(videoDevices); + setVideoDeviceId(() => videoDevices?.at(0)?.deviceId ?? ''); + }, [engine]); + + /** + * Step 3-2 (Optional): setDevice + */ + const setDevice = () => { + if (playbackDeviceId) + engine.current + .getAudioDeviceManager() + .setPlaybackDevice(playbackDeviceId); + if (recordingDeviceId) + engine.current + .getAudioDeviceManager() + .setRecordingDevice(recordingDeviceId); + if (videoDeviceId) + engine.current.getVideoDeviceManager().setDevice(videoDeviceId); + }; + + /** + * Step 3-3 (Optional): getDeviceMute + */ + const getDeviceMute = useCallback(() => { + setPlaybackDeviceMute( + engine.current.getAudioDeviceManager().getPlaybackDeviceMute() + ); + setRecordingDeviceMute( + engine.current.getAudioDeviceManager().getRecordingDeviceMute() + ); + }, [engine]); + + /** + * Step 3-4 (Optional): setDeviceMute + */ + const setDeviceMute = () => { + engine.current + .getAudioDeviceManager() + .setPlaybackDeviceMute(playbackDeviceMute!); + engine.current + .getAudioDeviceManager() + .setRecordingDeviceMute(recordingDeviceMute!); + }; + + /** + * Step 3-5 (Optional): getDeviceVolume + */ + const getDeviceVolume = useCallback(() => { + setPlaybackDeviceVolume( + engine.current.getAudioDeviceManager().getPlaybackDeviceVolume() + ); + setRecordingDeviceVolume( + engine.current.getAudioDeviceManager().getRecordingDeviceVolume() + ); + }, [engine]); + + /** + * Step 3-6 (Optional): setDeviceVolume + */ + const setDeviceVolume = () => { + engine.current + .getAudioDeviceManager() + .setPlaybackDeviceVolume(playbackDeviceVolume!); + engine.current + .getAudioDeviceManager() + .setRecordingDeviceVolume(recordingDeviceVolume!); + }; + + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + enumerateDevices(); + getDeviceMute(); + getDeviceVolume(); + }, [enumerateDevices, getDeviceMute, getDeviceVolume]); + + useEffect(() => { + engine.current.addListener( + 'onAudioDeviceStateChanged', + (deviceId: string, deviceType: MediaDeviceType, deviceState: number) => { + log.info( + 'onAudioDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + } + ); + + engine.current.addListener( + 'onAudioDeviceVolumeChanged', + (deviceType: MediaDeviceType, volume: number, muted: boolean) => { + log.info( + 'onAudioDeviceVolumeChanged', + 'deviceType', + deviceType, + 'volume', + volume, + 'muted', + muted + ); + } + ); + + engine.current.addListener( + 'onVideoDeviceStateChanged', + (deviceId: string, deviceType: number, deviceState: number) => { + log.info( + 'onVideoDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + } + ); + + engine.current.addListener( + 'onLocalVideoStateChanged', + ( + source: VideoSourceType, + state: LocalVideoStreamState, + error: LocalVideoStreamError + ) => { + log.info( + 'onLocalVideoStateChanged', + 'source', + source, + 'state', + state, + 'error', + error + ); + } + ); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine]); + + return ( + ( + + )} + renderUsers={() => ( + + )} + /> + ); + + function renderConfiguration(): ReactNode { + return ( + <> + { + return { + value: value.deviceId!, + label: value.deviceName!, + }; + })} + value={playbackDeviceId} + onValueChange={(value, index) => { + setPlaybackDeviceId(playbackDevices?.at(index)?.deviceId); + }} + /> + + { + return { + value: value.deviceId!, + label: value.deviceName!, + }; + })} + value={recordingDeviceId} + onValueChange={(value, index) => { + setRecordingDeviceId(recordingDevices?.at(index)?.deviceId); + }} + /> + + { + return { + value: value.deviceId!, + label: value.deviceName!, + }; + })} + value={videoDeviceId} + onValueChange={(value, index) => { + setVideoDeviceId(videoDevices?.at(index)?.deviceId); + }} + /> + + + + { + setPlaybackDeviceMute(value); + }} + /> + + { + setRecordingDeviceMute(value); + }} + /> + + + { + setPlaybackDeviceVolume(value); + }} + /> + + { + setRecordingDeviceVolume(value); + }} + /> + + + + ); + } +} diff --git a/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx new file mode 100644 index 000000000..08b6c3cd7 --- /dev/null +++ b/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx @@ -0,0 +1,255 @@ +import React, { ReactNode, useEffect, useState } from 'react'; +import { + ClientRoleType, + LocalAudioStreamError, + LocalAudioStreamState, + MediaDeviceType, + RtcConnection, +} from 'agora-electron-sdk'; + +import { AgoraButton, AgoraDivider, AgoraSlider } from '../../../components/ui'; +import * as log from '../../../utils/log'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import { BaseComponent } from '../components/BaseComponent'; + +export default function JoinChannelAudio() { + const { + channelId, + setChannelId, + token, + uid, + joinChannelSuccess, + remoteUsers, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(false); + + const [enableLocalAudio, setEnableLocalAudio] = useState(true); + const [muteLocalAudioStream, setMuteLocalAudioStream] = useState(false); + const [recordingSignalVolume, setRecordingSignalVolume] = useState(100); + const [playbackSignalVolume, setPlaybackSignalVolume] = useState(100); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3-1-1 (Optional): enableLocalAudio + */ + const _enableLocalAudio = () => { + engine.current.enableLocalAudio(true); + setEnableLocalAudio(true); + }; + + /** + * Step 3-1-2 (Optional): disableLocalAudio + */ + const disableLocalAudio = () => { + engine.current.enableLocalAudio(false); + setEnableLocalAudio(false); + }; + + /** + * Step 3-2-1 (Optional): muteLocalAudioStream + */ + const _muteLocalAudioStream = () => { + engine.current.muteLocalAudioStream(true); + setMuteLocalAudioStream(true); + }; + + /** + * Step 3-2-2 (Optional): unmuteLocalAudioStream + */ + const unmuteLocalAudioStream = () => { + engine.current.muteLocalAudioStream(false); + setMuteLocalAudioStream(false); + }; + + /** + * Step 3-3 (Optional): adjustRecordingSignalVolume + */ + const adjustRecordingSignalVolume = () => { + engine.current.adjustRecordingSignalVolume(recordingSignalVolume); + }; + + /** + * Step 3-4 (Optional): adjustPlaybackSignalVolume + */ + const adjustPlaybackSignalVolume = () => { + engine.current.adjustPlaybackSignalVolume(playbackSignalVolume); + }; + + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + engine.current.addListener( + 'onAudioDeviceStateChanged', + (deviceId: string, deviceType: number, deviceState: number) => { + log.info( + 'onAudioDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + } + ); + + engine.current.addListener( + 'onAudioDeviceVolumeChanged', + (deviceType: MediaDeviceType, volume: number, muted: boolean) => { + log.info( + 'onAudioDeviceVolumeChanged', + 'deviceType', + deviceType, + 'volume', + volume, + 'muted', + muted + ); + } + ); + + engine.current.addListener( + 'onLocalAudioStateChanged', + ( + connection: RtcConnection, + state: LocalAudioStreamState, + error: LocalAudioStreamError + ) => { + log.info( + 'onLocalAudioStateChanged', + 'connection', + connection, + 'state', + state, + 'error', + error + ); + } + ); + + engine.current.addListener('onAudioRoutingChanged', (routing: number) => { + log.info('onAudioRoutingChanged', 'routing', routing); + }); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine]); + + return ( + ( + + )} + renderUsers={() => ( + + )} + renderAction={renderAction} + /> + ); + + function renderConfiguration(): ReactNode { + return ( + <> + { + setRecordingSignalVolume(value); + }} + /> + + + { + setPlaybackSignalVolume(value); + }} + /> + + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + + ); + } +} diff --git a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx new file mode 100644 index 000000000..7634e7fbc --- /dev/null +++ b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx @@ -0,0 +1,126 @@ +import React, { useEffect } from 'react'; +import { + ClientRoleType, + LocalVideoStreamError, + LocalVideoStreamState, + VideoSourceType, +} from 'agora-electron-sdk'; + +import * as log from '../../../utils/log'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import { BaseComponent } from '../components/BaseComponent'; + +export default function JoinChannelVideo() { + const { + channelId, + setChannelId, + token, + uid, + joinChannelSuccess, + remoteUsers, + startPreview, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(true); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + engine.current.addListener( + 'onVideoDeviceStateChanged', + (deviceId: string, deviceType: number, deviceState: number) => { + log.info( + 'onVideoDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + } + ); + + engine.current.addListener( + 'onLocalVideoStateChanged', + ( + source: VideoSourceType, + state: LocalVideoStreamState, + error: LocalVideoStreamError + ) => { + log.info( + 'onLocalVideoStateChanged', + 'source', + source, + 'state', + state, + 'error', + error + ); + } + ); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine]); + + return ( + ( + + )} + renderUsers={() => ( + + )} + /> + ); +} diff --git a/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx new file mode 100644 index 000000000..d0a1456fc --- /dev/null +++ b/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -0,0 +1,376 @@ +import React, { + ReactElement, + ReactNode, + useCallback, + useEffect, + useState, +} from 'react'; +import { + ClientRoleType, + RemoteVideoState, + RemoteVideoStateReason, + RtcConnection, + RtcStats, +} from 'agora-electron-sdk'; + +import { + AgoraButton, + AgoraCard, + AgoraList, + AgoraText, + AgoraTextInput, +} from '../../../components/ui'; +import * as log from '../../../utils/log'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import { BaseComponent } from '../components/BaseComponent'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; + +export default function JoinMultipleChannel() { + const { + channelId, + setChannelId, + token, + uid, + setUid, + joinChannelSuccess, + remoteUsers, + setRemoteUsers, + startPreview, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(true); + + const [channelId2, setChannelId2] = useState(''); + const [token2] = useState(''); + const [uid2, setUid2] = useState(0); + const [joinChannelSuccess2, setJoinChannelSuccess2] = + useState(false); + const [remoteUsers2, setRemoteUsers2] = useState([]); + + /** + * Step 2-1: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid <= 0) { + log.error('uid is invalid'); + return; + } + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannelEx( + token, + { + channelId, + localUid: uid, + }, + { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + publishMicrophoneTrack: false, + publishCameraTrack: false, + } + ); + }; + + /** + * Step 2-2: joinChannel2 + */ + const joinChannel2 = () => { + if (!channelId2) { + log.error('channelId2 is invalid'); + return; + } + if (uid2 < 0) { + log.error('uid2 is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannelEx( + token2, + { + channelId: channelId2, + localUid: uid2, + }, + { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + publishMicrophoneTrack: false, + publishCameraTrack: false, + } + ); + }; + + /** + * Step 3-1: publishStreamToChannel + */ + const publishStreamToChannel = () => { + engine.current.updateChannelMediaOptionsEx( + { publishMicrophoneTrack: false, publishCameraTrack: false }, + { + channelId: channelId2, + localUid: uid2, + } + ); + engine.current.updateChannelMediaOptionsEx( + { publishMicrophoneTrack: true, publishCameraTrack: true }, + { + channelId, + localUid: uid, + } + ); + }; + + /** + * Step 3-2: publishStreamToChannel2 + */ + const publishStreamToChannel2 = () => { + engine.current.updateChannelMediaOptionsEx( + { publishMicrophoneTrack: false, publishCameraTrack: false }, + { + channelId, + localUid: uid, + } + ); + engine.current.updateChannelMediaOptionsEx( + { publishMicrophoneTrack: true, publishCameraTrack: true }, + { + channelId: channelId2, + localUid: uid2, + } + ); + }; + + /** + * Step 4-1: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannelEx({ + channelId, + localUid: uid, + }); + }; + + /** + * Step 4-2: leaveChannel2 + */ + const leaveChannel2 = () => { + engine.current.leaveChannelEx({ + channelId: channelId2, + localUid: uid2, + }); + }; + + const onJoinChannelSuccess = useCallback( + (connection: RtcConnection, elapsed: number) => { + if (connection.channelId === channelId2 && connection.localUid === uid2) { + setJoinChannelSuccess2(true); + } + }, + [channelId2, uid2] + ); + + const onLeaveChannel = useCallback( + (connection: RtcConnection, stats: RtcStats) => { + if (connection.channelId === channelId2 && connection.localUid === uid2) { + setJoinChannelSuccess2(false); + setRemoteUsers2([]); + } + // Keep preview after leave channel + engine.current.startPreview(); + }, + [channelId2, engine, uid2] + ); + + const onRemoteVideoStateChanged = useCallback( + ( + connection: RtcConnection, + remoteUid: number, + state: RemoteVideoState, + reason: RemoteVideoStateReason, + elapsed: number + ) => { + log.info( + 'onRemoteVideoStateChanged', + 'connection', + connection, + 'remoteUid', + remoteUid, + 'state', + state, + 'reason', + reason, + 'elapsed', + elapsed + ); + if (state === RemoteVideoState.RemoteVideoStateStarting) { + if (connection.channelId === channelId && connection.localUid === uid) { + setRemoteUsers((prev) => { + return [...prev, remoteUid]; + }); + } else if ( + connection.channelId === channelId2 && + connection.localUid === uid2 + ) { + setRemoteUsers2((prev) => { + return [...prev, remoteUid]; + }); + } + } else if (state === RemoteVideoState.RemoteVideoStateStopped) { + if (connection.channelId === channelId && connection.localUid === uid) { + setRemoteUsers((prev) => { + return prev.filter((value) => value !== remoteUid); + }); + } else if ( + connection.channelId === channelId2 && + connection.localUid === uid2 + ) { + setRemoteUsers2((prev) => { + return prev.filter((value) => value !== remoteUid); + }); + } + } + }, + [channelId, channelId2, setRemoteUsers, uid, uid2] + ); + + useEffect(() => { + engine.current.addListener('onJoinChannelSuccess', onJoinChannelSuccess); + engine.current.addListener('onLeaveChannel', onLeaveChannel); + engine.current.addListener( + 'onRemoteVideoStateChanged', + onRemoteVideoStateChanged + ); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine, onJoinChannelSuccess, onLeaveChannel, onRemoteVideoStateChanged]); + + return ( + + ); + + function renderChannel(): ReactNode { + return ( + <> + { + setChannelId(text); + }} + placeholder={`channelId`} + value={channelId} + /> + { + if (isNaN(+text)) return; + setUid(+text); + }} + numberKeyboard={true} + placeholder={`uid (must > 0)`} + value={uid > 0 ? uid.toString() : ''} + /> + { + joinChannelSuccess ? leaveChannel() : joinChannel(); + }} + /> + { + setChannelId2(text); + }} + placeholder={`channelId2`} + value={channelId2} + /> + { + if (isNaN(+text)) return; + setUid2(+text); + }} + numberKeyboard={true} + placeholder={`uid2 (must > 0)`} + value={uid2 > 0 ? uid2.toString() : ''} + /> + { + joinChannelSuccess2 ? leaveChannel2() : joinChannel2(); + }} + /> + + ); + } + + function renderUsers(): ReactNode { + return ( + <> + {startPreview || joinChannelSuccess || joinChannelSuccess2 ? ( + { + return renderVideo( + item, + remoteUsers2.indexOf(item) === -1 ? channelId : channelId2, + remoteUsers2.indexOf(item) === -1 ? uid : uid2 + ); + }} + /> + ) : undefined} + + ); + } + + function renderVideo( + uid: number, + channelId?: string, + localUid?: number + ): ReactElement { + return ( + + Click view to mirror + + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + + ); + } +} diff --git a/example/src/renderer/examples/hook/StringUid/StringUid.tsx b/example/src/renderer/examples/hook/StringUid/StringUid.tsx new file mode 100644 index 000000000..db7e5c3d8 --- /dev/null +++ b/example/src/renderer/examples/hook/StringUid/StringUid.tsx @@ -0,0 +1,135 @@ +import React, { ReactNode, useEffect, useState } from 'react'; +import { ClientRoleType } from 'agora-electron-sdk'; + +import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import * as log from '../../../utils/log'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import { BaseComponent } from '../components/BaseComponent'; + +export default function StringUid() { + const { + channelId, + setChannelId, + token, + joinChannelSuccess, + remoteUsers, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(false); + + const [userAccount, setUserAccount] = useState(''); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (!userAccount) { + log.error('userAccount is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannelWithUserAccount(token, channelId, userAccount, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3 (Optional): getUserInfoByUserAccount + */ + const getUserInfoByUserAccount = () => { + const userInfo = engine.current.getUserInfoByUserAccount(userAccount); + if (userInfo) { + log.debug('getUserInfoByUserAccount', userInfo); + } else { + log.error('getUserInfoByUserAccount'); + } + }; + + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + engine.current.addListener( + 'onLocalUserRegistered', + (uid: number, userAccount: string) => { + log.info('LocalUserRegistered', 'uid', uid, 'userAccount', userAccount); + } + ); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine]); + + return ( + ( + + )} + renderUsers={() => ( + + )} + renderAction={renderAction} + /> + ); + + function renderConfiguration(): ReactNode { + return ( + <> + { + setUserAccount(text); + }} + placeholder={`userAccount`} + value={userAccount} + /> + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + ); + } +} diff --git a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx new file mode 100644 index 000000000..bd5df58dd --- /dev/null +++ b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx @@ -0,0 +1,206 @@ +import React, { ReactNode, useEffect, useState } from 'react'; +import { + BackgroundBlurDegree, + BackgroundSourceType, + ClientRoleType, +} from 'agora-electron-sdk'; +import { SketchPicker } from 'react-color'; + +import { + AgoraButton, + AgoraDropdown, + AgoraTextInput, +} from '../../../components/ui'; +import * as log from '../../../utils/log'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import { BaseComponent } from '../components/BaseComponent'; +import { enumToItems, getResourcePath } from '../../../utils'; + +export default function VirtualBackground() { + const { + channelId, + setChannelId, + token, + uid, + joinChannelSuccess, + remoteUsers, + startPreview, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(true); + + const [background_source_type, setBackground_source_type] = useState( + BackgroundSourceType.BackgroundColor + ); + const [color, setColor] = useState(0xffffff); + const [source, setSource] = useState(getResourcePath('png.png')); + const [blur_degree, setBlur_degree] = useState( + BackgroundBlurDegree.BlurDegreeMedium + ); + const [enableVirtualBackground, setEnableVirtualBackground] = useState(false); + + useEffect(() => { + engine.current.enableExtension( + 'agora_video_filters_segmentation', + 'portrait_segmentation', + true + ); + }, [engine]); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3-1: enableVirtualBackground + */ + const _enableVirtualBackground = async () => { + if ( + background_source_type === BackgroundSourceType.BackgroundImg && + !source + ) { + log.error('source is invalid'); + return; + } + + engine.current.enableVirtualBackground( + true, + { + background_source_type, + color, + source, + blur_degree, + }, + {} + ); + setEnableVirtualBackground(true); + }; + + /** + * Step 3-2: disableVirtualBackground + */ + const disableVirtualBackground = () => { + engine.current.enableVirtualBackground(false, {}, {}); + setEnableVirtualBackground(false); + }; + + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + return ( + ( + + )} + renderUsers={() => ( + + )} + renderAction={renderAction} + /> + ); + + function renderConfiguration(): ReactNode { + return ( + <> + { + setBackground_source_type(value); + }} + /> + {background_source_type === BackgroundSourceType.BackgroundColor ? ( + { + setColor(+hex.replace('#', '0x')); + }} + color={`#${color?.toString(16)}`} + /> + ) : undefined} + { + setSource(text); + }} + placeholder={'source'} + value={source} + /> + { + setBlur_degree(value); + }} + /> + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + ); + } +} diff --git a/example/src/renderer/examples/hook/components/BaseComponent.tsx b/example/src/renderer/examples/hook/components/BaseComponent.tsx new file mode 100644 index 000000000..746fcc9c8 --- /dev/null +++ b/example/src/renderer/examples/hook/components/BaseComponent.tsx @@ -0,0 +1,42 @@ +import React, { ReactNode } from 'react'; + +import AgoraStyle from '../../../examples/config/public.scss'; +import { AgoraDivider, AgoraView } from '../../../components/ui'; + +interface Props { + name: string; + enableVideo: boolean; + renderConfiguration?: () => ReactNode; + renderChannel: () => ReactNode; + renderUsers?: () => ReactNode; + renderAction?: () => ReactNode; +} + +export function BaseComponent({ + name, + enableVideo, + renderConfiguration, + renderChannel, + renderUsers, + renderAction, +}: Props) { + const configuration = renderConfiguration ? renderConfiguration() : undefined; + return ( + + + {renderUsers ? renderUsers() : undefined} + + + {renderChannel()} + {configuration ? ( + <> + The Configuration of {name} + {configuration} + + ) : undefined} + + {renderAction ? renderAction() : undefined} + + + ); +} diff --git a/example/src/renderer/examples/hooks/base/BaseRenderChannel.tsx b/example/src/renderer/examples/hook/components/BaseRenderChannel.tsx similarity index 83% rename from example/src/renderer/examples/hooks/base/BaseRenderChannel.tsx rename to example/src/renderer/examples/hook/components/BaseRenderChannel.tsx index bf3e74979..2043350e6 100644 --- a/example/src/renderer/examples/hooks/base/BaseRenderChannel.tsx +++ b/example/src/renderer/examples/hook/components/BaseRenderChannel.tsx @@ -1,4 +1,5 @@ import React, { memo } from 'react'; + import { AgoraButton, AgoraTextInput } from '../../../components/ui'; export interface BaseRenderChannelProps { @@ -16,14 +17,11 @@ function BaseRenderChannel({ joinChannelSuccess, onChannelIdChange, }: BaseRenderChannelProps) { - const handleChannelIdChange = (text: string) => { - onChannelIdChange(text); - }; return ( <> { - handleChannelIdChange(text); + onChangeText={(text) => { + onChannelIdChange(text); }} placeholder={`channelId`} value={channelId} diff --git a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx new file mode 100644 index 000000000..f398579b4 --- /dev/null +++ b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx @@ -0,0 +1,38 @@ +import React, { memo, ReactElement } from 'react'; + +import { AgoraCard, AgoraList, AgoraText } from '../../../components/ui'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; + +export interface BaseRenderUsersProps { + renderVideo?: (uid: number) => ReactElement; + startPreview?: boolean; + joinChannelSuccess: boolean; + remoteUsers: number[]; +} + +function BaseRenderUsers({ + renderVideo = (uid) => ( + + Click view to mirror + + + ), + startPreview, + joinChannelSuccess, + remoteUsers, +}: BaseRenderUsersProps) { + return ( + <> + {!!startPreview || joinChannelSuccess ? ( + { + return renderVideo(item); + }} + /> + ) : undefined} + + ); +} + +export default memo(BaseRenderUsers); diff --git a/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx b/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx new file mode 100644 index 000000000..fd7d9e045 --- /dev/null +++ b/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx @@ -0,0 +1,197 @@ +import { useCallback, useEffect, useRef, useState } from 'react'; +import createAgoraRtcEngine, { + ChannelProfileType, + ErrorCodeType, + IRtcEngineEx, + RtcConnection, + RtcStats, + UserOfflineReasonType, +} from 'agora-electron-sdk'; + +import * as log from '../../../utils/log'; + +import Config from '../../../config/agora.config'; + +export function useInitRtcEngine(enableVideo: boolean) { + const [appId] = useState(Config.appId); + const [channelId, setChannelId] = useState(Config.channelId); + const [token] = useState(Config.token); + const [uid, setUid] = useState(Config.uid); + const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); + const [remoteUsers, setRemoteUsers] = useState([]); + const [startPreview, setStartPreview] = useState(false); + + const engine = useRef(createAgoraRtcEngine() as IRtcEngineEx); + + const initRtcEngine = useCallback(async () => { + if (!appId) { + log.error(`appId is invalid`); + } + + engine.current.initialize({ + appId, + logConfig: { filePath: Config.SDKLogPath }, + // Should use ChannelProfileLiveBroadcasting on most of cases + channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, + }); + + // Only need to enable audio on this case + engine.current.enableAudio(); + + if (enableVideo) { + // Need to enable video on this case + // If you only call `enableAudio`, only relay the audio stream to the target channel + engine.current.enableVideo(); + + // Start preview before joinChannel + engine.current.startPreview(); + setStartPreview(true); + } + + if (enableVideo) { + // Start preview before joinChannel + engine.current.startPreview(); + setStartPreview(true); + } + }, [appId, enableVideo]); + + const onError = useCallback((err: ErrorCodeType, msg: string) => { + log.info('onError', 'err', err, 'msg', msg); + }, []); + + const onJoinChannelSuccess = useCallback( + (connection: RtcConnection, elapsed: number) => { + log.info( + 'onJoinChannelSuccess', + 'connection', + connection, + 'elapsed', + elapsed + ); + if ( + connection.channelId === channelId && + (connection.localUid === uid || uid === 0) + ) { + setJoinChannelSuccess(true); + } + }, + [channelId, uid] + ); + + const onLeaveChannel = useCallback( + (connection: RtcConnection, stats: RtcStats) => { + log.info('onLeaveChannel', 'connection', connection, 'stats', stats); + if ( + connection.channelId === channelId && + (connection.localUid === uid || uid === 0) + ) { + setJoinChannelSuccess(false); + setRemoteUsers([]); + } + }, + [channelId, uid] + ); + + const onUserJoined = useCallback( + (connection: RtcConnection, remoteUid: number, elapsed: number) => { + log.info( + 'onUserJoined', + 'connection', + connection, + 'remoteUid', + remoteUid, + 'elapsed', + elapsed + ); + if ( + connection.channelId === channelId && + (connection.localUid === uid || uid === 0) + ) { + setRemoteUsers((prev) => { + if (prev === undefined) return []; + return [...prev, remoteUid]; + }); + } + }, + [channelId, uid] + ); + + const onUserOffline = useCallback( + ( + connection: RtcConnection, + remoteUid: number, + reason: UserOfflineReasonType + ) => { + log.info( + 'onUserOffline', + 'connection', + connection, + 'remoteUid', + remoteUid, + 'reason', + reason + ); + if ( + connection.channelId === channelId && + (connection.localUid === uid || uid === 0) + ) { + setRemoteUsers((prev) => { + if (prev === undefined) return []; + return prev!.filter((value) => value !== remoteUid); + }); + } + }, + [channelId, uid] + ); + + useEffect(() => { + (async () => { + await initRtcEngine(); + })(); + + const engineCopy = engine.current; + return () => { + engineCopy.release(); + }; + }, [engine, initRtcEngine]); + + useEffect(() => { + engine.current.addListener('onError', onError); + engine.current.addListener('onJoinChannelSuccess', onJoinChannelSuccess); + engine.current.addListener('onLeaveChannel', onLeaveChannel); + engine.current.addListener('onUserJoined', onUserJoined); + engine.current.addListener('onUserOffline', onUserOffline); + + const engineCopy = engine.current; + return () => { + engineCopy.removeListener('onError', onError); + engineCopy.removeListener('onJoinChannelSuccess', onJoinChannelSuccess); + engineCopy.removeListener('onLeaveChannel', onLeaveChannel); + engineCopy.removeListener('onUserJoined', onUserJoined); + engineCopy.removeListener('onUserOffline', onUserOffline); + }; + }, [ + engine, + initRtcEngine, + onError, + onJoinChannelSuccess, + onLeaveChannel, + onUserJoined, + onUserOffline, + ]); + + return { + appId, + channelId, + setChannelId, + token, + uid, + setUid, + joinChannelSuccess, + setJoinChannelSuccess, + remoteUsers, + setRemoteUsers, + startPreview, + engine, + }; +} diff --git a/example/src/renderer/examples/hooks/index.ts b/example/src/renderer/examples/hook/index.ts similarity index 100% rename from example/src/renderer/examples/hooks/index.ts rename to example/src/renderer/examples/hook/index.ts diff --git a/example/src/renderer/examples/hooks/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/hooks/DeviceManager/DeviceManager.tsx deleted file mode 100644 index ed67d5184..000000000 --- a/example/src/renderer/examples/hooks/DeviceManager/DeviceManager.tsx +++ /dev/null @@ -1,469 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { - AudioDeviceInfo, - ClientRoleType, - createAgoraRtcEngine, - ErrorCodeType, - IRtcEngine, - LocalVideoStreamError, - LocalVideoStreamState, - MediaDeviceType, - RtcConnection, - RtcStats, - UserOfflineReasonType, - VideoDeviceInfo, - VideoSourceType, -} from 'agora-electron-sdk'; - -import { - AgoraButton, - AgoraDivider, - AgoraDropdown, - AgoraSlider, - AgoraSwitch, - AgoraView, -} from '../../../components/ui'; -import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../../../hook/useInitRtcEngine'; -import AgoraStyle from '../../config/public.scss'; -import BaseRenderUsers from '../base/BaseRenderUsers'; -import BaseRenderChannel from '../base/BaseRenderChannel'; -import Config from '../../../config/agora.config'; - -export default function DeviceManager() { - const [enableAudio] = useState(false); - const [enableVideo] = useState(true); - const [enablePreview] = useState(true); - const engine = useRef(createAgoraRtcEngine()); - - const [channelId, setChannelId] = useState(Config.channelId); - const [uid] = useState(Config.uid); - const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); - const [remoteUsers, setRemoteUsers] = useState([]); - - const [playbackDevices, setPlaybackDevices] = useState([]); - const [playbackDeviceId, setPlaybackDeviceId] = useState(''); - const [playbackDeviceVolume, setPlaybackDeviceVolume] = useState(100); - const [playbackDeviceMute, setPlaybackDeviceMute] = useState(false); - const [recordingDevices, setRecordingDevices] = useState( - [] - ); - const [recordingDeviceId, setRecordingDeviceId] = useState(''); - const [recordingDeviceVolume, setRecordingDeviceVolume] = - useState(100); - const [recordingDeviceMute, setRecordingDeviceMute] = - useState(false); - const [videoDevices, setVideoDevices] = useState([]); - const [videoDeviceId, setVideoDeviceId] = useState(''); - - /** - * Step 1: initRtcEngine - */ - const { token, initRtcEngine, startPreview } = useInitRtcEngine({ - enableAudio, - enableVideo, - enablePreview, - engine: engine.current, - setupOtherExtension: () => { - enumerateDevices(); - getDeviceMute(); - getDeviceVolume(); - }, - }); - - /** - * Step 2: joinChannel - */ - const joinChannel = () => { - if (!channelId) { - log.error('channelId is invalid'); - return; - } - if (uid < 0) { - log.error('uid is invalid'); - return; - } - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannel(token, channelId, uid, { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - }); - }; - - /** - * Step 3-1: enumerateDevices - */ - const enumerateDevices = () => { - const playbackDevices = engine.current - .getAudioDeviceManager() - .enumeratePlaybackDevices(); - const recordingDevices = engine.current - .getAudioDeviceManager() - .enumerateRecordingDevices(); - const videoDevices = engine.current - .getVideoDeviceManager() - .enumerateVideoDevices(); - - setPlaybackDevices(playbackDevices); - setPlaybackDeviceId(() => playbackDevices?.at(0)?.deviceId ?? ''); - setRecordingDevices(recordingDevices); - setRecordingDeviceId(() => recordingDevices?.at(0)?.deviceId ?? ''); - setVideoDevices(videoDevices); - setVideoDeviceId(() => videoDevices?.at(0)?.deviceId ?? ''); - }; - - /** - * Step 3-2 (Optional): setDevice - */ - const setDevice = () => { - if (playbackDeviceId) - engine.current - .getAudioDeviceManager() - .setPlaybackDevice(playbackDeviceId); - if (recordingDeviceId) - engine.current - .getAudioDeviceManager() - .setRecordingDevice(recordingDeviceId); - if (videoDeviceId) - engine.current.getVideoDeviceManager().setDevice(videoDeviceId); - }; - - /** - * Step 3-3 (Optional): getDeviceMute - */ - const getDeviceMute = () => { - setPlaybackDeviceMute( - engine.current.getAudioDeviceManager().getPlaybackDeviceMute() - ); - setRecordingDeviceMute( - engine.current.getAudioDeviceManager().getRecordingDeviceMute() - ); - }; - - /** - * Step 3-4 (Optional): setDeviceMute - */ - const setDeviceMute = () => { - engine.current - .getAudioDeviceManager() - .setPlaybackDeviceMute(playbackDeviceMute!); - engine.current - .getAudioDeviceManager() - .setRecordingDeviceMute(recordingDeviceMute!); - }; - - /** - * Step 3-5 (Optional): getDeviceVolume - */ - const getDeviceVolume = () => { - setPlaybackDeviceVolume( - engine.current.getAudioDeviceManager().getPlaybackDeviceVolume() - ); - setRecordingDeviceVolume( - engine.current.getAudioDeviceManager().getRecordingDeviceVolume() - ); - }; - - /** - * Step 3-6 (Optional): setDeviceVolume - */ - const setDeviceVolume = () => { - engine.current - .getAudioDeviceManager() - .setPlaybackDeviceVolume(playbackDeviceVolume!); - engine.current - .getAudioDeviceManager() - .setRecordingDeviceVolume(recordingDeviceVolume!); - }; - - /** - * Step 4: leaveChannel - */ - const leaveChannel = () => { - engine.current.leaveChannel(); - }; - - useEffect(() => { - engine.current.addListener('onError', (err: ErrorCodeType, msg: string) => { - log.info('onError', 'err', err, 'msg', msg); - }); - - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - log.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - setJoinChannelSuccess(true); - } - ); - - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - log.info('onLeaveChannel', 'connection', connection, 'stats', stats); - setJoinChannelSuccess(false); - setRemoteUsers([]); - setPlaybackDevices([]); - setPlaybackDeviceId(''); - setPlaybackDeviceVolume(100); - setPlaybackDeviceMute(false); - setRecordingDevices([]); - setRecordingDeviceId(''); - setRecordingDeviceVolume(100); - setRecordingDeviceMute(false); - setVideoDevices([]); - setVideoDeviceId(''); - } - ); - - // engine.current.addListener( - // 'onMediaDeviceChanged', - // (deviceType: MediaDeviceType) => { - // log.info('onMediaDeviceChanged', 'deviceType', deviceType); - // } - // ); - - engine.current.addListener( - 'onAudioDeviceStateChanged', - (deviceId: string, deviceType: MediaDeviceType, deviceState: number) => { - log.info( - 'onAudioDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } - ); - - engine.current.addListener( - 'onAudioDeviceVolumeChanged', - (deviceType: MediaDeviceType, volume: number, muted: boolean) => { - log.info( - 'onAudioDeviceVolumeChanged', - 'deviceType', - deviceType, - 'volume', - volume, - 'muted', - muted - ); - } - ); - - engine.current.addListener( - 'onVideoDeviceStateChanged', - (deviceId: string, deviceType: number, deviceState: number) => { - log.info( - 'onVideoDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } - ); - - engine.current.addListener( - 'onLocalVideoStateChanged', - ( - source: VideoSourceType, - state: LocalVideoStreamState, - error: LocalVideoStreamError - ) => { - log.info( - 'onLocalVideoStateChanged', - 'source', - source, - 'state', - state, - 'error', - error - ); - } - ); - - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - log.info( - 'onUserJoined', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'elapsed', - elapsed - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return [...r, remoteUid]; - }); - } - ); - - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - log.info( - 'onUserOffline', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'reason', - reason - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return r.filter((value) => value !== remoteUid); - }); - } - ); - - engine.current.addListener( - 'onLocalUserRegistered', - (uid: number, userAccount: string) => { - log.info('LocalUserRegistered', 'uid', uid, 'userAccount', userAccount); - } - ); - - const engineCopy = engine.current; - return () => { - engineCopy.removeAllListeners(); - }; - }, [initRtcEngine]); - - const onChannelIdChange = useCallback((text) => setChannelId(text), []); - - return ( - - - - - - - The Configuration of DeviceManager - <> - { - return { - value: value.deviceId!, - label: value.deviceName!, - }; - })} - value={playbackDeviceId} - onValueChange={(value, index) => { - setPlaybackDeviceId(() => playbackDevices?.at(0)?.deviceId ?? ''); - }} - /> - - { - return { - value: value.deviceId!, - label: value.deviceName!, - }; - })} - value={recordingDeviceId} - onValueChange={(value, index) => { - setRecordingDeviceId( - () => playbackDevices?.at(0)?.deviceId ?? '' - ); - }} - /> - - { - return { - value: value.deviceId!, - label: value.deviceName!, - }; - })} - value={videoDeviceId} - onValueChange={(value, index) => { - setVideoDeviceId(() => playbackDevices?.at(0)?.deviceId ?? ''); - }} - /> - - - - { - setPlaybackDeviceMute(value); - }} - /> - - { - setRecordingDeviceMute(value); - }} - /> - - - { - setPlaybackDeviceVolume(value); - }} - /> - - { - setRecordingDeviceVolume(value); - }} - /> - - - - - - - ); -} diff --git a/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx deleted file mode 100644 index e6bf21b43..000000000 --- a/example/src/renderer/examples/hooks/JoinChannelAudio/JoinChannelAudio.tsx +++ /dev/null @@ -1,338 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { - ClientRoleType, - createAgoraRtcEngine, - ErrorCodeType, - IRtcEngine, - LocalAudioStreamError, - LocalAudioStreamState, - MediaDeviceType, - RtcConnection, - RtcStats, - UserOfflineReasonType, -} from 'agora-electron-sdk'; - -import { - AgoraButton, - AgoraDivider, - AgoraSlider, - AgoraView, -} from '../../../components/ui'; -import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../../../hook/useInitRtcEngine'; -import AgoraStyle from '../../config/public.scss'; -import BaseRenderUsers from '../base/BaseRenderUsers'; -import BaseRenderChannel from '../base/BaseRenderChannel'; -import Config from '../../../config/agora.config'; - -function JoinChannelAudio() { - const [enableAudio] = useState(true); - const [enableVideo] = useState(false); - const [enablePreview] = useState(false); - const engine = useRef(createAgoraRtcEngine()); - const [channelId, setChannelId] = useState(Config.channelId); - const [uid] = useState(Config.uid); - const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); - const [remoteUsers, setRemoteUsers] = useState([]); - const [enableLocalAudio, setEnableLocalAudio] = useState(true); - const [muteLocalAudioStream, setMuteLocalAudioStream] = - useState(false); - const [recordingSignalVolume, setRecordingSignalVolume] = - useState(100); - const [playbackSignalVolume, setPlaybackSignalVolume] = useState(100); - - /** - * Step 1: initRtcEngine - */ - const { token, initRtcEngine, startPreview } = useInitRtcEngine({ - enableAudio, - enableVideo, - enablePreview, - engine: engine.current, - }); - - /** - * Step 2: joinChannel - */ - const joinChannel = () => { - if (!channelId) { - log.error('channelId is invalid'); - return; - } - if (uid < 0) { - log.error('uid is invalid'); - return; - } - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannel(token, channelId, uid, { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - }); - }; - - /** - * Step 3-1-1 (Optional): enableLocalAudio - */ - const handleEnableLocalAudio = () => { - engine.current.enableLocalAudio(true); - setEnableLocalAudio(true); - }; - - /** - * Step 3-1-2 (Optional): disableLocalAudio - */ - const handleDisableLocalAudio = () => { - engine.current.enableLocalAudio(false); - setEnableLocalAudio(false); - }; - - /** - * Step 3-2-1 (Optional): muteLocalAudioStream - */ - const handleMuteLocalAudioStream = () => { - engine.current.muteLocalAudioStream(true); - setMuteLocalAudioStream(true); - }; - - /** - * Step 3-2-2 (Optional): unmuteLocalAudioStream - */ - const handleUnmuteLocalAudioStream = () => { - engine.current.muteLocalAudioStream(false); - setMuteLocalAudioStream(false); - }; - - /** - * Step 3-3 (Optional): adjustRecordingSignalVolume - */ - const adjustRecordingSignalVolume = () => { - engine.current.adjustRecordingSignalVolume(recordingSignalVolume); - }; - - /** - * Step 3-4 (Optional): adjustPlaybackSignalVolume - */ - const adjustPlaybackSignalVolume = () => { - engine.current.adjustPlaybackSignalVolume(playbackSignalVolume); - }; - - /** - * Step 4: leaveChannel - */ - const leaveChannel = () => { - engine.current.leaveChannel(); - }; - - useEffect(() => { - engine.current.addListener('onError', (err: ErrorCodeType, msg: string) => { - log.info('onError', 'err', err, 'msg', msg); - }); - - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - log.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - setJoinChannelSuccess(true); - } - ); - - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - log.info('onLeaveChannel', 'connection', connection, 'stats', stats); - setJoinChannelSuccess(false); - setRemoteUsers([]); - } - ); - - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - log.info( - 'onUserJoined', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'elapsed', - elapsed - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return [...r, remoteUid]; - }); - } - ); - - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - log.info( - 'onUserOffline', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'reason', - reason - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return r.filter((value) => value !== remoteUid); - }); - } - ); - - engine.current.addListener( - 'onAudioDeviceStateChanged', - (deviceId: string, deviceType: number, deviceState: number) => { - log.info( - 'onAudioDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } - ); - - engine.current.addListener( - 'onAudioDeviceVolumeChanged', - (deviceType: MediaDeviceType, volume: number, muted: boolean) => { - log.info( - 'onAudioDeviceVolumeChanged', - 'deviceType', - deviceType, - 'volume', - volume, - 'muted', - muted - ); - } - ); - - engine.current.addListener( - 'onLocalAudioStateChanged', - ( - connection: RtcConnection, - state: LocalAudioStreamState, - error: LocalAudioStreamError - ) => { - log.info( - 'onLocalAudioStateChanged', - 'connection', - connection, - 'state', - state, - 'error', - error - ); - } - ); - - engine.current.addListener('onAudioRoutingChanged', (routing: number) => { - log.info('onAudioRoutingChanged', 'routing', routing); - }); - - const engineCopy = engine.current; - return () => { - engineCopy.removeAllListeners(); - }; - }, [initRtcEngine]); - - const onChannelIdChange = useCallback((text) => setChannelId(text), []); - - return ( - - - - - - - The Configuration of JoinChannelAudio - <> - { - setRecordingSignalVolume(value); - }} - /> - - - { - setPlaybackSignalVolume(value); - }} - /> - - - - <> - - - - - - ); -} -export default JoinChannelAudio; diff --git a/example/src/renderer/examples/hooks/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/hooks/JoinChannelVideo/JoinChannelVideo.tsx deleted file mode 100644 index 3f7b8778a..000000000 --- a/example/src/renderer/examples/hooks/JoinChannelVideo/JoinChannelVideo.tsx +++ /dev/null @@ -1,302 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { - ChannelProfileType, - ClientRoleType, - createAgoraRtcEngine, - ErrorCodeType, - LocalVideoStreamError, - LocalVideoStreamState, - RtcConnection, - RtcStats, - UserOfflineReasonType, - VideoSourceType, -} from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; - -import RtcSurfaceView from '../../../components/RtcSurfaceView'; -import { Card, List } from 'antd'; - -import { - AgoraButton, - AgoraDivider, - AgoraText, - AgoraTextInput, - AgoraView, -} from '../../../components/ui'; -import AgoraStyle from '../../config/public.scss'; - -export default function JoinChannelVideo() { - const [appId] = useState(Config.appId); - const [enableVideo] = useState(true); - const [channelId, setChannelId] = useState(Config.channelId); - const [token] = useState(Config.token); - const [uid] = useState(Config.uid); - const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); - const [remoteUsers, setRemoteUsers] = useState([]); - const [startPreview, setStartPreview] = useState(false); - - const engine = useRef(createAgoraRtcEngine()); - - /** - * Step 1: initRtcEngine - */ - const initRtcEngine = useCallback(async () => { - if (!appId) { - console.error(`appId is invalid`); - } - - engine.current.initialize({ - appId, - logConfig: { filePath: Config.SDKLogPath }, - // Should use ChannelProfileLiveBroadcasting on most of cases - channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, - }); - // Need to enable video on this case - // If you only call `enableAudio`, only relay the audio stream to the target channel - engine.current.enableVideo(); - - // Start preview before joinChannel - engine.current.startPreview(); - setStartPreview(true); - }, [appId]); - - /** - * Step 2: joinChannel - */ - const joinChannel = () => { - if (!channelId) { - console.error('channelId is invalid'); - return; - } - if (uid < 0) { - console.error('uid is invalid'); - return; - } - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannel(token, channelId, uid, { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - }); - }; - - /** - * Step 3: leaveChannel - */ - const leaveChannel = () => { - engine.current.leaveChannel(); - }; - - useEffect(() => { - initRtcEngine().then(() => { - engine.current.addListener( - 'onError', - (err: ErrorCodeType, msg: string) => { - console.info('onError', 'err', err, 'msg', msg); - } - ); - - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - console.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - setJoinChannelSuccess(true); - } - ); - - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - console.info( - 'onLeaveChannel', - 'connection', - connection, - 'stats', - stats - ); - setJoinChannelSuccess(false); - setRemoteUsers([]); - } - ); - - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - console.info( - 'onUserJoined', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'elapsed', - elapsed - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return [...r, remoteUid]; - }); - } - ); - - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - console.info( - 'onUserOffline', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'reason', - reason - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return r.filter((value) => value !== remoteUid); - }); - } - ); - - engine.current.addListener( - 'onVideoDeviceStateChanged', - (deviceId: string, deviceType: number, deviceState: number) => { - console.info( - 'onVideoDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } - ); - - engine.current.addListener( - 'onLocalVideoStateChanged', - ( - source: VideoSourceType, - state: LocalVideoStreamState, - error: LocalVideoStreamError - ) => { - console.info( - 'onLocalVideoStateChanged', - 'source', - source, - 'state', - state, - 'error', - error - ); - } - ); - }); - - const engineCopy = engine.current; - return () => { - engineCopy.release(); - }; - }, [initRtcEngine]); - - const configuration = renderConfiguration(); - return ( - - {renderUsers()} - - {renderChannel()} - {configuration ? ( - <> - The Configuration of JoinChannelVideo - {configuration} - - ) : undefined} - - {renderAction()} - - - ); - - function renderConfiguration() { - return undefined; - } - - function renderUsers() { - return ( - <> - {startPreview || joinChannelSuccess ? ( - - ) : undefined} - - ); - } - - function renderChannel() { - return ( - <> - { - setChannelId(text); - }} - placeholder={`channelId`} - value={channelId} - /> - { - joinChannelSuccess ? leaveChannel() : joinChannel(); - }} - /> - - ); - } - - function renderAction() { - return undefined; - } - - function renderVideo(uid: number) { - return ( - - - Click view to mirror - {enableVideo ? : undefined} - { - setRemoteUsers([...remoteUsers!, uid]); - }} - /> - - - ); - } -} diff --git a/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx deleted file mode 100644 index ecd802be8..000000000 --- a/example/src/renderer/examples/hooks/JoinMultipleChannel/JoinMultipleChannel.tsx +++ /dev/null @@ -1,391 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - ClientRoleType, - createAgoraRtcEngine, - IRtcEngineEx, - RemoteVideoState, - RemoteVideoStateReason, - RtcConnection, - RtcStats, - UserOfflineReasonType, -} from 'agora-electron-sdk'; - -import { - AgoraButton, - AgoraDivider, - AgoraText, - AgoraTextInput, - AgoraView, -} from '../../../components/ui'; -import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../../../hook/useInitRtcEngine'; -import AgoraStyle from '../../config/public.scss'; -import Config from '../../../config/agora.config'; -import { Card, List } from 'antd'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; - -const renderVideo = (uid: number, channelId?: string): React.ReactNode => { - return ( - - - Click view to mirror - - - - ); -}; - -export default function JoinMultipleChannel() { - const [enableAudio] = useState(false); - const [enableVideo] = useState(true); - const [enablePreview] = useState(true); - const engine = useRef(createAgoraRtcEngine()); - const [channelId, setChannelId] = useState(Config.channelId); - const [channelId2, setChannelId2] = useState(''); - const [token2] = useState(''); - const [uid, setUid] = useState(Config.uid); - const [uid2, setUid2] = useState(0); - const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); - const [remoteUsers, setRemoteUsers] = useState([]); - const [joinChannelSuccess2, setJoinChannelSuccess2] = - useState(false); - const [remoteUsers2, setRemoteUsers2] = useState([]); - - /** - * Step 1: initRtcEngine - */ - const { token, startPreview, initRtcEngine } = useInitRtcEngine({ - enableAudio, - enableVideo, - enablePreview, - engine: engine.current, - }); - - /** - * Step 2-1: joinChannel - */ - const joinChannel = () => { - if (!channelId) { - log.error('channelId is invalid'); - return; - } - if (uid <= 0) { - log.error('uid is invalid'); - return; - } - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannelEx( - token, - { - channelId, - localUid: uid, - }, - { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - publishMicrophoneTrack: false, - publishCameraTrack: false, - } - ); - }; - - /** - * Step 2-2: joinChannel2 - */ - const joinChannel2 = () => { - if (!channelId2) { - log.error('channelId2 is invalid'); - return; - } - if (uid2 < 0) { - log.error('uid2 is invalid'); - return; - } - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannelEx( - token2, - { - channelId: channelId2, - localUid: uid2, - }, - { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - publishMicrophoneTrack: false, - publishCameraTrack: false, - } - ); - }; - - /** - * Step 3-1: publishStreamToChannel - */ - const publishStreamToChannel = () => { - engine.current.updateChannelMediaOptionsEx( - { publishMicrophoneTrack: false, publishCameraTrack: false }, - { - channelId: channelId2, - localUid: uid2, - } - ); - engine.current.updateChannelMediaOptionsEx( - { publishMicrophoneTrack: true, publishCameraTrack: true }, - { - channelId, - localUid: uid, - } - ); - }; - - /** - * Step 3-2: publishStreamToChannel2 - */ - const publishStreamToChannel2 = () => { - engine.current.updateChannelMediaOptionsEx( - { publishMicrophoneTrack: false, publishCameraTrack: false }, - { - channelId, - localUid: uid, - } - ); - engine.current.updateChannelMediaOptionsEx( - { publishMicrophoneTrack: true, publishCameraTrack: true }, - { - channelId: channelId2, - localUid: uid2, - } - ); - }; - - /** - * Step 4-1: leaveChannel - */ - const leaveChannel = () => { - engine.current.leaveChannelEx({ - channelId, - localUid: uid, - }); - }; - - /** - * Step 4-2: leaveChannel2 - */ - const leaveChannel2 = () => { - engine.current.leaveChannelEx({ - channelId: channelId2, - localUid: uid2, - }); - }; - - useEffect(() => { - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - log.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - if (connection.channelId === channelId) { - setJoinChannelSuccess(true); - } else if (connection.channelId === channelId2) { - setJoinChannelSuccess2(true); - } - } - ); - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - log.info('onLeaveChannel', 'connection', connection, 'stats', stats); - if (connection.channelId === channelId) { - setJoinChannelSuccess(false); - setRemoteUsers([]); - } else if (connection.channelId === channelId2) { - setJoinChannelSuccess2(false); - setRemoteUsers2([]); - } - // Keep preview after leave channel - engine.current.startPreview(); - } - ); - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - log.info( - 'onUserJoined', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'elapsed', - elapsed - ); - } - ); - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - log.info( - 'onUserOffline', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'reason', - reason - ); - } - ); - engine.current.addListener( - 'onRemoteVideoStateChanged', - ( - connection: RtcConnection, - remoteUid: number, - state: RemoteVideoState, - reason: RemoteVideoStateReason, - elapsed: number - ) => { - log.info( - 'onRemoteVideoStateChanged', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'state', - state, - 'reason', - reason, - 'elapsed', - elapsed - ); - if (state === RemoteVideoState.RemoteVideoStateStarting) { - if (connection.channelId === channelId) { - setRemoteUsers([...remoteUsers, remoteUid]); - } else if (connection.channelId === channelId2) { - setRemoteUsers([...remoteUsers2, remoteUid]); - } - } else if (state === RemoteVideoState.RemoteVideoStateStopped) { - if (connection.channelId === channelId) { - setRemoteUsers(remoteUsers.filter((value) => value !== remoteUid)); - } else if (connection.channelId === channelId2) { - setRemoteUsers2( - remoteUsers2.filter((value) => value !== remoteUid) - ); - } - } - } - ); - - const engineCopy = engine.current; - return () => { - engineCopy.removeAllListeners(); - }; - }, [initRtcEngine, channelId, channelId2, remoteUsers, remoteUsers2]); - - return ( - - - <> - {startPreview} - {startPreview || joinChannelSuccess || joinChannelSuccess2 ? ( - { - return renderVideo( - item, - remoteUsers2.indexOf(item) === -1 ? channelId : channelId2 - ); - }} - /> - ) : undefined} - - - - <> - { - setChannelId(text); - }} - placeholder={`channelId`} - value={channelId} - /> - { - if (isNaN(+text)) return; - setUid(text === '' ? uid : +text); - }} - placeholder={`uid (must > 0)`} - value={uid > 0 ? uid.toString() : ''} - /> - { - joinChannelSuccess ? leaveChannel() : joinChannel(); - }} - /> - { - setChannelId2(text); - }} - placeholder={`channelId2`} - value={channelId2} - /> - { - if (isNaN(+text)) return; - setUid2(text === '' ? uid2 : +text); - }} - placeholder={`uid2 (must > 0)`} - value={uid2 > 0 ? uid2.toString() : ''} - /> - { - joinChannelSuccess2 ? leaveChannel2() : joinChannel2(); - }} - /> - - - <> - - - - - - ); -} diff --git a/example/src/renderer/examples/hooks/StringUid/StringUid.tsx b/example/src/renderer/examples/hooks/StringUid/StringUid.tsx deleted file mode 100644 index 35c142aff..000000000 --- a/example/src/renderer/examples/hooks/StringUid/StringUid.tsx +++ /dev/null @@ -1,218 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { - ClientRoleType, - createAgoraRtcEngine, - ErrorCodeType, - IRtcEngine, - RtcConnection, - RtcStats, - UserOfflineReasonType, -} from 'agora-electron-sdk'; - -import { - AgoraButton, - AgoraDivider, - AgoraTextInput, - AgoraView, -} from '../../../components/ui'; -import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../../../hook/useInitRtcEngine'; -import AgoraStyle from '../../config/public.scss'; -import BaseRenderUsers from '../base/BaseRenderUsers'; -import BaseRenderChannel from '../base/BaseRenderChannel'; -import Config from '../../../config/agora.config'; - -export default function StringUid() { - const [enableAudio] = useState(true); - const [enableVideo] = useState(false); - const [enablePreview] = useState(false); - const engine = useRef(createAgoraRtcEngine()); - - const [userAccount, setUserAccount] = useState(''); - const [channelId, setChannelId] = useState(Config.channelId); - const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); - const [remoteUsers, setRemoteUsers] = useState([]); - - /** - * Step 1: initRtcEngine - */ - const { token, initRtcEngine, startPreview } = useInitRtcEngine({ - enableAudio, - enableVideo, - enablePreview, - engine: engine.current, - }); - - /** - * Step 2: joinChannel - */ - const joinChannel = () => { - if (!channelId) { - log.error('channelId is invalid'); - return; - } - if (!userAccount) { - log.error('userAccount is invalid'); - return; - } - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannelWithUserAccount(token, channelId, userAccount, { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - }); - }; - - /** - * Step 3 (Optional): getUserInfoByUserAccount - */ - const getUserInfoByUserAccount = () => { - const userInfo = engine.current.getUserInfoByUserAccount(userAccount); - if (userInfo) { - log.debug('getUserInfoByUserAccount', userInfo); - } else { - log.error('getUserInfoByUserAccount'); - } - }; - - /** - * Step 4: leaveChannel - */ - const leaveChannel = () => { - engine.current.leaveChannel(); - }; - - useEffect(() => { - engine.current.addListener('onError', (err: ErrorCodeType, msg: string) => { - log.info('onError', 'err', err, 'msg', msg); - }); - - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - log.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - setJoinChannelSuccess(true); - } - ); - - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - log.info('onLeaveChannel', 'connection', connection, 'stats', stats); - setJoinChannelSuccess(false); - setRemoteUsers([]); - } - ); - - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - log.info( - 'onUserJoined', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'elapsed', - elapsed - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return [...r, remoteUid]; - }); - } - ); - - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - log.info( - 'onUserOffline', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'reason', - reason - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return r.filter((value) => value !== remoteUid); - }); - } - ); - - engine.current.addListener( - 'onLocalUserRegistered', - (uid: number, userAccount: string) => { - log.info('LocalUserRegistered', 'uid', uid, 'userAccount', userAccount); - } - ); - - const engineCopy = engine.current; - return () => { - engineCopy.removeAllListeners(); - }; - }, [initRtcEngine]); - - const onChannelIdChange = useCallback( - (text: string) => setChannelId(text), - [] - ); - - return ( - - - - - - - The Configuration of StringUid - <> - { - setUserAccount(text); - }} - placeholder={`userAccount`} - value={userAccount} - /> - - - <> - - - - - ); -} diff --git a/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx deleted file mode 100644 index d989c1b28..000000000 --- a/example/src/renderer/examples/hooks/VirtualBackground/VirtualBackground.tsx +++ /dev/null @@ -1,293 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { - BackgroundBlurDegree, - BackgroundSourceType, - ClientRoleType, - createAgoraRtcEngine, - ErrorCodeType, - IRtcEngine, - RtcConnection, - RtcStats, - UserOfflineReasonType, -} from 'agora-electron-sdk'; -import { SketchPicker } from 'react-color'; - -import { - AgoraButton, - AgoraDivider, - AgoraDropdown, - AgoraTextInput, - AgoraView, -} from '../../../components/ui'; -import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../../../hook/useInitRtcEngine'; -import AgoraStyle from '../../config/public.scss'; -import BaseRenderUsers from '../base/BaseRenderUsers'; -import BaseRenderChannel from '../base/BaseRenderChannel'; -import Config from '../../../config/agora.config'; -import { enumToItems, getResourcePath } from '../../../utils'; - -export default function VirtualBackground() { - /** - * Step 1: initRtcEngine - */ - const [enableAudio] = useState(false); - const [enableVideo] = useState(true); - const [enablePreview] = useState(true); - const engine = useRef(createAgoraRtcEngine()); - - const [channelId, setChannelId] = useState(Config.channelId); - const [uid] = useState(Config.uid); - const [joinChannelSuccess, setJoinChannelSuccess] = useState(false); - const [remoteUsers, setRemoteUsers] = useState([]); - const [background_source_type, setBackground_source_type] = useState( - BackgroundSourceType.BackgroundColor - ); - const [color, setColor] = useState(0xffffff); - const [source, setSource] = useState(getResourcePath('png.png')); - const [blur_degree, setBlur_degree] = useState( - BackgroundBlurDegree.BlurDegreeMedium - ); - const [enableVirtualBackground, setEnableVirtualBackground] = - useState(false); - - const setupOtherExtension = useCallback(() => { - engine.current.enableExtension( - 'agora_video_filters_segmentation', - 'portrait_segmentation', - true - ); - }, [engine]); - - const { token, initRtcEngine, startPreview } = useInitRtcEngine({ - enableAudio, - enableVideo, - enablePreview, - engine: engine.current, - setupOtherExtension, - }); - - /** - * Step 2: joinChannel - */ - const joinChannel = () => { - if (!channelId) { - log.error('channelId is invalid'); - return; - } - if (uid < 0) { - log.error('uid is invalid'); - return; - } - - // start joining channel - // 1. Users can only see each other after they join the - // same channel successfully using the same app id. - // 2. If app certificate is turned on at dashboard, token is needed - // when joining channel. The channel name and uid used to calculate - // the token has to match the ones used for channel join - engine.current.joinChannel(token, channelId, uid, { - // Make myself as the broadcaster to send stream to remote - clientRoleType: ClientRoleType.ClientRoleBroadcaster, - }); - }; - - /** - * Step 3-1: enableVirtualBackground - */ - const handleEnableVirtualBackground = async () => { - if ( - background_source_type === BackgroundSourceType.BackgroundImg && - !source - ) { - log.error('source is invalid'); - return; - } - - engine.current.enableVirtualBackground( - true, - { - background_source_type, - color, - source, - blur_degree, - }, - {} - ); - setEnableVirtualBackground(true); - }; - - /** - * Step 3-2: disableVirtualBackground - */ - const disableVirtualBackground = () => { - engine.current.enableVirtualBackground(false, {}, {}); - setEnableVirtualBackground(false); - }; - - /** - * Step 4: leaveChannel - */ - const leaveChannel = () => { - engine.current.leaveChannel(); - }; - - useEffect(() => { - engine.current.addListener('onError', (err: ErrorCodeType, msg: string) => { - log.info('onError', 'err', err, 'msg', msg); - }); - - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - log.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - setJoinChannelSuccess(true); - } - ); - - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - log.info('onLeaveChannel', 'connection', connection, 'stats', stats); - setJoinChannelSuccess(false); - setRemoteUsers([]); - } - ); - - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - log.info( - 'onUserJoined', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'elapsed', - elapsed - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return [...r, remoteUid]; - }); - } - ); - - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - log.info( - 'onUserOffline', - 'connection', - connection, - 'remoteUid', - remoteUid, - 'reason', - reason - ); - setRemoteUsers((r) => { - if (r === undefined) return []; - return r.filter((value) => value !== remoteUid); - }); - } - ); - - const engineCopy = engine.current; - return () => { - engineCopy.removeAllListeners(); - }; - }, [initRtcEngine]); - - const onChannelIdChange = useCallback( - (text: string) => setChannelId(text), - [] - ); - - return ( - - - - - - - The Configuration of VirtualBackground - <> - { - setBackground_source_type(value); - }} - /> - {background_source_type === BackgroundSourceType.BackgroundColor ? ( - { - setColor(+hex.replace('#', '0x')); - }} - color={`#${color?.toString(16)}`} - /> - ) : undefined} - { - setSource(text); - }} - placeholder={'source'} - value={source} - /> - { - setBlur_degree(value); - }} - /> - - - <> - <> - - - - - - ); -} diff --git a/example/src/renderer/examples/hooks/base/BaseRenderUsers.tsx b/example/src/renderer/examples/hooks/base/BaseRenderUsers.tsx deleted file mode 100644 index 5c0bcccb0..000000000 --- a/example/src/renderer/examples/hooks/base/BaseRenderUsers.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React, { ReactNode } from 'react'; -import { Card, List } from 'antd'; - -import { AgoraText } from '../../../components/ui'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; - -export interface BaseRenderUsersProps { - enableVideo: boolean; - startPreview?: boolean; - joinChannelSuccess: boolean; - remoteUsers: number[]; -} - -function BaseRenderUsers({ - enableVideo, - startPreview, - joinChannelSuccess, - remoteUsers, -}: BaseRenderUsersProps) { - const renderVideo = (uid: number): ReactNode => { - return ( - - - {enableVideo ? ( - <> - Click view to mirror - - - ) : undefined} - - - ); - }; - return ( - <> - {startPreview || joinChannelSuccess ? ( - { - return renderVideo(item); - }} - /> - ) : undefined} - - ); -} - -export default BaseRenderUsers; diff --git a/example/src/renderer/hook/useInitRtcEngine.tsx b/example/src/renderer/hook/useInitRtcEngine.tsx deleted file mode 100644 index 7bf2a2d28..000000000 --- a/example/src/renderer/hook/useInitRtcEngine.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useCallback, useEffect, useState } from 'react'; -import Config from '../config/agora.config'; -import { ChannelProfileType, IRtcEngine } from 'agora-electron-sdk'; -import * as log from '../utils/log'; - -export interface InitRtcEngineReturn { - appId: string; - token: string; - startPreview: boolean; - initRtcEngine: () => Promise; -} - -export interface InitRtcEngineProps { - enableAudio: boolean; - enableVideo: boolean; - enablePreview: boolean; - engine: IRtcEngine; - setupOtherExtension?: () => void; -} - -export function useInitRtcEngine({ - enableAudio, - enableVideo, - enablePreview, - engine, - setupOtherExtension, -}: InitRtcEngineProps): InitRtcEngineReturn { - const [appId] = useState(Config.appId); - const [token] = useState(Config.token); - const [startPreview, setStartPreview] = useState(false); - const initRtcEngine = useCallback(async () => { - if (!appId) { - log.error(`appId is invalid`); - } - engine.initialize({ - appId, - logConfig: { filePath: Config.SDKLogPath }, - // Should use ChannelProfileLiveBroadcasting on most of cases - channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, - }); - - if (enableAudio) { - // Only need to enable audio on this case - engine.enableAudio(); - } - - if (enableVideo) { - // Need to enable video on this case - // If you only call `enableAudio`, only relay the audio stream to the target channel - engine.enableVideo(); - } - - if (enablePreview) { - // Need to startPreview before joinChannelEx - engine.startPreview(); - setStartPreview(true); - } - typeof setupOtherExtension === 'function' && setupOtherExtension(); - }, [appId]); - - useEffect(() => { - (async () => { - await initRtcEngine(); - })(); - - const engineCopy = engine; - return () => { - engineCopy.release(); - }; - }, [initRtcEngine]); - - return { - appId, - token, - startPreview, - initRtcEngine, - }; -} diff --git a/package.json b/package.json index d16788dc2..6e9940220 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,9 @@ { "rootPath": "./ts/Private" } - ] + ], + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "error" } }, "eslintIgnore": [ From 9a90af53e544158a92d2aef6aa8c0fd156288135 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 13 Apr 2023 23:09:29 +0800 Subject: [PATCH 18/74] chore: optimize examples --- example/src/main/index.js | 3 +- example/src/renderer/App.tsx | 12 +- .../src/renderer/components/BaseComponent.tsx | 6 +- .../components/RtcSurfaceView/index.tsx | 5 +- example/src/renderer/components/ui/index.tsx | 42 +--- .../config => components/ui}/public.scss | 5 + .../config => components/ui}/public.scss.d.ts | 1 + .../advanced/AudioMixing/AudioMixing.tsx | 16 +- .../advanced/AudioSpectrum/AudioSpectrum.tsx | 7 +- .../advanced/BeautyEffect/BeautyEffect.tsx | 6 +- .../ChannelMediaRelay/ChannelMediaRelay.tsx | 7 +- .../ContentInspect/ContentInspect.tsx | 7 +- .../advanced/DeviceManager/DeviceManager.tsx | 7 +- .../DirectCdnStreaming/DirectCdnStreaming.tsx | 11 +- .../EncodedVideoFrame/EncodedVideoFrame.tsx | 10 +- .../advanced/Encryption/Encryption.tsx | 7 +- .../examples/advanced/Extension/Extension.tsx | 7 +- .../JoinMultipleChannel.tsx | 9 +- .../LocalSpatialAudioEngine.tsx | 15 +- .../LocalVideoTranscoder.tsx | 13 +- .../advanced/MediaPlayer/MediaPlayer.tsx | 9 +- .../advanced/MediaRecorder/MediaRecorder.tsx | 8 +- .../MusicContentCenter/MusicContentCenter.tsx | 7 +- .../advanced/PlayEffect/PlayEffect.tsx | 7 +- .../ProcessVideoRawData.tsx | 14 +- .../PushVideoFrame/PushVideoFrame.tsx | 13 +- .../advanced/RTMPStreaming/RTMPStreaming.tsx | 13 +- .../advanced/RhythmPlayer/RhythmPlayer.tsx | 7 +- .../advanced/ScreenShare/ScreenShare.tsx | 12 +- .../advanced/SendMetadata/SendMetadata.tsx | 10 +- .../SendMultiVideoStream.tsx | 11 +- .../advanced/SpatialAudio/SpatialAudio.tsx | 7 +- .../advanced/StreamMessage/StreamMessage.tsx | 10 +- .../advanced/TakeSnapshot/TakeSnapshot.tsx | 10 +- .../VideoEncoderConfiguration.tsx | 11 +- .../VirtualBackground/VirtualBackground.tsx | 7 +- .../advanced/VoiceChanger/VoiceChanger.tsx | 23 +-- .../src/renderer/examples/advanced/index.ts | 34 ++-- .../JoinChannelAudio/JoinChannelAudio.tsx | 7 +- .../JoinChannelVideo/JoinChannelVideo.tsx | 9 +- .../examples/basic/StringUid/StringUid.tsx | 7 +- .../examples/config/AuthInfoScreen/index.tsx | 3 +- .../src/renderer/examples/config/index.tsx | 169 ---------------- .../hook/DeviceManager/DeviceManager.tsx | 8 +- .../JoinChannelAudio/JoinChannelAudio.tsx | 8 +- .../JoinChannelVideo/JoinChannelVideo.tsx | 6 +- .../JoinMultipleChannel.tsx | 18 +- .../examples/hook/StringUid/StringUid.tsx | 8 +- .../VirtualBackground/VirtualBackground.tsx | 10 +- .../hook/components/BaseComponent.tsx | 3 +- .../hook/components/BaseRenderUsers.tsx | 4 +- .../examples/hook/hooks/useInitRtcEngine.tsx | 5 +- example/src/renderer/examples/hook/index.ts | 6 +- example/src/renderer/index.tsx | 1 + example/src/renderer/utils/index.ts | 1 + gulpfile.js | 9 +- package.json | 21 +- scripts/bootstrap.js | 2 +- scripts/build.js | 1 + scripts/buildJS.js | 3 +- scripts/clean.js | 3 +- scripts/downloadPrebuild.js | 6 +- scripts/getConfig.js | 4 +- scripts/synclib.js | 13 +- scripts/util.js | 4 +- scripts/zipBuild.js | 3 +- ts/AgoraSdk.ts | 4 +- ts/Private/AgoraBase.ts | 2 +- ts/Private/IAgoraMediaEngine.ts | 20 +- ts/Private/IAgoraMediaPlayer.ts | 16 +- ts/Private/IAgoraMediaPlayerSource.ts | 4 +- ts/Private/IAgoraRtcEngine.ts | 180 +++++++++--------- ts/Private/IAgoraRtcEngineEx.ts | 32 ++-- .../extension/IAgoraMediaPlayerExtension.ts | 4 +- .../extension/IAgoraRtcEngineExtension.ts | 6 +- ts/Private/impl/AgoraMediaBaseImpl.ts | 6 +- ts/Private/impl/IAgoraMediaEngineImpl.ts | 24 +-- ts/Private/impl/IAgoraMediaPlayerImpl.ts | 26 +-- ts/Private/impl/IAgoraMediaRecorderImpl.ts | 4 +- .../impl/IAgoraMusicContentCenterImpl.ts | 13 +- ts/Private/impl/IAgoraRtcEngineExImpl.ts | 37 ++-- ts/Private/impl/IAgoraRtcEngineImpl.ts | 150 +++++++-------- ts/Private/impl/IAgoraSpatialAudioImpl.ts | 6 +- ts/Private/impl/IAudioDeviceManagerImpl.ts | 4 +- .../internal/AudioDeviceManagerInternal.ts | 3 +- ts/Private/internal/IrisApiEngine.ts | 22 +-- ts/Private/internal/MediaPlayerInternal.ts | 5 +- .../internal/MusicContentCenterInternal.ts | 4 +- ts/Private/internal/RtcEngineExInternal.ts | 18 +- ts/Renderer/GlRenderer/index.ts | 9 +- ts/Renderer/IRenderer.ts | 1 + ts/Renderer/RendererManager.ts | 3 +- ts/Renderer/YUVCanvasRenderer/index.ts | 8 +- yarn.lock | 92 +++++++++ 94 files changed, 683 insertions(+), 771 deletions(-) rename example/src/renderer/{examples/config => components/ui}/public.scss (93%) rename example/src/renderer/{examples/config => components/ui}/public.scss.d.ts (95%) delete mode 100644 example/src/renderer/examples/config/index.tsx diff --git a/example/src/main/index.js b/example/src/main/index.js index 2fa2fdd94..696359900 100644 --- a/example/src/main/index.js +++ b/example/src/main/index.js @@ -1,7 +1,8 @@ -import { app, BrowserWindow, systemPreferences } from 'electron'; import path from 'path'; import { format as formatUrl } from 'url'; +import { BrowserWindow, app, systemPreferences } from 'electron'; + const isDevelopment = process.env.NODE_ENV !== 'production'; app.allowRendererProcessReuse = false; diff --git a/example/src/renderer/App.tsx b/example/src/renderer/App.tsx index 5e93d5ec9..0f8fcfed7 100644 --- a/example/src/renderer/App.tsx +++ b/example/src/renderer/App.tsx @@ -1,20 +1,20 @@ +import { GithubOutlined, SettingOutlined } from '@ant-design/icons'; +import { createAgoraRtcEngine } from 'agora-electron-sdk'; +import { Layout, Menu } from 'antd'; import React from 'react'; import { - BrowserRouter as Router, Link, Redirect, Route, + BrowserRouter as Router, Switch, } from 'react-router-dom'; -import { createAgoraRtcEngine } from 'agora-electron-sdk'; -import { GithubOutlined, SettingOutlined } from '@ant-design/icons'; -import { Layout, Menu } from 'antd'; import './App.global.scss'; -import AuthInfoScreen from './examples/config/AuthInfoScreen'; +import advanceRoute from './examples/advanced'; import basicRoute from './examples/basic'; +import AuthInfoScreen from './examples/config/AuthInfoScreen'; import hooksRoutes from './examples/hook'; -import advanceRoute from './examples/advanced'; const { Content, Footer, Sider } = Layout; const { SubMenu } = Menu; diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index 1c22d9f42..85a6f7f68 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -1,4 +1,3 @@ -import React, { Component, ReactElement, ReactNode } from 'react'; import { ErrorCodeType, IRtcEngine, @@ -7,18 +6,19 @@ import { RtcStats, UserOfflineReasonType, } from 'agora-electron-sdk'; +import React, { Component, ReactElement, ReactNode } from 'react'; -import AgoraStyle from '../examples/config/public.scss'; +import RtcSurfaceView from './RtcSurfaceView'; import { AgoraButton, AgoraCard, AgoraDivider, AgoraList, + AgoraStyle, AgoraText, AgoraTextInput, AgoraView, } from './ui'; -import RtcSurfaceView from './RtcSurfaceView'; export interface BaseComponentState { appId: string; diff --git a/example/src/renderer/components/RtcSurfaceView/index.tsx b/example/src/renderer/components/RtcSurfaceView/index.tsx index b8dd8372a..1876b55e6 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.tsx +++ b/example/src/renderer/components/RtcSurfaceView/index.tsx @@ -1,15 +1,16 @@ -import { Component } from 'react'; import { - createAgoraRtcEngine, IMediaPlayer, IRtcEngineEx, RtcConnection, VideoCanvas, VideoMirrorModeType, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; +import { Component } from 'react'; import { getRandomInt } from '../../utils'; + import styles from './index.scss'; interface Props { diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index 3d99b19a8..1ec724590 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import { DownOutlined } from '@ant-design/icons'; import { Button, ButtonProps, @@ -20,8 +20,10 @@ import { Switch, SwitchProps, } from 'antd'; -import { DownOutlined } from '@ant-design/icons'; import { ListItemProps } from 'antd/lib/list'; +import React, { useEffect, useState } from 'react'; + +import css from './public.scss'; export const AgoraView = ( props: React.DetailedHTMLProps< @@ -314,38 +316,4 @@ export const AgoraDropdown = ( ); }; -export const AgoraStyle = { - fullWidth: { - width: '100%', - }, - fullSize: { - display: 'flex', - flex: 1, - }, - input: { - height: 50, - color: 'black', - }, - videoContainer: { - position: 'absolute', - top: 0, - left: 0, - }, - videoLarge: { - flex: 1, - }, - videoSmall: { - width: 120, - height: 120, - }, - float: { - position: 'absolute', - right: 0, - bottom: 0, - alignItems: 'flex-end', - }, - slider: { - width: '100%', - height: 40, - }, -}; +export const AgoraStyle = css; diff --git a/example/src/renderer/examples/config/public.scss b/example/src/renderer/components/ui/public.scss similarity index 93% rename from example/src/renderer/examples/config/public.scss rename to example/src/renderer/components/ui/public.scss index 8ade10b3c..dd6c8897d 100644 --- a/example/src/renderer/examples/config/public.scss +++ b/example/src/renderer/components/ui/public.scss @@ -42,3 +42,8 @@ } } } + +.fullSize { + display: flex; + flex: 1; +} diff --git a/example/src/renderer/examples/config/public.scss.d.ts b/example/src/renderer/components/ui/public.scss.d.ts similarity index 95% rename from example/src/renderer/examples/config/public.scss.d.ts rename to example/src/renderer/components/ui/public.scss.d.ts index e4db5bd30..6c72352ca 100644 --- a/example/src/renderer/examples/config/public.scss.d.ts +++ b/example/src/renderer/components/ui/public.scss.d.ts @@ -2,6 +2,7 @@ declare namespace PublicScssNamespace { export interface IPublicScss { card: string; content: string; + fullSize: string; require: string; rightBar: string; rightBarBig: string; diff --git a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx index 7014ebf27..e3faedc78 100644 --- a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx +++ b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx @@ -1,25 +1,25 @@ -import React from 'react'; import { AudioMixingReasonType, AudioMixingStateType, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; +import React from 'react'; -import Config from '../../../config/agora.config'; - +import { + BaseAudioComponentState, + BaseComponent, +} from '../../../components/BaseComponent'; import { AgoraButton, AgoraDivider, AgoraSwitch, AgoraTextInput, } from '../../../components/ui'; -import { - BaseAudioComponentState, - BaseComponent, -} from '../../../components/BaseComponent'; +import Config from '../../../config/agora.config'; + import { getResourcePath } from '../../../utils'; interface State extends BaseAudioComponentState { diff --git a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx index c9a867dab..9e241481b 100644 --- a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx +++ b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx @@ -1,13 +1,13 @@ -import React from 'react'; import { AudioSpectrumData, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IAudioSpectrumObserver, IRtcEngineEventHandler, UserAudioSpectrumInfo, + createAgoraRtcEngine, } from 'agora-electron-sdk'; +import React from 'react'; import { CartesianGrid, Line, @@ -16,13 +16,12 @@ import { YAxis, } from 'recharts'; -import Config from '../../../config/agora.config'; - import { BaseAudioComponentState, BaseComponent, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseAudioComponentState { intervalInMS: number; diff --git a/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx b/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx index 14583244b..c016ca410 100644 --- a/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx +++ b/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx @@ -1,13 +1,12 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, LighteningContrastLevel, + createAgoraRtcEngine, } from 'agora-electron-sdk'; -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -19,6 +18,7 @@ import { AgoraDropdown, AgoraSlider, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx index 846a6226e..e14b828ac 100644 --- a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx +++ b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx @@ -1,21 +1,20 @@ -import React from 'react'; import { ChannelMediaRelayError, ChannelMediaRelayEvent, ChannelMediaRelayState, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraText, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { destChannelNames: string[]; diff --git a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx index e26f58b29..6195ed240 100644 --- a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx +++ b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx @@ -1,15 +1,13 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, ContentInspectModule, ContentInspectResult, ContentInspectType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -23,6 +21,7 @@ import { AgoraTextInput, AgoraView, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx index bd0155aca..1dba65797 100644 --- a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx @@ -1,9 +1,7 @@ -import React, { ReactNode } from 'react'; import { AudioDeviceInfo, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, LocalVideoStreamError, LocalVideoStreamState, @@ -12,9 +10,9 @@ import { RtcStats, VideoDeviceInfo, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React, { ReactNode } from 'react'; import { BaseComponent, @@ -27,6 +25,7 @@ import { AgoraSlider, AgoraSwitch, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { playbackDevices?: AudioDeviceInfo[]; diff --git a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx index 38d845c9e..fbb347b4a 100644 --- a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx +++ b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx @@ -1,8 +1,6 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, DegradationPreference, DirectCdnStreamingError, DirectCdnStreamingState, @@ -14,9 +12,9 @@ import { RtcStats, VideoCodecType, VideoMirrorModeType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -30,6 +28,7 @@ import { AgoraTextInput, AgoraView, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { @@ -267,7 +266,7 @@ export default class DirectCdnStreaming { if (isNaN(+text)) return; this.setState({ @@ -278,7 +277,7 @@ export default class DirectCdnStreaming placeholder={`width (defaults: ${this.createState().width})`} /> { if (isNaN(+text)) return; this.setState({ diff --git a/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx b/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx index fd799b700..9c1009552 100644 --- a/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx +++ b/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx @@ -1,8 +1,8 @@ -import React from 'react'; +import { Buffer } from 'buffer'; + import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, EncodedVideoFrameInfo, ExternalVideoSourceType, IRtcEngineEventHandler, @@ -11,16 +11,16 @@ import { RtcConnection, VideoCodecType, VideoFrameType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; -import { Buffer } from 'buffer'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { imageBuffer: string; diff --git a/example/src/renderer/examples/advanced/Encryption/Encryption.tsx b/example/src/renderer/examples/advanced/Encryption/Encryption.tsx index 762e790ff..e7be3c158 100644 --- a/example/src/renderer/examples/advanced/Encryption/Encryption.tsx +++ b/example/src/renderer/examples/advanced/Encryption/Encryption.tsx @@ -1,15 +1,13 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, EncryptionErrorType, EncryptionMode, IRtcEngineEventHandler, RtcConnection, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -22,6 +20,7 @@ import { AgoraText, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/Extension/Extension.tsx b/example/src/renderer/examples/advanced/Extension/Extension.tsx index bd283a188..c6cbd872a 100644 --- a/example/src/renderer/examples/advanced/Extension/Extension.tsx +++ b/example/src/renderer/examples/advanced/Extension/Extension.tsx @@ -1,18 +1,17 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { path: string; diff --git a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx index 89d1a0e10..e3becff6f 100644 --- a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -1,8 +1,6 @@ -import React, { ReactElement } from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, IRtcEngineEx, RemoteVideoState, @@ -10,14 +8,15 @@ import { RtcConnection, RtcStats, UserOfflineReasonType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React, { ReactElement } from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraCard, @@ -25,7 +24,7 @@ import { AgoraText, AgoraTextInput, } from '../../../components/ui'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { channelId2: string; diff --git a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx index 6c8cd0e10..a4c01e3bb 100644 --- a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx +++ b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx @@ -1,13 +1,11 @@ -import React from 'react'; import { AudioScenarioType, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, @@ -21,6 +19,7 @@ import { AgoraTextInput, AgoraView, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { arrayToItems } from '../../../utils'; interface State extends BaseAudioComponentState { @@ -212,7 +211,7 @@ export default class LocalSpatialAudioEngine {position.map((value, index) => ( { if (isNaN(+text)) return; position[index] = +text; @@ -230,7 +229,7 @@ export default class LocalSpatialAudioEngine {axisForward.map((value, index) => ( { if (isNaN(+text)) return; axisForward[index] = +text; @@ -248,7 +247,7 @@ export default class LocalSpatialAudioEngine {axisRight.map((value, index) => ( { if (isNaN(+text)) return; axisRight[index] = +text; @@ -266,7 +265,7 @@ export default class LocalSpatialAudioEngine {axisUp.map((value, index) => ( { if (isNaN(+text)) return; axisUp[index] = +text; diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 86ce4844f..b0a602654 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -1,4 +1,3 @@ -import React from 'react'; import createAgoraRtcEngine, { ChannelProfileType, ClientRoleType, @@ -16,14 +15,13 @@ import createAgoraRtcEngine, { VideoDeviceInfo, VideoSourceType, } from 'agora-electron-sdk'; +import React, { ReactElement } from 'react'; -import Config from '../../../config/agora.config'; - -import { getResourcePath } from '../../../utils'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraCard, @@ -33,8 +31,9 @@ import { AgoraText, AgoraTextInput, } from '../../../components/ui'; -import { Card, List } from 'antd'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import Config from '../../../config/agora.config'; + +import { getResourcePath } from '../../../utils'; import { rgbImageBufferToBase64 } from '../../../utils/base64'; interface State extends BaseVideoComponentState { @@ -416,7 +415,7 @@ export default class LocalVideoTranscoder } } - protected renderVideo(uid: number, channelId?: string): React.ReactNode { + protected renderVideo(uid: number, channelId?: string): ReactElement { const { startLocalVideoTranscoder } = this.state; const sourceType = uid === 0 diff --git a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx index 686c4375f..c7e79ba57 100644 --- a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx +++ b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx @@ -1,6 +1,4 @@ -import React from 'react'; import { - createAgoraRtcEngine, IMediaPlayer, IMediaPlayerSourceObserver, IRtcEngineEventHandler, @@ -8,21 +6,22 @@ import { MediaPlayerEvent, MediaPlayerState, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseComponentState, } from '../../../components/BaseComponent'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraDivider, AgoraSlider, AgoraTextInput, } from '../../../components/ui'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import Config from '../../../config/agora.config'; interface State extends BaseComponentState { url: string; diff --git a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx index e35aaedad..a79898ca4 100644 --- a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx +++ b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx @@ -1,9 +1,8 @@ -import React from 'react'; import os from 'os'; + import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IMediaRecorder, IMediaRecorderObserver, IRtcEngineEventHandler, @@ -12,9 +11,9 @@ import { RecorderErrorCode, RecorderInfo, RecorderState, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -27,6 +26,7 @@ import { AgoraSlider, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx index 4a92794bd..e681de0e2 100644 --- a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx +++ b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx @@ -1,6 +1,4 @@ -import React from 'react'; import { - createAgoraRtcEngine, IMediaPlayerSourceObserver, IMusicContentCenter, IMusicContentCenterEventHandler, @@ -13,9 +11,9 @@ import { MusicCollection, MusicContentCenterStatusCode, PreloadStatusCode, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -28,6 +26,7 @@ import { AgoraSlider, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseComponentState { rtmAppId: string; diff --git a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx index c57416d0c..c70fe482e 100644 --- a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx +++ b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx @@ -1,12 +1,10 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, @@ -19,6 +17,7 @@ import { AgoraSwitch, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { getResourcePath } from '../../../utils'; interface State extends BaseAudioComponentState { diff --git a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx index 15712030f..bccc82163 100644 --- a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx +++ b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx @@ -1,22 +1,22 @@ -import React from 'react'; +import fs from 'fs'; +import os from 'os'; +import path from 'path'; + import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; import download from 'download'; -import fs from 'fs'; -import os from 'os'; -import path from 'path'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; import { AgoraButton } from '../../../components/ui'; +import Config from '../../../config/agora.config'; const ffi = require('ffi-napi'); const Pointer = 'uint64'; diff --git a/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx b/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx index fda706d19..5097593b3 100644 --- a/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx +++ b/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx @@ -1,25 +1,24 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, ExternalVideoSourceType, IRtcEngineEventHandler, IRtcEngineEx, - VideoBufferType, - VideoPixelFormat, - ScreenCaptureSourceInfo, RtcConnection, RtcStats, + ScreenCaptureSourceInfo, + VideoBufferType, + VideoPixelFormat, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraDropdown, AgoraImage } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { rgbImageBufferToBase64 } from '../../../utils/base64'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx index da89a7234..13d05e516 100644 --- a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx +++ b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx @@ -1,23 +1,21 @@ -import React from 'react'; import { AudioCodecProfileType, AudioSampleRateType, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, LiveTranscoding, - RtmpStreamingEvent, RtmpStreamPublishErrorType, RtmpStreamPublishState, + RtmpStreamingEvent, TranscodingUser, VideoCodecProfileType, VideoCodecTypeForStream, + createAgoraRtcEngine, } from 'agora-electron-sdk'; +import React from 'react'; import { SketchPicker } from 'react-color'; -import Config from '../../../config/agora.config'; - import { BaseComponent, BaseVideoComponentState, @@ -33,6 +31,7 @@ import { AgoraTextInput, AgoraView, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { @@ -367,7 +366,7 @@ export default class RTMPStreaming { if (isNaN(+text)) return; this.setState({ @@ -378,7 +377,7 @@ export default class RTMPStreaming placeholder={`width (defaults: ${this.createState().width})`} /> { if (isNaN(+text)) return; this.setState({ diff --git a/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx b/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx index d27abe363..2496c39ee 100644 --- a/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx +++ b/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx @@ -1,16 +1,14 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, RhythmPlayerErrorType, RhythmPlayerStateType, RtcConnection, RtcStats, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, @@ -22,6 +20,7 @@ import { AgoraSlider, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { getResourcePath } from '../../../utils'; interface State extends BaseAudioComponentState { diff --git a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx index 545e583cc..a6d640636 100644 --- a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx @@ -1,8 +1,6 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, IRtcEngineEx, LocalVideoStreamError, @@ -11,17 +9,19 @@ import { RtcConnection, RtcStats, ScreenCaptureSourceInfo, + ScreenCaptureSourceType, UserOfflineReasonType, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; +import React from 'react'; import { SketchPicker } from 'react-color'; -import Config from '../../../config/agora.config'; - import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraDivider, @@ -32,9 +32,9 @@ import { AgoraTextInput, AgoraView, } from '../../../components/ui'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import Config from '../../../config/agora.config'; + import { rgbImageBufferToBase64 } from '../../../utils/base64'; -import { ScreenCaptureSourceType } from '../../../../../../ts/Private/IAgoraRtcEngine'; interface State extends BaseVideoComponentState { token2: string; diff --git a/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx b/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx index 07ec874d0..3bf5afba0 100644 --- a/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx +++ b/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx @@ -1,23 +1,23 @@ -import React from 'react'; +import { Buffer } from 'buffer'; + import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IMetadataObserver, IRtcEngineEventHandler, Metadata, MetadataType, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; -import { Buffer } from 'buffer'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { metadataBuffer: string; diff --git a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx index 8f7684b07..bc8ff196b 100644 --- a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx +++ b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx @@ -1,13 +1,11 @@ -import React from 'react'; import { AudioFrame, AudioPcmFrame, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IAudioFrameObserver, - IMediaPlayer, IAudioPcmFrameSink, + IMediaPlayer, IMediaPlayerSourceObserver, IMediaPlayerVideoFrameObserver, IRtcEngineEventHandler, @@ -19,16 +17,17 @@ import { UserOfflineReasonType, VideoFrame, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState { token2: string; diff --git a/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx b/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx index 45f6357ae..4992ffdfd 100644 --- a/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx +++ b/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx @@ -1,13 +1,11 @@ -import React from 'react'; import { AudioScenarioType, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, @@ -20,6 +18,7 @@ import { AgoraSlider, AgoraSwitch, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { arrayToItems } from '../../../utils'; interface State extends BaseAudioComponentState { diff --git a/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx b/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx index 21f31f00d..03270952f 100644 --- a/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx +++ b/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx @@ -1,14 +1,13 @@ -import React from 'react'; +import { Buffer } from 'buffer'; + import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, RtcConnection, + createAgoraRtcEngine, } from 'agora-electron-sdk'; -import { Buffer } from 'buffer'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, @@ -21,6 +20,7 @@ import { AgoraText, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseAudioComponentState { syncWithAudio: boolean; diff --git a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx index b4736d023..af811b377 100644 --- a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx +++ b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx @@ -1,15 +1,14 @@ -import React from 'react'; +import os from 'os'; + import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, ErrorCodeType, IRtcEngineEventHandler, RtcConnection, + createAgoraRtcEngine, } from 'agora-electron-sdk'; -import os from 'os'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -21,6 +20,7 @@ import { AgoraDropdown, AgoraImage, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { arrayToItems } from '../../../utils'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx b/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx index 91b9d21a9..9ee26285a 100644 --- a/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx +++ b/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx @@ -1,16 +1,14 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, DegradationPreference, IRtcEngineEventHandler, OrientationMode, VideoCodecType, VideoMirrorModeType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseComponent, @@ -24,6 +22,7 @@ import { AgoraTextInput, AgoraView, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; interface State extends BaseVideoComponentState { @@ -178,7 +177,7 @@ export default class VideoEncoderConfiguration { if (isNaN(+text)) return; this.setState({ @@ -189,7 +188,7 @@ export default class VideoEncoderConfiguration placeholder={`width (defaults: ${this.createState().width})`} /> { if (isNaN(+text)) return; this.setState({ diff --git a/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx index 1ac731530..ffb0c32c4 100644 --- a/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx +++ b/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx @@ -1,16 +1,14 @@ -import React from 'react'; import { BackgroundBlurDegree, BackgroundSourceType, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, + createAgoraRtcEngine, } from 'agora-electron-sdk'; +import React from 'react'; import { SketchPicker } from 'react-color'; -import Config from '../../../config/agora.config'; - import { BaseComponent, BaseVideoComponentState, @@ -20,6 +18,7 @@ import { AgoraDropdown, AgoraTextInput, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; import { enumToItems, getResourcePath } from '../../../utils'; interface State extends BaseVideoComponentState { diff --git a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx index 266015848..5c7d098ec 100644 --- a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx +++ b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx @@ -1,37 +1,38 @@ -import React from 'react'; import { AudioEffectPreset, AudioEqualizationBandFrequency, AudioReverbType, ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, IRtcEngineEventHandler, VoiceBeautifierPreset, VoiceConversionPreset, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, BaseComponent, } from '../../../components/BaseComponent'; -import { - AudioEffectPresetParam1Limit, - AudioEffectPresetParam2Limit, - AudioReverbTypeValueLimit, - VoiceBeautifierPresetParam1Limit, - VoiceBeautifierPresetParam2Limit, -} from './VoiceChangerConfig'; import { AgoraButton, AgoraDivider, AgoraDropdown, AgoraSlider, } from '../../../components/ui'; +import Config from '../../../config/agora.config'; + import { enumToItems } from '../../../utils'; +import { + AudioEffectPresetParam1Limit, + AudioEffectPresetParam2Limit, + AudioReverbTypeValueLimit, + VoiceBeautifierPresetParam1Limit, + VoiceBeautifierPresetParam2Limit, +} from './VoiceChangerConfig'; + interface State extends BaseAudioComponentState { voiceBeautifierPreset: VoiceBeautifierPreset; audioEffectPreset: AudioEffectPreset; diff --git a/example/src/renderer/examples/advanced/index.ts b/example/src/renderer/examples/advanced/index.ts index 9fb43cca1..2432870d6 100644 --- a/example/src/renderer/examples/advanced/index.ts +++ b/example/src/renderer/examples/advanced/index.ts @@ -1,33 +1,33 @@ import AudioMixing from './AudioMixing/AudioMixing'; -import SendMultiVideoStream from './SendMultiVideoStream/SendMultiVideoStream'; +import AudioSpectrum from './AudioSpectrum/AudioSpectrum'; +import BeautyEffect from './BeautyEffect/BeautyEffect'; import ChannelMediaRelay from './ChannelMediaRelay/ChannelMediaRelay'; import ContentInspect from './ContentInspect/ContentInspect'; -import StreamMessage from './StreamMessage/StreamMessage'; +import DeviceManager from './DeviceManager/DeviceManager'; import DirectCdnStreaming from './DirectCdnStreaming/DirectCdnStreaming'; +import EncodedVideoFrame from './EncodedVideoFrame/EncodedVideoFrame'; +import Encryption from './Encryption/Encryption'; +import Extension from './Extension/Extension'; +import JoinMultipleChannel from './JoinMultipleChannel/JoinMultipleChannel'; +import LocalSpatialAudioEngine from './LocalSpatialAudioEngine/LocalSpatialAudioEngine'; import LocalVideoTranscoder from './LocalVideoTranscoder/LocalVideoTranscoder'; import MediaPlayer from './MediaPlayer/MediaPlayer'; -import JoinMultipleChannel from './JoinMultipleChannel/JoinMultipleChannel'; +import MediaRecorder from './MediaRecorder/MediaRecorder'; +import MusicContentCenter from './MusicContentCenter/MusicContentCenter'; +import PlayEffect from './PlayEffect/PlayEffect'; +import ProcessVideoRawData from './ProcessVideoRawData/ProcessVideoRawData'; +import PushVideoFrame from './PushVideoFrame/PushVideoFrame'; +import RTMPStreaming from './RTMPStreaming/RTMPStreaming'; import RhythmPlayer from './RhythmPlayer/RhythmPlayer'; import ScreenShare from './ScreenShare/ScreenShare'; import SendMetadata from './SendMetadata/SendMetadata'; -import Encryption from './Encryption/Encryption'; -import RTMPStreaming from './RTMPStreaming/RTMPStreaming'; +import SendMultiVideoStream from './SendMultiVideoStream/SendMultiVideoStream'; import SpatialAudio from './SpatialAudio/SpatialAudio'; +import StreamMessage from './StreamMessage/StreamMessage'; import TakeSnapshot from './TakeSnapshot/TakeSnapshot'; +import VideoEncoderConfiguration from './VideoEncoderConfiguration/VideoEncoderConfiguration'; import VirtualBackground from './VirtualBackground/VirtualBackground'; import VoiceChanger from './VoiceChanger/VoiceChanger'; -import AudioSpectrum from './AudioSpectrum/AudioSpectrum'; -import BeautyEffect from './BeautyEffect/BeautyEffect'; -import EncodedVideoFrame from './EncodedVideoFrame/EncodedVideoFrame'; -import MediaRecorder from './MediaRecorder/MediaRecorder'; -import PlayEffect from './PlayEffect/PlayEffect'; -import PushVideoFrame from './PushVideoFrame/PushVideoFrame'; -import VideoEncoderConfiguration from './VideoEncoderConfiguration/VideoEncoderConfiguration'; -import Extension from './Extension/Extension'; -import LocalSpatialAudioEngine from './LocalSpatialAudioEngine/LocalSpatialAudioEngine'; -import DeviceManager from './DeviceManager/DeviceManager'; -import MusicContentCenter from './MusicContentCenter/MusicContentCenter'; -import ProcessVideoRawData from './ProcessVideoRawData/ProcessVideoRawData'; const advanceRoute = [ { path: '/AudioMixing', component: AudioMixing, title: 'AudioMixing' }, diff --git a/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx index fe937bd8c..48c33b16f 100644 --- a/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx +++ b/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx @@ -1,8 +1,6 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, ErrorCodeType, IRtcEngineEventHandler, LocalAudioStreamError, @@ -11,15 +9,16 @@ import { RtcConnection, RtcStats, UserOfflineReasonType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, BaseComponent, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraDivider, AgoraSlider } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseAudioComponentState { enableLocalAudio: boolean; diff --git a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx index 44665113e..06d7d0935 100644 --- a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx @@ -1,8 +1,6 @@ -import React, { ReactElement } from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, ErrorCodeType, IRtcEngineEventHandler, LocalVideoStreamError, @@ -11,21 +9,22 @@ import { RtcStats, UserOfflineReasonType, VideoSourceType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React, { ReactElement } from 'react'; import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraCard, AgoraList, AgoraText, } from '../../../components/ui'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState {} diff --git a/example/src/renderer/examples/basic/StringUid/StringUid.tsx b/example/src/renderer/examples/basic/StringUid/StringUid.tsx index 77c5cd58e..95d412d60 100644 --- a/example/src/renderer/examples/basic/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/basic/StringUid/StringUid.tsx @@ -1,22 +1,21 @@ -import React from 'react'; import { ChannelProfileType, ClientRoleType, - createAgoraRtcEngine, ErrorCodeType, IRtcEngineEventHandler, RtcConnection, RtcStats, UserOfflineReasonType, + createAgoraRtcEngine, } from 'agora-electron-sdk'; - -import Config from '../../../config/agora.config'; +import React from 'react'; import { BaseAudioComponentState, BaseComponent, } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; +import Config from '../../../config/agora.config'; interface State extends BaseAudioComponentState { userAccount: string; diff --git a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx index 3511161b8..cdce99af3 100644 --- a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx +++ b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx @@ -1,5 +1,6 @@ -import { Input, Row, Card, Form, Button, Checkbox } from 'antd'; import { AgoraEnv } from 'agora-electron-sdk'; +import { Button, Card, Checkbox, Form, Input, Row } from 'antd'; + import config from '../../../config/agora.config'; console.log('config', config); diff --git a/example/src/renderer/examples/config/index.tsx b/example/src/renderer/examples/config/index.tsx deleted file mode 100644 index ab0581d02..000000000 --- a/example/src/renderer/examples/config/index.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import { - AudioProfileType, - AudioScenarioType, - ClientRoleType, - FrameRate, -} from 'agora-electron-sdk'; - -export const AudioProfileList = { - Default: AudioProfileType.AudioProfileDefault, //0 - SpeechStandard: AudioProfileType.AudioProfileSpeechStandard, //1 - MusicStandard: AudioProfileType.AudioProfileMusicStandard, //2 - MusicStandardStereo: AudioProfileType.AudioProfileMusicStandardStereo, //3 - MusicHighQuality: AudioProfileType.AudioProfileMusicHighQuality, //4 - MusicHighQualityStereo: AudioProfileType.AudioProfileMusicHighQualityStereo, //5 - IOT: AudioProfileType.AudioProfileIot, //6 - NUM: AudioProfileType.AudioProfileNum, -}; -export const AudioScenarioList = { - Default: AudioScenarioType.AudioScenarioDefault, //0 - GameStreaming: AudioScenarioType.AudioScenarioGameStreaming, //3 - Chatroom: AudioScenarioType.AudioScenarioChatroom, //5 - Num: AudioScenarioType.AudioScenarioNum, //8 -}; - -export const RoleTypeMap = { - Broadcaster: ClientRoleType.ClientRoleBroadcaster, //1 - Audience: ClientRoleType.ClientRoleAudience, //2 -}; -export const ResolutionMap = { - '120x120': { width: 120, height: 120 }, - '160x120': { width: 160, height: 120 }, - '180x180': { width: 180, height: 180 }, - '240x180': { width: 240, height: 180 }, - '240x240': { width: 240, height: 240 }, - '320x180': { width: 320, height: 180 }, - '320x240': { width: 320, height: 240 }, - '360x360': { width: 360, height: 360 }, - '424x240': { width: 424, height: 240 }, - '480x360': { width: 480, height: 360 }, - '480x480': { width: 480, height: 480 }, - '640x360': { width: 640, height: 360 }, - '640x480': { width: 640, height: 480 }, - '848x480': { width: 848, height: 480 }, - '960x720': { width: 960, height: 720 }, - '1280x720': { width: 1280, height: 720 }, - '1920x1080': { width: 1920, height: 1080 }, -}; -export const FpsMap = { - '7fps': FrameRate.FrameRateFps7, - '15fps': FrameRate.FrameRateFps15, - '30fps': FrameRate.FrameRateFps30, -}; - -export const EncryptionMap = { - AES_128_XTS: 1, - AES_128_ECB: 2, - AES_256_XTS: 3, - SM4_128_ECB: 4, - AES_128_GCM: 5, - AES_256_GCM: 6, - AES_128_GCM2: 7, - AES_256_GCM2: 8, -}; - -export const VoiceBeautifierMap = { - VOICE_BEAUTIFIER_OFF: 0, - - CHAT_BEAUTIFIER_MAGNETIC: 16843008, - - CHAT_BEAUTIFIER_FRESH: 16843264, - - CHAT_BEAUTIFIER_VITALITY: 16843520, - - SINGING_BEAUTIFIER: 16908544, - - TIMBRE_TRANSFORMATION_VIGOROUS: 16974080, - - TIMBRE_TRANSFORMATION_DEEP: 16974336, - - TIMBRE_TRANSFORMATION_MELLOW: 16974592, - - TIMBRE_TRANSFORMATION_FALSETTO: 16974848, - - TIMBRE_TRANSFORMATION_FULL: 16975104, - - TIMBRE_TRANSFORMATION_CLEAR: 16975360, - - TIMBRE_TRANSFORMATION_RESOUNDING: 16975616, - - TIMBRE_TRANSFORMATION_RINGING: 16975872, -}; - -export const AudioEffectMap = { - AUDIO_EFFECT_OFF: 0, - - ROOM_ACOUSTICS_KTV: 33620224, - - ROOM_ACOUSTICS_VOCAL_CONCERT: 33620480, - - ROOM_ACOUSTICS_STUDIO: 33620736, - - ROOM_ACOUSTICS_PHONOGRAPH: 33620992, - - ROOM_ACOUSTICS_VIRTUAL_STEREO: 33621248, - - ROOM_ACOUSTICS_SPACIAL: 33621504, - - ROOM_ACOUSTICS_ETHEREAL: 33621760, - - ROOM_ACOUSTICS_3D_VOICE: 33622016, - - VOICE_CHANGER_EFFECT_UNCLE: 33685760, - - VOICE_CHANGER_EFFECT_OLDMAN: 33686016, - - VOICE_CHANGER_EFFECT_BOY: 33686272, - - VOICE_CHANGER_EFFECT_SISTER: 33686528, - - VOICE_CHANGER_EFFECT_GIRL: 33686784, - - VOICE_CHANGER_EFFECT_PIGKING: 33687040, - - VOICE_CHANGER_EFFECT_HULK: 33687296, - - STYLE_TRANSFORMATION_RNB: 33751296, - - STYLE_TRANSFORMATION_POPULAR: 33751552, - - PITCH_CORRECTION: 33816832, -}; -export const EqualizationReverbMap = { - 'Dry Level': { - min: -20, - max: 0, - defaultValue: 0, - audioReverbType: 0, - title: 'Dry Level', - }, - 'Wet Level': { - min: -20, - max: 0, - defaultValue: 0, - audioReverbType: 1, - title: 'Wet Level', - }, - 'Room Size': { - min: 0, - max: 100, - defaultValue: 0, - audioReverbType: 2, - title: 'Room Size', - }, - 'Wet Delay': { - min: 0, - max: 200, - defaultValue: 0, - audioReverbType: 3, - title: 'Wet Delay', - }, - 'Strength': { - min: 0, - max: 100, - defaultValue: 0, - audioReverbType: 4, - title: 'Strength', - }, -}; -export default {}; diff --git a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx index e48b8b173..94b9f45a1 100644 --- a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx @@ -1,4 +1,3 @@ -import React, { ReactNode, useCallback, useEffect, useState } from 'react'; import { AudioDeviceInfo, ClientRoleType, @@ -8,6 +7,7 @@ import { VideoDeviceInfo, VideoSourceType, } from 'agora-electron-sdk'; +import React, { ReactNode, useCallback, useEffect, useState } from 'react'; import { AgoraButton, @@ -17,10 +17,10 @@ import { AgoraSwitch, } from '../../../components/ui'; import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; -import BaseRenderUsers from '../components/BaseRenderUsers'; -import BaseRenderChannel from '../components/BaseRenderChannel'; import { BaseComponent } from '../components/BaseComponent'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; export default function DeviceManager() { const { diff --git a/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx index 08b6c3cd7..d890af9e7 100644 --- a/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx +++ b/example/src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx @@ -1,4 +1,3 @@ -import React, { ReactNode, useEffect, useState } from 'react'; import { ClientRoleType, LocalAudioStreamError, @@ -6,13 +5,14 @@ import { MediaDeviceType, RtcConnection, } from 'agora-electron-sdk'; +import React, { ReactNode, useEffect, useState } from 'react'; import { AgoraButton, AgoraDivider, AgoraSlider } from '../../../components/ui'; import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; -import BaseRenderUsers from '../components/BaseRenderUsers'; -import BaseRenderChannel from '../components/BaseRenderChannel'; import { BaseComponent } from '../components/BaseComponent'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; export default function JoinChannelAudio() { const { diff --git a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx index 7634e7fbc..26a37465b 100644 --- a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx @@ -1,16 +1,16 @@ -import React, { useEffect } from 'react'; import { ClientRoleType, LocalVideoStreamError, LocalVideoStreamState, VideoSourceType, } from 'agora-electron-sdk'; +import React, { useEffect } from 'react'; import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import { BaseComponent } from '../components/BaseComponent'; import BaseRenderChannel from '../components/BaseRenderChannel'; import BaseRenderUsers from '../components/BaseRenderUsers'; -import { BaseComponent } from '../components/BaseComponent'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; export default function JoinChannelVideo() { const { diff --git a/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx index d0a1456fc..9c882ed08 100644 --- a/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -1,10 +1,3 @@ -import React, { - ReactElement, - ReactNode, - useCallback, - useEffect, - useState, -} from 'react'; import { ClientRoleType, RemoteVideoState, @@ -12,7 +5,15 @@ import { RtcConnection, RtcStats, } from 'agora-electron-sdk'; +import React, { + ReactElement, + ReactNode, + useCallback, + useEffect, + useState, +} from 'react'; +import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraCard, @@ -21,9 +22,8 @@ import { AgoraTextInput, } from '../../../components/ui'; import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; import { BaseComponent } from '../components/BaseComponent'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; export default function JoinMultipleChannel() { const { diff --git a/example/src/renderer/examples/hook/StringUid/StringUid.tsx b/example/src/renderer/examples/hook/StringUid/StringUid.tsx index db7e5c3d8..e1e7ab5f1 100644 --- a/example/src/renderer/examples/hook/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/hook/StringUid/StringUid.tsx @@ -1,12 +1,12 @@ -import React, { ReactNode, useEffect, useState } from 'react'; import { ClientRoleType } from 'agora-electron-sdk'; +import React, { ReactNode, useEffect, useState } from 'react'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; -import BaseRenderUsers from '../components/BaseRenderUsers'; -import BaseRenderChannel from '../components/BaseRenderChannel'; import { BaseComponent } from '../components/BaseComponent'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; export default function StringUid() { const { diff --git a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx index bd5df58dd..2fa99eeb2 100644 --- a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx +++ b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx @@ -1,9 +1,9 @@ -import React, { ReactNode, useEffect, useState } from 'react'; import { BackgroundBlurDegree, BackgroundSourceType, ClientRoleType, } from 'agora-electron-sdk'; +import React, { ReactNode, useEffect, useState } from 'react'; import { SketchPicker } from 'react-color'; import { @@ -11,12 +11,12 @@ import { AgoraDropdown, AgoraTextInput, } from '../../../components/ui'; +import { enumToItems, getResourcePath } from '../../../utils'; import * as log from '../../../utils/log'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; -import BaseRenderUsers from '../components/BaseRenderUsers'; -import BaseRenderChannel from '../components/BaseRenderChannel'; import { BaseComponent } from '../components/BaseComponent'; -import { enumToItems, getResourcePath } from '../../../utils'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; export default function VirtualBackground() { const { diff --git a/example/src/renderer/examples/hook/components/BaseComponent.tsx b/example/src/renderer/examples/hook/components/BaseComponent.tsx index 746fcc9c8..742a6a644 100644 --- a/example/src/renderer/examples/hook/components/BaseComponent.tsx +++ b/example/src/renderer/examples/hook/components/BaseComponent.tsx @@ -1,7 +1,6 @@ import React, { ReactNode } from 'react'; -import AgoraStyle from '../../../examples/config/public.scss'; -import { AgoraDivider, AgoraView } from '../../../components/ui'; +import { AgoraDivider, AgoraStyle, AgoraView } from '../../../components/ui'; interface Props { name: string; diff --git a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx index f398579b4..724da95f5 100644 --- a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx +++ b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx @@ -1,7 +1,7 @@ -import React, { memo, ReactElement } from 'react'; +import React, { ReactElement, memo } from 'react'; -import { AgoraCard, AgoraList, AgoraText } from '../../../components/ui'; import RtcSurfaceView from '../../../components/RtcSurfaceView'; +import { AgoraCard, AgoraList, AgoraText } from '../../../components/ui'; export interface BaseRenderUsersProps { renderVideo?: (uid: number) => ReactElement; diff --git a/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx b/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx index fd7d9e045..8773816fe 100644 --- a/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx +++ b/example/src/renderer/examples/hook/hooks/useInitRtcEngine.tsx @@ -1,4 +1,3 @@ -import { useCallback, useEffect, useRef, useState } from 'react'; import createAgoraRtcEngine, { ChannelProfileType, ErrorCodeType, @@ -7,10 +6,10 @@ import createAgoraRtcEngine, { RtcStats, UserOfflineReasonType, } from 'agora-electron-sdk'; - -import * as log from '../../../utils/log'; +import { useCallback, useEffect, useRef, useState } from 'react'; import Config from '../../../config/agora.config'; +import * as log from '../../../utils/log'; export function useInitRtcEngine(enableVideo: boolean) { const [appId] = useState(Config.appId); diff --git a/example/src/renderer/examples/hook/index.ts b/example/src/renderer/examples/hook/index.ts index 6b0c746c7..4c55faf86 100644 --- a/example/src/renderer/examples/hook/index.ts +++ b/example/src/renderer/examples/hook/index.ts @@ -1,9 +1,9 @@ -import JoinChannelVideo from './JoinChannelVideo/JoinChannelVideo'; -import StringUid from './StringUid/StringUid'; +import DeviceManager from './DeviceManager/DeviceManager'; import JoinChannelAudio from './JoinChannelAudio/JoinChannelAudio'; +import JoinChannelVideo from './JoinChannelVideo/JoinChannelVideo'; import JoinMultipleChannel from './JoinMultipleChannel/JoinMultipleChannel'; +import StringUid from './StringUid/StringUid'; import VirtualBackground from './VirtualBackground/VirtualBackground'; -import DeviceManager from './DeviceManager/DeviceManager'; const hooksRoutes = [ { diff --git a/example/src/renderer/index.tsx b/example/src/renderer/index.tsx index 3704ad901..110b002f4 100644 --- a/example/src/renderer/index.tsx +++ b/example/src/renderer/index.tsx @@ -1,4 +1,5 @@ import ReactDOM from 'react-dom/client'; + import App from './App'; const root = ReactDOM.createRoot(document.getElementById('app') as HTMLElement); diff --git a/example/src/renderer/utils/index.ts b/example/src/renderer/utils/index.ts index 0eb3bfa31..855f98a1e 100644 --- a/example/src/renderer/utils/index.ts +++ b/example/src/renderer/utils/index.ts @@ -1,4 +1,5 @@ import path from 'path'; + import { AgoraDropdownItem } from '../components/ui'; export const objToArray = (obj) => diff --git a/gulpfile.js b/gulpfile.js index ea2e5ea29..e52fd0a08 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,11 +1,12 @@ const gulp = require('gulp'); -const syncLib = require('./scripts/synclib'); + const build = require('./scripts/build'); -const getConfig = require('./scripts/getConfig'); -const downloadPrebuild = require('./scripts/downloadPrebuild'); -const { cleanBuildDir, cleanJSDir, cleanIrisDir } = require('./scripts/clean'); const buildJS = require('./scripts/buildJS'); +const { cleanBuildDir, cleanJSDir, cleanIrisDir } = require('./scripts/clean'); +const downloadPrebuild = require('./scripts/downloadPrebuild'); +const getConfig = require('./scripts/getConfig'); const logger = require('./scripts/logger'); +const syncLib = require('./scripts/synclib'); const zipBuild = require('./scripts/zipBuild'); const config = getConfig(); diff --git a/package.json b/package.json index 6e9940220..b9f9add40 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "eslint": "^8.4.1", "eslint-config-prettier": "^8.5.0", "eslint-plugin-auto-import": "^0.1.1", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", @@ -119,6 +120,7 @@ ], "plugins": [ "@typescript-eslint/eslint-plugin", + "import", "auto-import", "react", "react-hooks" @@ -165,7 +167,24 @@ } ], "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "error" + "react-hooks/exhaustive-deps": "error", + "import/order": [ + "error", + { + "newlines-between": "always-and-inside-groups", + "alphabetize": { + "order": "asc", + "orderImportKind": "asc" + } + } + ], + "sort-imports": [ + "error", + { + "ignoreDeclarationSort": true, + "ignoreMemberSort": false + } + ] } }, "eslintIgnore": [ diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js index 172918947..19b1ed979 100644 --- a/scripts/bootstrap.js +++ b/scripts/bootstrap.js @@ -1,6 +1,6 @@ +const child_process = require('child_process'); const os = require('os'); const path = require('path'); -const child_process = require('child_process'); const root = path.resolve(__dirname, '..'); const args = process.argv.slice(2); diff --git a/scripts/build.js b/scripts/build.js index 6b11a5e5a..875919f3c 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,4 +1,5 @@ const { exec } = require('shelljs'); + const getConfig = require('./getConfig'); const logger = require('./logger'); const { getOS } = require('./util'); diff --git a/scripts/buildJS.js b/scripts/buildJS.js index 6e0bd8c76..93292d418 100644 --- a/scripts/buildJS.js +++ b/scripts/buildJS.js @@ -1,6 +1,7 @@ const { exec } = require('shelljs'); -const logger = require('./logger'); + const { cleanJSDir, cleanTypesDir } = require('./clean'); +const logger = require('./logger'); const buildJS = async (cb) => { logger.info('Build js from typescript'); diff --git a/scripts/clean.js b/scripts/clean.js index 5d0f80688..22245efd8 100644 --- a/scripts/clean.js +++ b/scripts/clean.js @@ -1,6 +1,7 @@ -const fs = require('fs-extra'); const path = require('path'); +const fs = require('fs-extra'); + const destIrisSDKDir = path.join(__dirname, `../iris`); const buildDir = path.resolve(__dirname, '../build'); diff --git a/scripts/downloadPrebuild.js b/scripts/downloadPrebuild.js index 1f5034a0d..8440510ca 100644 --- a/scripts/downloadPrebuild.js +++ b/scripts/downloadPrebuild.js @@ -1,10 +1,12 @@ const path = require('path'); + const download = require('download'); const fs = require('fs-extra'); -const { getOS } = require('./util'); -const logger = require('./logger'); + const { cleanBuildDir, cleanJSDir, buildDir } = require('./clean'); const getConfig = require('./getConfig'); +const logger = require('./logger'); +const { getOS } = require('./util'); const { platform, packageVersion, arch, no_symbol } = getConfig(); diff --git a/scripts/getConfig.js b/scripts/getConfig.js index bdfaf9b77..8c9b4394f 100644 --- a/scripts/getConfig.js +++ b/scripts/getConfig.js @@ -1,5 +1,7 @@ -const minimist = require('minimist'); const path = require('path'); + +const minimist = require('minimist'); + const logger = require('./logger'); //@ts-ignore diff --git a/scripts/synclib.js b/scripts/synclib.js index 41dac3e4a..972cfbc37 100644 --- a/scripts/synclib.js +++ b/scripts/synclib.js @@ -1,13 +1,16 @@ -const glob = require('glob'); -const fs = require('fs-extra'); const path = require('path'); + +const { promisify } = require('util'); + const download = require('download'); const extract = require('extract-zip'); -const { promisify } = require('util'); -const logger = require('./logger'); +const fs = require('fs-extra'); +const glob = require('glob'); + +const { destIrisSDKDir, cleanIrisDir } = require('./clean'); const getConfig = require('./getConfig'); +const logger = require('./logger'); const { getOS, createTmpDir } = require('./util'); -const { destIrisSDKDir, cleanIrisDir } = require('./clean'); const globPromise = promisify(glob); const config = getConfig(); diff --git a/scripts/util.js b/scripts/util.js index fff1c913a..c537aa692 100644 --- a/scripts/util.js +++ b/scripts/util.js @@ -1,7 +1,9 @@ const os = require('os'); + +const fs = require('fs-extra'); + const getConfig = require('./getConfig'); const logger = require('./logger'); -const fs = require('fs-extra'); exports.getOS = () => { const { platform } = getConfig(); diff --git a/scripts/zipBuild.js b/scripts/zipBuild.js index d04d24e6a..79bf02686 100644 --- a/scripts/zipBuild.js +++ b/scripts/zipBuild.js @@ -1,6 +1,7 @@ -const { getOS } = require('./util'); const { exec } = require('shelljs'); + const logger = require('./logger'); +const { getOS } = require('./util'); const zipBuild = async () => { const isMac = getOS() === 'mac'; diff --git a/ts/AgoraSdk.ts b/ts/AgoraSdk.ts index c9878f76a..86bc26617 100644 --- a/ts/AgoraSdk.ts +++ b/ts/AgoraSdk.ts @@ -1,7 +1,7 @@ -import { IRtcEngineEx } from './Private/IAgoraRtcEngineEx'; -import { RtcEngineExInternal } from './Private/internal/RtcEngineExInternal'; import { IMediaPlayerCacheManager } from './Private/IAgoraMediaPlayer'; +import { IRtcEngineEx } from './Private/IAgoraRtcEngineEx'; import { IMediaPlayerCacheManagerImpl } from './Private/impl/IAgoraMediaPlayerImpl'; +import { RtcEngineExInternal } from './Private/internal/RtcEngineExInternal'; export * from './Private/AgoraBase'; export * from './Private/AgoraMediaBase'; diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index 0bd74e78b..f69cb630c 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -1,5 +1,5 @@ import './extension/AgoraBaseExtension'; -import { VideoSourceType, RenderModeType } from './AgoraMediaBase'; +import { RenderModeType, VideoSourceType } from './AgoraMediaBase'; /** * The channel profile. */ diff --git a/ts/Private/IAgoraMediaEngine.ts b/ts/Private/IAgoraMediaEngine.ts index 18e73d2bb..c951584be 100644 --- a/ts/Private/IAgoraMediaEngine.ts +++ b/ts/Private/IAgoraMediaEngine.ts @@ -1,18 +1,18 @@ import './extension/IAgoraMediaEngineExtension'; import { - IAudioFrameObserver, - IVideoFrameObserver, - IVideoEncodedFrameObserver, - AudioFrame, - ExternalVideoSourceType, - ExternalVideoFrame, -} from './AgoraMediaBase'; -import { - SenderOptions, - AudioTrackType, AudioTrackConfig, + AudioTrackType, EncodedVideoFrameInfo, + SenderOptions, } from './AgoraBase'; +import { + AudioFrame, + ExternalVideoFrame, + ExternalVideoSourceType, + IAudioFrameObserver, + IVideoEncodedFrameObserver, + IVideoFrameObserver, +} from './AgoraMediaBase'; /** * The channel mode. */ diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index 8268b2399..e64f279b6 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -1,19 +1,19 @@ import './extension/IAgoraMediaPlayerExtension'; +import { SpatialAudioParams } from './AgoraBase'; import { - MediaSource, - PlayerStreamInfo, - MediaPlayerState, -} from './AgoraMediaPlayerTypes'; -import { - RenderModeType, - IAudioSpectrumObserver, AudioDualMonoMode, IAudioPcmFrameSink, + IAudioSpectrumObserver, RawAudioFrameOpModeType, + RenderModeType, VideoFrame, } from './AgoraMediaBase'; +import { + MediaPlayerState, + MediaSource, + PlayerStreamInfo, +} from './AgoraMediaPlayerTypes'; import { IMediaPlayerSourceObserver } from './IAgoraMediaPlayerSource'; -import { SpatialAudioParams } from './AgoraBase'; /** * This class provides media player functions and supports multiple instances. */ diff --git a/ts/Private/IAgoraMediaPlayerSource.ts b/ts/Private/IAgoraMediaPlayerSource.ts index 0d5ecdafd..9a021c07c 100644 --- a/ts/Private/IAgoraMediaPlayerSource.ts +++ b/ts/Private/IAgoraMediaPlayerSource.ts @@ -1,11 +1,11 @@ import './extension/IAgoraMediaPlayerSourceExtension'; import { - MediaPlayerState, MediaPlayerError, MediaPlayerEvent, + MediaPlayerState, PlayerPreloadEvent, - SrcInfo, PlayerUpdatedInfo, + SrcInfo, } from './AgoraMediaPlayerTypes'; /** * Provides callbacks for media players. diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index 785440122..c8bd2dab4 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -1,123 +1,123 @@ import './extension/IAgoraRtcEngineExtension'; import { - QualityAdaptIndication, - VideoCodecType, - CaptureBrightnessLevelType, - VideoStreamType, - AudioSampleRateType, - VideoFormat, - Rectangle, - ScreenCaptureParameters, - VideoMirrorModeType, - ClientRoleType, AudienceLatencyLevelType, + AudioAinsMode, + AudioEffectPreset, + AudioEncodedFrameObserverConfig, + AudioProfileType, + AudioRecordingConfiguration, + AudioSampleRateType, + AudioScenarioType, + AudioSessionOperationRestriction, + AudioVolumeInfo, + BeautyOptions, + CaptureBrightnessLevelType, + ChannelMediaRelayConfiguration, + ChannelMediaRelayError, + ChannelMediaRelayEvent, + ChannelMediaRelayState, ChannelProfileType, + ClientRoleChangeFailedReason, + ClientRoleOptions, + ClientRoleType, + CodecCapInfo, + ColorEnhanceOptions, + ConnectionChangedReasonType, + ConnectionStateType, + DataStreamConfig, + DeviceInfo, + DownlinkNetworkInfo, + EarMonitoringFilterType, + EchoTestConfiguration, + EncryptionConfig, + EncryptionErrorType, ErrorCodeType, - QualityType, + HeadphoneEqualizerPreset, + IAudioEncodedFrameObserver, + LastmileProbeConfig, LastmileProbeResult, - AudioVolumeInfo, - RtcStats, - UplinkNetworkInfo, - DownlinkNetworkInfo, - LocalVideoStreamState, - LocalVideoStreamError, - RemoteVideoState, - RemoteVideoStateReason, - UserOfflineReasonType, - LocalAudioStats, LicenseErrorType, - LocalAudioStreamState, + LiveTranscoding, + LocalAudioStats, LocalAudioStreamError, + LocalAudioStreamState, + LocalTranscoderConfiguration, + LocalVideoStreamError, + LocalVideoStreamState, + LowlightEnhanceOptions, + MediaTraceEvent, + NetworkType, + PermissionType, + QualityAdaptIndication, + QualityType, + Rectangle, RemoteAudioState, RemoteAudioStateReason, - ClientRoleOptions, - ClientRoleChangeFailedReason, - RtmpStreamPublishState, + RemoteVideoState, + RemoteVideoStateReason, + RtcStats, RtmpStreamPublishErrorType, + RtmpStreamPublishState, RtmpStreamingEvent, - ChannelMediaRelayState, - ChannelMediaRelayError, - ChannelMediaRelayEvent, - ConnectionStateType, - ConnectionChangedReasonType, - WlaccMessageReason, - WlaccSuggestAction, - WlAccStats, - NetworkType, - EncryptionErrorType, - PermissionType, - UserInfo, - UploadErrorReason, - StreamSubscribeState, + ScreenCaptureParameters, + ScreenCaptureParameters2, + ScreenScenarioType, + SegmentationProperty, + SenderOptions, + SimulcastStreamConfig, + SimulcastStreamMode, + SpatialAudioParams, StreamPublishState, - TranscodingVideoStream, - VideoTranscoderError, - MediaTraceEvent, - VideoRenderingTracingInfo, - AudioScenarioType, + StreamSubscribeState, ThreadPriorityType, - CodecCapInfo, - EchoTestConfiguration, - LastmileProbeConfig, - VideoEncoderConfiguration, - BeautyOptions, - LowlightEnhanceOptions, - VideoDenoiserOptions, - ColorEnhanceOptions, - VirtualBackgroundSource, - SegmentationProperty, - VideoCanvas, + TranscodingVideoStream, + UplinkNetworkInfo, + UploadErrorReason, + UserInfo, + UserOfflineReasonType, VideoApplicationScenarioType, - AudioProfileType, + VideoCanvas, + VideoCodecType, + VideoContentHint, + VideoDenoiserOptions, + VideoEncoderConfiguration, + VideoFormat, + VideoMirrorModeType, + VideoOrientation, + VideoRenderingTracingInfo, + VideoStreamType, VideoSubscriptionOptions, - AudioRecordingConfiguration, - AudioEncodedFrameObserverConfig, - IAudioEncodedFrameObserver, - SpatialAudioParams, + VideoTranscoderError, + VirtualBackgroundSource, VoiceBeautifierPreset, - AudioEffectPreset, VoiceConversionPreset, - HeadphoneEqualizerPreset, - SimulcastStreamConfig, - SimulcastStreamMode, - EarMonitoringFilterType, - SenderOptions, - AudioSessionOperationRestriction, - DeviceInfo, - VideoContentHint, - ScreenCaptureParameters2, - ScreenScenarioType, - LiveTranscoding, - LocalTranscoderConfiguration, - VideoOrientation, - EncryptionConfig, - DataStreamConfig, WatermarkOptions, - AudioAinsMode, - ChannelMediaRelayConfiguration, + WlAccStats, + WlaccMessageReason, + WlaccSuggestAction, } from './AgoraBase'; import { - RenderModeType, - VideoSourceType, + ContentInspectConfig, ContentInspectResult, + IAudioSpectrumObserver, MediaSourceType, RawAudioFrameOpModeType, - IAudioSpectrumObserver, - ContentInspectConfig, + RenderModeType, + VideoSourceType, } from './AgoraMediaBase'; -import { RtcConnection } from './IAgoraRtcEngineEx'; -import { - RhythmPlayerStateType, - RhythmPlayerErrorType, - AgoraRhythmPlayerConfig, -} from './IAgoraRhythmPlayer'; import { LogConfig, LogFilterType, LogLevel } from './IAgoraLog'; +import { AudioMixingDualMonoMode, IMediaEngine } from './IAgoraMediaEngine'; import { IMediaPlayer } from './IAgoraMediaPlayer'; import { IMediaRecorder } from './IAgoraMediaRecorder'; -import { AudioMixingDualMonoMode, IMediaEngine } from './IAgoraMediaEngine'; -import { IAudioDeviceManager } from './IAudioDeviceManager'; import { IMusicContentCenter } from './IAgoraMusicContentCenter'; +import { + AgoraRhythmPlayerConfig, + RhythmPlayerErrorType, + RhythmPlayerStateType, +} from './IAgoraRhythmPlayer'; +import { RtcConnection } from './IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from './IAgoraSpatialAudio'; +import { IAudioDeviceManager } from './IAudioDeviceManager'; /** * Media device types. */ diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 8bdb81ae2..8f8056727 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -1,28 +1,28 @@ import './extension/IAgoraRtcEngineExExtension'; import { - IRtcEngine, - ChannelMediaOptions, - LeaveChannelOptions, - StreamFallbackOptions, -} from './IAgoraRtcEngine'; -import { - VideoEncoderConfiguration, - VideoCanvas, - VideoStreamType, - VideoSubscriptionOptions, - SpatialAudioParams, - VideoMirrorModeType, + ChannelMediaRelayConfiguration, ConnectionStateType, - EncryptionConfig, DataStreamConfig, - WatermarkOptions, + EncryptionConfig, LiveTranscoding, - ChannelMediaRelayConfiguration, - UserInfo, SimulcastStreamConfig, SimulcastStreamMode, + SpatialAudioParams, + UserInfo, + VideoCanvas, + VideoEncoderConfiguration, + VideoMirrorModeType, + VideoStreamType, + VideoSubscriptionOptions, + WatermarkOptions, } from './AgoraBase'; import { RenderModeType } from './AgoraMediaBase'; +import { + ChannelMediaOptions, + IRtcEngine, + LeaveChannelOptions, + StreamFallbackOptions, +} from './IAgoraRtcEngine'; /** * Contains connection information. */ diff --git a/ts/Private/extension/IAgoraMediaPlayerExtension.ts b/ts/Private/extension/IAgoraMediaPlayerExtension.ts index 98686e169..fead93a63 100644 --- a/ts/Private/extension/IAgoraMediaPlayerExtension.ts +++ b/ts/Private/extension/IAgoraMediaPlayerExtension.ts @@ -1,6 +1,6 @@ -import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; -import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IAudioPcmFrameSink, IAudioSpectrumObserver } from '../AgoraMediaBase'; +import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; +import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaPlayerEvent = IMediaPlayerSourceObserver & diff --git a/ts/Private/extension/IAgoraRtcEngineExtension.ts b/ts/Private/extension/IAgoraRtcEngineExtension.ts index 9b327bc74..b9f6f043d 100644 --- a/ts/Private/extension/IAgoraRtcEngineExtension.ts +++ b/ts/Private/extension/IAgoraRtcEngineExtension.ts @@ -1,10 +1,10 @@ +import { IAudioEncodedFrameObserver } from '../AgoraBase'; +import { IAudioSpectrumObserver } from '../AgoraMediaBase'; import { - IRtcEngineEventHandler, IDirectCdnStreamingEventHandler, IMetadataObserver, + IRtcEngineEventHandler, } from '../IAgoraRtcEngine'; -import { IAudioSpectrumObserver } from '../AgoraMediaBase'; -import { IAudioEncodedFrameObserver } from '../AgoraBase'; import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IRtcEngineEvent = IRtcEngineEventHandler & diff --git a/ts/Private/impl/AgoraMediaBaseImpl.ts b/ts/Private/impl/AgoraMediaBaseImpl.ts index c171bcd00..0d5737ca8 100644 --- a/ts/Private/impl/AgoraMediaBaseImpl.ts +++ b/ts/Private/impl/AgoraMediaBaseImpl.ts @@ -1,11 +1,11 @@ import { - IAudioPcmFrameSink, - IAudioFrameObserverBase, IAudioFrameObserver, + IAudioFrameObserverBase, + IAudioPcmFrameSink, IAudioSpectrumObserver, + IMediaRecorderObserver, IVideoEncodedFrameObserver, IVideoFrameObserver, - IMediaRecorderObserver, } from '../AgoraMediaBase'; export function processIAudioPcmFrameSink( diff --git a/ts/Private/impl/IAgoraMediaEngineImpl.ts b/ts/Private/impl/IAgoraMediaEngineImpl.ts index de3b38905..bf09fd922 100644 --- a/ts/Private/impl/IAgoraMediaEngineImpl.ts +++ b/ts/Private/impl/IAgoraMediaEngineImpl.ts @@ -1,19 +1,19 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; -import { IMediaEngine } from '../IAgoraMediaEngine'; -import { - IAudioFrameObserver, - IVideoFrameObserver, - IVideoEncodedFrameObserver, - AudioFrame, - ExternalVideoSourceType, - ExternalVideoFrame, -} from '../AgoraMediaBase'; import { - SenderOptions, - AudioTrackType, AudioTrackConfig, + AudioTrackType, EncodedVideoFrameInfo, + SenderOptions, } from '../AgoraBase'; +import { + AudioFrame, + ExternalVideoFrame, + ExternalVideoSourceType, + IAudioFrameObserver, + IVideoEncodedFrameObserver, + IVideoFrameObserver, +} from '../AgoraMediaBase'; +import { IMediaEngine } from '../IAgoraMediaEngine'; +import { callIrisApi } from '../internal/IrisApiEngine'; // @ts-ignore export class IMediaEngineImpl implements IMediaEngine { registerAudioFrameObserver(observer: IAudioFrameObserver): number { diff --git a/ts/Private/impl/IAgoraMediaPlayerImpl.ts b/ts/Private/impl/IAgoraMediaPlayerImpl.ts index b4e2358d0..c6d6f7c3d 100644 --- a/ts/Private/impl/IAgoraMediaPlayerImpl.ts +++ b/ts/Private/impl/IAgoraMediaPlayerImpl.ts @@ -1,23 +1,23 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; +import { SpatialAudioParams } from '../AgoraBase'; import { - IMediaPlayer, - IMediaPlayerVideoFrameObserver, - IMediaPlayerCacheManager, -} from '../IAgoraMediaPlayer'; + AudioDualMonoMode, + IAudioPcmFrameSink, + IAudioSpectrumObserver, + RawAudioFrameOpModeType, + RenderModeType, +} from '../AgoraMediaBase'; import { + MediaPlayerState, MediaSource, PlayerStreamInfo, - MediaPlayerState, } from '../AgoraMediaPlayerTypes'; import { - RenderModeType, - IAudioSpectrumObserver, - AudioDualMonoMode, - IAudioPcmFrameSink, - RawAudioFrameOpModeType, -} from '../AgoraMediaBase'; + IMediaPlayer, + IMediaPlayerCacheManager, + IMediaPlayerVideoFrameObserver, +} from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; -import { SpatialAudioParams } from '../AgoraBase'; +import { callIrisApi } from '../internal/IrisApiEngine'; // @ts-ignore export class IMediaPlayerImpl implements IMediaPlayer { getMediaPlayerId(): number { diff --git a/ts/Private/impl/IAgoraMediaRecorderImpl.ts b/ts/Private/impl/IAgoraMediaRecorderImpl.ts index bf72ca310..57192036d 100644 --- a/ts/Private/impl/IAgoraMediaRecorderImpl.ts +++ b/ts/Private/impl/IAgoraMediaRecorderImpl.ts @@ -1,9 +1,9 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; -import { IMediaRecorder } from '../IAgoraMediaRecorder'; import { IMediaRecorderObserver, MediaRecorderConfiguration, } from '../AgoraMediaBase'; +import { IMediaRecorder } from '../IAgoraMediaRecorder'; +import { callIrisApi } from '../internal/IrisApiEngine'; // @ts-ignore export class IMediaRecorderImpl implements IMediaRecorder { setMediaRecorderObserver(callback: IMediaRecorderObserver): number { diff --git a/ts/Private/impl/IAgoraMusicContentCenterImpl.ts b/ts/Private/impl/IAgoraMusicContentCenterImpl.ts index 625c18cc5..d9fe4e3be 100644 --- a/ts/Private/impl/IAgoraMusicContentCenterImpl.ts +++ b/ts/Private/impl/IAgoraMusicContentCenterImpl.ts @@ -1,15 +1,16 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; import { + IMusicContentCenter, + IMusicContentCenterEventHandler, + IMusicPlayer, + Music, + MusicCacheInfo, MusicChartCollection, MusicChartInfo, MusicCollection, - Music, - IMusicContentCenterEventHandler, - IMusicPlayer, - IMusicContentCenter, MusicContentCenterConfiguration, - MusicCacheInfo, } from '../IAgoraMusicContentCenter'; +import { callIrisApi } from '../internal/IrisApiEngine'; + import { IMediaPlayerImpl } from './IAgoraMediaPlayerImpl'; // @ts-ignore export class MusicChartCollectionImpl implements MusicChartCollection { diff --git a/ts/Private/impl/IAgoraRtcEngineExImpl.ts b/ts/Private/impl/IAgoraRtcEngineExImpl.ts index 666d57ee7..6aa058cf1 100644 --- a/ts/Private/impl/IAgoraRtcEngineExImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineExImpl.ts @@ -1,29 +1,30 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; -import { IRtcEngineImpl } from './IAgoraRtcEngineImpl'; -import { IRtcEngineEx, RtcConnection } from '../IAgoraRtcEngineEx'; -import { - ChannelMediaOptions, - LeaveChannelOptions, - StreamFallbackOptions, -} from '../IAgoraRtcEngine'; import { - VideoEncoderConfiguration, - VideoCanvas, - VideoStreamType, - VideoSubscriptionOptions, - SpatialAudioParams, - VideoMirrorModeType, + ChannelMediaRelayConfiguration, ConnectionStateType, - EncryptionConfig, DataStreamConfig, - WatermarkOptions, + EncryptionConfig, LiveTranscoding, - ChannelMediaRelayConfiguration, - UserInfo, SimulcastStreamConfig, SimulcastStreamMode, + SpatialAudioParams, + UserInfo, + VideoCanvas, + VideoEncoderConfiguration, + VideoMirrorModeType, + VideoStreamType, + VideoSubscriptionOptions, + WatermarkOptions, } from '../AgoraBase'; import { RenderModeType } from '../AgoraMediaBase'; +import { + ChannelMediaOptions, + LeaveChannelOptions, + StreamFallbackOptions, +} from '../IAgoraRtcEngine'; +import { IRtcEngineEx, RtcConnection } from '../IAgoraRtcEngineEx'; +import { callIrisApi } from '../internal/IrisApiEngine'; + +import { IRtcEngineImpl } from './IAgoraRtcEngineImpl'; // @ts-ignore export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { joinChannelEx( diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index 8d2c6b445..95445bf2d 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -1,100 +1,100 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; -import { - IRtcEngineEventHandler, - IVideoDeviceManager, - VideoDeviceInfo, - IMetadataObserver, - IDirectCdnStreamingEventHandler, - IRtcEngine, - RtcEngineContext, - SDKBuildInfo, - ChannelMediaOptions, - LeaveChannelOptions, - CameraCapturerConfiguration, - AudioEqualizationBandFrequency, - AudioReverbType, - StreamFallbackOptions, - Size, - ScreenCaptureSourceInfo, - ScreenCaptureConfiguration, - PriorityType, - MetadataType, - DirectCdnStreamingMediaOptions, - CloudProxyType, - LocalAccessPointConfiguration, - AdvancedAudioOptions, - ImageTrackOptions, - Metadata, -} from '../IAgoraRtcEngine'; import { - VideoFormat, - CodecCapInfo, + AudioAinsMode, + AudioEffectPreset, + AudioEncodedFrameObserverConfig, + AudioProfileType, + AudioRecordingConfiguration, + AudioScenarioType, + AudioSessionOperationRestriction, + BeautyOptions, + ChannelMediaRelayConfiguration, ChannelProfileType, - ClientRoleType, ClientRoleOptions, + ClientRoleType, + CodecCapInfo, + ColorEnhanceOptions, + ConnectionStateType, + DataStreamConfig, + DeviceInfo, + EarMonitoringFilterType, EchoTestConfiguration, + EncryptionConfig, + HeadphoneEqualizerPreset, + IAudioEncodedFrameObserver, LastmileProbeConfig, - VideoEncoderConfiguration, - BeautyOptions, + LiveTranscoding, + LocalTranscoderConfiguration, LowlightEnhanceOptions, - VideoDenoiserOptions, - ColorEnhanceOptions, - VirtualBackgroundSource, + Rectangle, + ScreenCaptureParameters, + ScreenCaptureParameters2, + ScreenScenarioType, SegmentationProperty, - VideoCanvas, + SenderOptions, + SimulcastStreamConfig, + SimulcastStreamMode, + SpatialAudioParams, + UserInfo, VideoApplicationScenarioType, - AudioProfileType, - AudioScenarioType, + VideoCanvas, + VideoContentHint, + VideoDenoiserOptions, + VideoEncoderConfiguration, + VideoFormat, + VideoMirrorModeType, + VideoOrientation, VideoStreamType, VideoSubscriptionOptions, - AudioRecordingConfiguration, - AudioEncodedFrameObserverConfig, - IAudioEncodedFrameObserver, - SpatialAudioParams, + VirtualBackgroundSource, VoiceBeautifierPreset, - AudioEffectPreset, VoiceConversionPreset, - HeadphoneEqualizerPreset, - VideoMirrorModeType, - SimulcastStreamConfig, - SimulcastStreamMode, - EarMonitoringFilterType, - SenderOptions, - AudioSessionOperationRestriction, - Rectangle, - ScreenCaptureParameters, - DeviceInfo, - VideoContentHint, - ScreenCaptureParameters2, - ScreenScenarioType, - LiveTranscoding, - LocalTranscoderConfiguration, - VideoOrientation, - ConnectionStateType, - EncryptionConfig, - DataStreamConfig, WatermarkOptions, - AudioAinsMode, - UserInfo, - ChannelMediaRelayConfiguration, } from '../AgoraBase'; import { - VideoSourceType, + ContentInspectConfig, + IAudioSpectrumObserver, MediaSourceType, - RenderModeType, RawAudioFrameOpModeType, - IAudioSpectrumObserver, - ContentInspectConfig, + RenderModeType, + VideoSourceType, } from '../AgoraMediaBase'; +import { LogFilterType, LogLevel } from '../IAgoraLog'; +import { AudioMixingDualMonoMode, IMediaEngine } from '../IAgoraMediaEngine'; import { IMediaPlayer } from '../IAgoraMediaPlayer'; -import { RtcConnection } from '../IAgoraRtcEngineEx'; import { IMediaRecorder } from '../IAgoraMediaRecorder'; -import { AudioMixingDualMonoMode, IMediaEngine } from '../IAgoraMediaEngine'; -import { LogFilterType, LogLevel } from '../IAgoraLog'; -import { AgoraRhythmPlayerConfig } from '../IAgoraRhythmPlayer'; -import { IAudioDeviceManager } from '../IAudioDeviceManager'; import { IMusicContentCenter } from '../IAgoraMusicContentCenter'; +import { AgoraRhythmPlayerConfig } from '../IAgoraRhythmPlayer'; +import { + AdvancedAudioOptions, + AudioEqualizationBandFrequency, + AudioReverbType, + CameraCapturerConfiguration, + ChannelMediaOptions, + CloudProxyType, + DirectCdnStreamingMediaOptions, + IDirectCdnStreamingEventHandler, + IMetadataObserver, + IRtcEngine, + IRtcEngineEventHandler, + IVideoDeviceManager, + ImageTrackOptions, + LeaveChannelOptions, + LocalAccessPointConfiguration, + Metadata, + MetadataType, + PriorityType, + RtcEngineContext, + SDKBuildInfo, + ScreenCaptureConfiguration, + ScreenCaptureSourceInfo, + Size, + StreamFallbackOptions, + VideoDeviceInfo, +} from '../IAgoraRtcEngine'; +import { RtcConnection } from '../IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; +import { IAudioDeviceManager } from '../IAudioDeviceManager'; +import { callIrisApi } from '../internal/IrisApiEngine'; export function processIRtcEngineEventHandler( handler: IRtcEngineEventHandler, event: string, diff --git a/ts/Private/impl/IAgoraSpatialAudioImpl.ts b/ts/Private/impl/IAgoraSpatialAudioImpl.ts index de268e34d..b3d961cd7 100644 --- a/ts/Private/impl/IAgoraSpatialAudioImpl.ts +++ b/ts/Private/impl/IAgoraSpatialAudioImpl.ts @@ -1,11 +1,11 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; +import { RtcConnection } from '../IAgoraRtcEngineEx'; import { IBaseSpatialAudioEngine, + ILocalSpatialAudioEngine, RemoteVoicePositionInfo, SpatialAudioZone, - ILocalSpatialAudioEngine, } from '../IAgoraSpatialAudio'; -import { RtcConnection } from '../IAgoraRtcEngineEx'; +import { callIrisApi } from '../internal/IrisApiEngine'; // @ts-ignore export class IBaseSpatialAudioEngineImpl implements IBaseSpatialAudioEngine { release(): void { diff --git a/ts/Private/impl/IAudioDeviceManagerImpl.ts b/ts/Private/impl/IAudioDeviceManagerImpl.ts index 51cc5fd43..0663d3ec5 100644 --- a/ts/Private/impl/IAudioDeviceManagerImpl.ts +++ b/ts/Private/impl/IAudioDeviceManagerImpl.ts @@ -1,6 +1,6 @@ -import { callIrisApi } from '../internal/IrisApiEngine'; -import { IAudioDeviceManager } from '../IAudioDeviceManager'; import { AudioDeviceInfo } from '../IAgoraRtcEngine'; +import { IAudioDeviceManager } from '../IAudioDeviceManager'; +import { callIrisApi } from '../internal/IrisApiEngine'; // @ts-ignore export class IAudioDeviceManagerImpl implements IAudioDeviceManager { enumeratePlaybackDevices(): AudioDeviceInfo[] { diff --git a/ts/Private/internal/AudioDeviceManagerInternal.ts b/ts/Private/internal/AudioDeviceManagerInternal.ts index 37ea3b73e..6c061a784 100644 --- a/ts/Private/internal/AudioDeviceManagerInternal.ts +++ b/ts/Private/internal/AudioDeviceManagerInternal.ts @@ -1,7 +1,8 @@ import { AudioDeviceInfo } from '../IAgoraRtcEngine'; -import { callIrisApi } from './IrisApiEngine'; import { IAudioDeviceManagerImpl } from '../impl/IAudioDeviceManagerImpl'; +import { callIrisApi } from './IrisApiEngine'; + export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { getPlaybackDeviceInfo(): AudioDeviceInfo { const apiType = this.getApiTypeFromGetPlaybackDeviceInfo(); diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index d3ecc16a9..e7a7acd44 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -1,4 +1,3 @@ -const JSON = require('json-bigint'); import { AgoraEnv } from '../../Utils'; import { IAudioEncodedFrameObserver } from '../AgoraBase'; @@ -13,18 +12,18 @@ import { IVideoFrameObserver, VideoFrame, } from '../AgoraMediaBase'; -import { - IDirectCdnStreamingEventHandler, - IMetadataObserver, - IRtcEngineEventHandler, - Metadata, -} from '../IAgoraRtcEngine'; import { IMediaPlayer, IMediaPlayerVideoFrameObserver, } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import { IMusicContentCenterEventHandler } from '../IAgoraMusicContentCenter'; +import { + IDirectCdnStreamingEventHandler, + IMetadataObserver, + IRtcEngineEventHandler, + Metadata, +} from '../IAgoraRtcEngine'; import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; import { @@ -36,14 +35,14 @@ import { processIVideoEncodedFrameObserver, processIVideoFrameObserver, } from '../impl/AgoraMediaBaseImpl'; +import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; +import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; +import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; import { processIDirectCdnStreamingEventHandler, processIMetadataObserver, processIRtcEngineEventHandler, } from '../impl/IAgoraRtcEngineImpl'; -import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; -import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; -import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; import { MediaEngineInternal } from './MediaEngineInternal'; import { MediaPlayerInternal } from './MediaPlayerInternal'; @@ -53,10 +52,11 @@ import { MusicContentCenterInternal, } from './MusicContentCenterInternal'; import { RtcEngineExInternal } from './RtcEngineExInternal'; - import type { EventEmitter as IEventEmitter } from './emitter/EventEmitter'; import EventEmitter from './emitter/EventEmitter'; +const JSON = require('json-bigint'); + // @ts-ignore export const DeviceEventEmitter: IEventEmitter = new EventEmitter(); diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index 476797a21..d8248e35a 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -4,15 +4,14 @@ import { AgoraEnv, logWarn } from '../../Utils'; import { ErrorCodeType } from '../AgoraBase'; import { - IAudioSpectrumObserver, IAudioPcmFrameSink, + IAudioSpectrumObserver, RawAudioFrameOpModeType, - VideoSourceType, RenderModeType, + VideoSourceType, } from '../AgoraMediaBase'; import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; - import { IMediaPlayerEvent } from '../extension/IAgoraMediaPlayerExtension'; import { diff --git a/ts/Private/internal/MusicContentCenterInternal.ts b/ts/Private/internal/MusicContentCenterInternal.ts index bc7eb7f25..a0013d077 100644 --- a/ts/Private/internal/MusicContentCenterInternal.ts +++ b/ts/Private/internal/MusicContentCenterInternal.ts @@ -5,7 +5,6 @@ import { IMusicPlayer, Music, } from '../IAgoraMusicContentCenter'; - import { IMusicContentCenterEvent } from '../extension/IAgoraMusicContentCenterExtension'; import { @@ -18,10 +17,9 @@ import { import IAgoraMusicContentCenterTI from '../ti/IAgoraMusicContentCenter-ti'; const checkers = createCheckers(IAgoraMusicContentCenterTI); +import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; import { MediaPlayerInternal } from './MediaPlayerInternal'; - import type { EmitterSubscription } from './emitter/EventEmitter'; -import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; export class MusicContentCenterInternal extends IMusicContentCenterImpl { static _event_handlers: IMusicContentCenterEventHandler[] = []; diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 28bb12d4b..b5fd00f07 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -1,5 +1,6 @@ import { createCheckers } from 'ts-interface-checker'; +import { RendererManager } from '../../Renderer/RendererManager'; import { Channel } from '../../Types'; import { AgoraEnv } from '../../Utils'; @@ -10,24 +11,23 @@ import { ClientRoleType, DataStreamConfig, EchoTestConfiguration, + ErrorCodeType, IAudioEncodedFrameObserver, SimulcastStreamConfig, SimulcastStreamMode, - WatermarkOptions, VideoCanvas, VideoMirrorModeType, - ErrorCodeType, + WatermarkOptions, } from '../AgoraBase'; import { - VideoSourceType, IAudioSpectrumObserver, RenderModeType, + VideoSourceType, } from '../AgoraMediaBase'; import { IMediaEngine } from '../IAgoraMediaEngine'; import { IMediaPlayer } from '../IAgoraMediaPlayer'; import { IMediaRecorder } from '../IAgoraMediaRecorder'; import { IMusicContentCenter } from '../IAgoraMusicContentCenter'; -import { RtcConnection } from '../IAgoraRtcEngineEx'; import { ChannelMediaOptions, DirectCdnStreamingMediaOptions, @@ -38,14 +38,14 @@ import { LeaveChannelOptions, MetadataType, RtcEngineContext, - ScreenCaptureSourceInfo, SDKBuildInfo, - Size, ScreenCaptureConfiguration, + ScreenCaptureSourceInfo, + Size, } from '../IAgoraRtcEngine'; +import { RtcConnection } from '../IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; - import { IRtcEngineEvent } from '../extension/IAgoraRtcEngineExtension'; import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; @@ -68,15 +68,13 @@ const checkers = createCheckers( ); import { AudioDeviceManagerInternal } from './AudioDeviceManagerInternal'; +import { DeviceEventEmitter, EVENT_TYPE, callIrisApi } from './IrisApiEngine'; import { LocalSpatialAudioEngineInternal } from './LocalSpatialAudioEngineInternal'; import { MediaEngineInternal } from './MediaEngineInternal'; import { MediaPlayerInternal } from './MediaPlayerInternal'; import { MediaRecorderInternal } from './MediaRecorderInternal'; import { MusicContentCenterInternal } from './MusicContentCenterInternal'; - -import { callIrisApi, DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; import type { EmitterSubscription } from './emitter/EventEmitter'; -import { RendererManager } from '../../Renderer/RendererManager'; export class RtcEngineExInternal extends IRtcEngineExImpl { static _event_handlers: IRtcEngineEventHandler[] = []; diff --git a/ts/Renderer/GlRenderer/index.ts b/ts/Renderer/GlRenderer/index.ts index 8392bde1f..01ae8e9b1 100644 --- a/ts/Renderer/GlRenderer/index.ts +++ b/ts/Renderer/GlRenderer/index.ts @@ -1,13 +1,14 @@ -import { RenderModeType } from '../../Private/AgoraMediaBase'; +import { EventEmitter } from 'events'; -const createProgramFromSources = - require('./webgl-utils').createProgramFromSources; +import { RenderModeType } from '../../Private/AgoraMediaBase'; -import { EventEmitter } from 'events'; import { ShareVideoFrame } from '../../Types'; import { logError, logWarn } from '../../Utils'; import { IRenderer, RenderFailCallback } from '../IRenderer'; +const createProgramFromSources = + require('./webgl-utils').createProgramFromSources; + const vertexShaderSource = 'attribute vec2 a_position;' + 'attribute vec2 a_texCoord;' + diff --git a/ts/Renderer/IRenderer.ts b/ts/Renderer/IRenderer.ts index bfa23e6d8..58ac35d26 100644 --- a/ts/Renderer/IRenderer.ts +++ b/ts/Renderer/IRenderer.ts @@ -1,4 +1,5 @@ import { EventEmitter } from 'events'; + import { RenderModeType } from '../Private/AgoraMediaBase'; import { RendererOptions, ShareVideoFrame } from '../Types'; diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index 194ba724f..1dde23472 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -7,8 +7,8 @@ import { FormatRendererVideoConfig, RENDER_MODE, RenderConfig, - RendererVideoConfig, RenderMap, + RendererVideoConfig, ShareVideoFrame, UidMap, VideoFrameCacheConfig, @@ -22,6 +22,7 @@ import { logInfo, logWarn, } from '../Utils'; + import GlRenderer from './GlRenderer'; import { IRenderer, RenderFailCallback } from './IRenderer'; import { YUVCanvasRenderer } from './YUVCanvasRenderer'; diff --git a/ts/Renderer/YUVCanvasRenderer/index.ts b/ts/Renderer/YUVCanvasRenderer/index.ts index ad078549b..1b25d002f 100644 --- a/ts/Renderer/YUVCanvasRenderer/index.ts +++ b/ts/Renderer/YUVCanvasRenderer/index.ts @@ -5,14 +5,14 @@ * @Last Modified time: 2021-05-19 15:59:03 */ -const YUVBuffer = require('yuv-buffer'); -const YUVCanvas = require('yuv-canvas'); -const isEqual = require('lodash.isequal'); - import { RenderModeType } from '../../Private/AgoraMediaBase'; import { CanvasOptions, ShareVideoFrame } from '../../Types'; import { IRenderer } from '../IRenderer'; +const isEqual = require('lodash.isequal'); +const YUVBuffer = require('yuv-buffer'); +const YUVCanvas = require('yuv-canvas'); + export class YUVCanvasRenderer extends IRenderer { private _cacheCanvasOptions?: CanvasOptions; private _yuvCanvasSink?: any; diff --git a/yarn.lock b/yarn.lock index 757eb9244..0afbfb424 100644 --- a/yarn.lock +++ b/yarn.lock @@ -512,6 +512,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/keyv@*": version "3.1.4" resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" @@ -931,6 +936,16 @@ array-unique@^0.3.2: resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + array.prototype.flatmap@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" @@ -1989,6 +2004,13 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" @@ -2490,6 +2512,22 @@ eslint-config-prettier@^8.5.0: resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + eslint-plugin-auto-import@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/eslint-plugin-auto-import/-/eslint-plugin-auto-import-0.1.1.tgz" @@ -2498,6 +2536,27 @@ eslint-plugin-auto-import@^0.1.1: requireindex "~1.1.0" ts-morph "^9.1.0" +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + eslint-plugin-prettier@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" @@ -4064,6 +4123,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" @@ -4511,6 +4577,13 @@ json-stringify-safe@^5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" @@ -6297,6 +6370,15 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -7167,6 +7249,16 @@ ts-node@^10.8.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" From 6ccbcff344bbf455d5517d7f18e22081f2afe77c Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Fri, 14 Apr 2023 01:58:54 +0800 Subject: [PATCH 19/74] Update package.json --- package.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/package.json b/package.json index b9f9add40..43c4e3d48 100644 --- a/package.json +++ b/package.json @@ -172,6 +172,12 @@ "error", { "newlines-between": "always-and-inside-groups", + "pathGroups": [ + { + "pattern": "../internal/IrisApiEngine", + "group": "unknown" + } + ], "alphabetize": { "order": "asc", "orderImportKind": "asc" From bdcb7152f75818cc12004a898aad4dfebe8d79c2 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Fri, 14 Apr 2023 04:01:39 +0800 Subject: [PATCH 20/74] Update eslint-plugin-auto-import+0.1.1.patch --- patches/eslint-plugin-auto-import+0.1.1.patch | 109 ++++++++++++++---- 1 file changed, 89 insertions(+), 20 deletions(-) diff --git a/patches/eslint-plugin-auto-import+0.1.1.patch b/patches/eslint-plugin-auto-import+0.1.1.patch index 002ea5542..3d98daa1d 100644 --- a/patches/eslint-plugin-auto-import+0.1.1.patch +++ b/patches/eslint-plugin-auto-import+0.1.1.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/eslint-plugin-auto-import/lib/index.js b/node_modules/eslint-plugin-auto-import/lib/index.js -index 86334aa..e9a2f35 100644 +index 86334aa..4dd0ce8 100644 --- a/node_modules/eslint-plugin-auto-import/lib/index.js +++ b/node_modules/eslint-plugin-auto-import/lib/index.js @@ -10,7 +10,7 @@ @@ -21,11 +21,76 @@ index 86334aa..e9a2f35 100644 + // 'auto-const': autoConstRule } } +\ No newline at end of file +diff --git a/node_modules/eslint-plugin-auto-import/lib/rules/auto-const.js b/node_modules/eslint-plugin-auto-import/lib/rules/auto-const.js +deleted file mode 100644 +index 307bae3..0000000 +--- a/node_modules/eslint-plugin-auto-import/lib/rules/auto-const.js ++++ /dev/null +@@ -1,22 +0,0 @@ +-var preferConst = require('eslint/lib/rules/prefer-const') +- +-module.exports = function(context) { +- var originalReport = context.report +- return preferConst(Object.create(context, { +- report: { +- value: function(report) { +- var variableDeclarator = report.node.parent +- var variableDeclaration = variableDeclarator.parent +- if (variableDeclaration.declarations && variableDeclaration.declarations.length === 1) { +- report.fix = function(fixer) { +- var startOfLet = variableDeclaration.range[0] +- return fixer.replaceTextRange([startOfLet, startOfLet + 3], 'const') +- } +- } else { +- report.message += ' This can\'t be fixed' +- } +- originalReport.call(context, report) +- } +- } +- })) +-} +\ No newline at end of file diff --git a/node_modules/eslint-plugin-auto-import/lib/rules/auto-import.js b/node_modules/eslint-plugin-auto-import/lib/rules/auto-import.js -index 4b4bb22..dba3908 100644 +index 4b4bb22..acf0749 100644 --- a/node_modules/eslint-plugin-auto-import/lib/rules/auto-import.js +++ b/node_modules/eslint-plugin-auto-import/lib/rules/auto-import.js -@@ -44,38 +44,54 @@ function isStaticRequire(node) { +@@ -13,20 +13,20 @@ var fs = require('fs') + // Rule Definition + //------------------------------------------------------------------------------ + ++var sourceFileMap = [] ++ + function getSourceFile(sourceCode) { + const codeProject = new tsMorph.Project({ useInMemoryFileSystem: true }); + + return codeProject.createSourceFile('main.tsx', sourceCode); + } + +- + function isDefaultlyExported(path) { +- const sourceCode = fs.readFileSync(path, {encoding: 'utf8'}) +- +- const sourceFile = getSourceFile(sourceCode) +- +- +- return sourceFile.getClasses().find(c => c.isDefaultExport()) !== undefined ++ if (sourceFileMap[path] === undefined) { ++ const sourceCode = fs.readFileSync(path, { encoding: 'utf8' }) ++ sourceFileMap[path] = getSourceFile(sourceCode) ++ } ++ return sourceFileMap[path].getClasses().find(c => c.isDefaultExport()) !== undefined + } + + function isStaticRequire(node) { +@@ -38,44 +38,66 @@ function isStaticRequire(node) { + node.arguments[0].type === 'Literal' && + typeof node.arguments[0].value === 'string' + } ++ + /** + * Checks if the given node is the argument of a typeof operator. + * @param {ASTNode} node The AST node being checked. * @returns {boolean} Whether or not the node is the argument of a typeof operator. */ function hasTypeOfOperator(node) { @@ -45,9 +110,13 @@ index 4b4bb22..dba3908 100644 - if (basename) { // ignore .name directories - var filePath = pathModule.join(path, file) - if (basename === name) { -+var sourceFileMap = [] ++var cacheMap = [] + +function searchDirectory(path, name, except, isNotDefaultExport) { ++ if (cacheMap[path + name] !== undefined) { ++ return cacheMap[path + name] ++ } ++ + var files = fs.readdirSync(path) + var directories = [] + for (var i = 0, l = files.length; i < l; i++) { @@ -68,10 +137,11 @@ index 4b4bb22..dba3908 100644 + if (isNotDefaultExport) { + if (filePath.endsWith('.ts')) { + if (sourceFileMap[filePath] === undefined) { -+ const sourceCode = fs.readFileSync(filePath, {encoding: 'utf8'}) ++ const sourceCode = fs.readFileSync(filePath, { encoding: 'utf8' }) + sourceFileMap[filePath] = getSourceFile(sourceCode) + } + if (sourceFileMap[filePath].getExportSymbols().find(c => c.getName() === name) !== undefined) { ++ cacheMap[path + name] = basename return basename + } } @@ -103,7 +173,7 @@ index 4b4bb22..dba3908 100644 } //------------------------------------------------------------------------------ -@@ -83,148 +99,147 @@ function searchDirectory(path, name, except) { +@@ -83,148 +105,146 @@ function searchDirectory(path, name, except) { //------------------------------------------------------------------------------ module.exports = { @@ -139,7 +209,7 @@ index 4b4bb22..dba3908 100644 + ] + }, + -+ create: function(context) { ++ create: function (context) { + var options = context.options[0]; + var considerTypeOf = options && options.typeof === true || false; + const dependencies = new Set() // keep track of dependencies @@ -157,18 +227,16 @@ index 4b4bb22..dba3908 100644 + + CallExpression(node) { + if (isStaticRequire(node)) { -+ const [ requirePath ] = node.arguments ++ const [requirePath] = node.arguments + dependencies.add(requirePath.value) + lastNode = node + } + }, -+ "Program:exit": function(/* node */) { ++ "Program:exit": function (/* node */) { + var globalScope = context.getScope() + var options = context.options[0] -+// console.log(context.eslint) + var fixed = {} -+// console.log(globalScope.block.body[0].specifiers[0]) -+ globalScope.through.forEach(function(ref) { ++ globalScope.through.forEach(function (ref) { + var identifier = ref.identifier; + + if (!considerTypeOf && hasTypeOfOperator(identifier)) { @@ -179,7 +247,7 @@ index 4b4bb22..dba3908 100644 + node: identifier, + message: '{{name}} is not defined.', + data: identifier, -+ fix: function(fixer) { ++ fix: function (fixer) { + if (fixed[undefinedIndentifier]) { + return + } @@ -199,6 +267,7 @@ index 4b4bb22..dba3908 100644 + foundModule = searchDirectory(path, undefinedIndentifier, lastPath, isNotDefaultExport) + if (foundModule) { + foundModule = (parentPrefix || './') + foundModule ++ break + } else { + lastPath = path + path = pathModule.dirname(path) @@ -239,8 +308,6 @@ index 4b4bb22..dba3908 100644 - dependencies.add(node.source.value) - lastNode = node.source - }, -- -- MemberExpression: function (node) { + } + if (foundModule) { + break @@ -264,9 +331,14 @@ index 4b4bb22..dba3908 100644 + } + } -- }, +- MemberExpression: function (node) { + isNotDefaultExport = !isDefaultlyExported(pathModule.resolve(pathModule.dirname(filename), foundModule + '.ts')) +- }, ++ var importStatement = (isNotDefaultExport ? ++ 'import { ' + undefinedIndentifier + ' }' : ++ 'import ' + undefinedIndentifier) + " from '" + foundModule + "';\n" + - CallExpression(node) { - if (isStaticRequire(node)) { - const [ requirePath ] = node.arguments @@ -282,10 +354,7 @@ index 4b4bb22..dba3908 100644 -// console.log(globalScope.block.body[0].specifiers[0]) - globalScope.through.forEach(function(ref) { - var identifier = ref.identifier; -+ var importStatement = (isNotDefaultExport ? -+ 'import { ' + undefinedIndentifier + ' }' : -+ 'import ' + undefinedIndentifier) + " from '" + foundModule + "'" - +- - if (!considerTypeOf && hasTypeOfOperator(identifier)) { - return; - } From f6609390e18d674d0e9951c000c0d85a4cb6aa5d Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Fri, 14 Apr 2023 04:14:21 +0800 Subject: [PATCH 21/74] [AUTO] Generate code by terra (#980) Co-authored-by: LichKing-2234 --- ts/Private/AgoraBase.ts | 42 ++++++++++--------- ts/Private/AgoraMediaBase.ts | 5 ++- ts/Private/IAgoraMediaEngine.ts | 3 +- ts/Private/IAgoraMediaPlayer.ts | 1 + ts/Private/IAgoraMediaPlayerSource.ts | 1 + ts/Private/IAgoraMediaRecorder.ts | 1 + ts/Private/IAgoraMusicContentCenter.ts | 1 + ts/Private/IAgoraRtcEngine.ts | 25 +++++------ ts/Private/IAgoraRtcEngineEx.ts | 1 + ts/Private/IAgoraSpatialAudio.ts | 1 + ts/Private/IAudioDeviceManager.ts | 3 +- ts/Private/impl/IAgoraMediaEngineImpl.ts | 4 +- ts/Private/impl/IAgoraMediaPlayerImpl.ts | 4 +- ts/Private/impl/IAgoraMediaRecorderImpl.ts | 4 +- .../impl/IAgoraMusicContentCenterImpl.ts | 4 +- ts/Private/impl/IAgoraRtcEngineExImpl.ts | 4 +- ts/Private/impl/IAgoraRtcEngineImpl.ts | 4 +- ts/Private/impl/IAgoraSpatialAudioImpl.ts | 4 +- ts/Private/impl/IAudioDeviceManagerImpl.ts | 4 +- 19 files changed, 72 insertions(+), 44 deletions(-) diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index f69cb630c..86b18489e 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -1,5 +1,6 @@ import './extension/AgoraBaseExtension'; import { RenderModeType, VideoSourceType } from './AgoraMediaBase'; + /** * The channel profile. */ @@ -1241,11 +1242,11 @@ export class CodecCapInfo { /** * @ignore */ - codec_type?: VideoCodecType; + codecType?: VideoCodecType; /** * @ignore */ - codec_cap_mask?: number; + codecCapMask?: number; } /** @@ -2241,11 +2242,11 @@ export enum RemoteVideoDownscaleLevel { */ export class AudioVolumeInfo { /** - * The user ID.In the local user's callback, uid is 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is the highest. + * The user ID.In the local user's callback, uid = 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is one of the three highest. */ uid?: number; /** - * The volume of the user. The value ranges between 0 (the lowest volume) and 255 (the highest volume). If the local user enables audio capturing and calls muteLocalAudioStream and set it as true to mute, the value of volume indicates the volume of locally captured audio signal. + * The volume of the user. The value ranges between 0 (lowest volume) and 255 (highest volume). */ volume?: number; /** @@ -2389,7 +2390,7 @@ export enum RtmpStreamPublishState { */ RtmpStreamPublishStateIdle = 0, /** - * 1: The streaming server and CDN server are being connected. + * 1: The SDK is connecting to Agora's streaming server and the CDN server. */ RtmpStreamPublishStateConnecting = 1, /** @@ -2397,15 +2398,16 @@ export enum RtmpStreamPublishState { */ RtmpStreamPublishStateRunning = 2, /** - * 3: The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK tries to resume RTMP or RTMPS streaming and returns this state.If the SDK successfully resumes the streaming, RtmpStreamPublishStateRunning(2) returns.If the streaming does not resume within 60 seconds or server errors occur, RtmpStreamPublishStateFailure(4) returns. If you feel that 60 seconds is too long, you can also actively try to reconnect. + * 3: The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK tries to resume RTMP or RTMPS streaming and returns this state.If the SDK successfully resumes the streaming, RtmpStreamPublishStateRunning(2) returns. + * If the streaming does not resume within 60 seconds or server errors occur, RtmpStreamPublishStateFailure(4) returns. You can also reconnect to the server by calling the stopRtmpStream method. */ RtmpStreamPublishStateRecovering = 3, /** - * 4: The RTMP or RTMPS streaming fails. After a failure, you can troubleshoot the cause of the error through the returned error code. + * 4: The RTMP or RTMPS streaming fails. See the errCode parameter for the detailed error information. */ RtmpStreamPublishStateFailure = 4, /** - * 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call stopRtmpStream to stop the Media Push normally, the SDK reports the Media Push state as RtmpStreamPublishStateDisconnecting and RtmpStreamPublishStateIdle in sequence. + * 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call stopRtmpStream to stop the streaming normally, the SDK reports the streaming state as RtmpStreamPublishStateDisconnecting and RtmpStreamPublishStateIdle in sequence. */ RtmpStreamPublishStateDisconnecting = 5, } @@ -2415,7 +2417,7 @@ export enum RtmpStreamPublishState { */ export enum RtmpStreamPublishErrorType { /** - * 0: The RTMP or RTMPS streaming has not started or has ended. + * 0: The RTMP or RTMPS streaming publishes successfully. */ RtmpStreamPublishErrorOk = 0, /** @@ -2427,11 +2429,11 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorEncryptedStreamNotAllowed = 2, /** - * 3: Timeout for the RTMP or RTMPS streaming. + * 3: Timeout for the RTMP or RTMPS streaming. Try to publish the streaming again. */ RtmpStreamPublishErrorConnectionTimeout = 3, /** - * 4: An error occurs in Agora's streaming server. + * 4: An error occurs in Agora's streaming server. Try to publish the streaming again. */ RtmpStreamPublishErrorInternalServerError = 4, /** @@ -2439,7 +2441,7 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorRtmpServerError = 5, /** - * 6: The RTMP or RTMPS streaming publishes too frequently. + * 6: The RTMP or RTMPS streaming publishing requests are too frequent. */ RtmpStreamPublishErrorTooOften = 6, /** @@ -2459,11 +2461,11 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorFormatNotSupported = 10, /** - * 11: The user role is not host, so the user cannot use the CDN live streaming function. Check your application code logic. + * 11: The user role is not host, so the user cannot use the CDN live streaming function. Check your app code logic. */ RtmpStreamPublishErrorNotBroadcaster = 11, /** - * 13: The updateRtmpTranscoding method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. + * 13: The updateRtmpTranscoding or setLiveTranscoding method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. */ RtmpStreamPublishErrorTranscodingNoMixStream = 13, /** @@ -2475,25 +2477,25 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorInvalidAppid = 15, /** - * 16: Your project does not have permission to use streaming services. Refer to Media Push to enable the Media Push permission. + * @ignore */ RtmpStreamPublishErrorInvalidPrivilege = 16, /** - * 100: The streaming has been stopped normally. After you stop the media push, the SDK returns this value. + * 100: The streaming has been stopped normally. After you call stopRtmpStream to stop streaming, the SDK returns this value. */ RtmpStreamUnpublishErrorOk = 100, } /** - * Events during the Media Push. + * Events during the media push. */ export enum RtmpStreamingEvent { /** - * 1: An error occurs when you add a background image or a watermark image in the Media Push. + * 1: An error occurs when you add a background image or a watermark image in the media push. */ RtmpStreamingEventFailedLoadImage = 1, /** - * 2: The streaming URL is already being used for Media Push. If you want to start new streaming, use a new streaming URL. + * 2: The streaming URL is already being used for CDN live streaming. If you want to start new streaming, use a new streaming URL. */ RtmpStreamingEventUrlAlreadyInUse = 2, /** @@ -3155,7 +3157,7 @@ export class VideoCanvas { */ sourceType?: VideoSourceType; /** - * The ID of the media player. You can get the media player ID by calling getMediaPlayerId . + * The ID of the media player. You can get the Device ID by calling getMediaPlayerId . */ mediaPlayerId?: number; /** diff --git a/ts/Private/AgoraMediaBase.ts b/ts/Private/AgoraMediaBase.ts index 9f8762f57..502067a73 100644 --- a/ts/Private/AgoraMediaBase.ts +++ b/ts/Private/AgoraMediaBase.ts @@ -1,5 +1,6 @@ import './extension/AgoraMediaBaseExtension'; import { EncodedVideoFrameInfo } from './AgoraBase'; + /** * The capture type of the custom video source. */ @@ -910,7 +911,7 @@ export class UserAudioSpectrumInfo { export interface IAudioSpectrumObserver { /** * Gets the statistics of a local audio spectrum. - * After successfully calling registerAudioSpectrumObserver to implement the onLocalAudioSpectrum callback in IAudioSpectrumObserver and calling enableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum. + * After successfully calling registerAudioSpectrumObserver to implement the onLocalAudioSpectrumcallback in IAudioSpectrumObserver and calling enableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum. * * @param data The audio spectrum data of the local user. See AudioSpectrumData . * @@ -979,7 +980,7 @@ export enum VideoFrameProcessMode { export interface IVideoFrameObserver { /** * Occurs each time the SDK receives a video frame captured by the local camera. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.Once the pre-processing is complete, you can directly modify videoFrame in this callback, and set the return value to true to send the modified video data to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. + * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. * * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * diff --git a/ts/Private/IAgoraMediaEngine.ts b/ts/Private/IAgoraMediaEngine.ts index c951584be..957daf797 100644 --- a/ts/Private/IAgoraMediaEngine.ts +++ b/ts/Private/IAgoraMediaEngine.ts @@ -13,6 +13,7 @@ import { IVideoEncodedFrameObserver, IVideoFrameObserver, } from './AgoraMediaBase'; + /** * The channel mode. */ @@ -126,7 +127,7 @@ export abstract class IMediaEngine { * Call this method before joining a channel. * * @param enabled Whether to enable the external audio source:true: Enable the external audio source.false: (Default) Disable the external audio source. - * @param sampleRate The sample rate (Hz) of the external audio source which can be set as 8000, 16000, 32000, 44100, or 48000. + * @param sampleRate The sample rate (Hz) of the external audio which can be set as 8000, 16000, 32000, 44100, or 48000. * @param channels The number of channels of the external audio source, which can be set as 1 (Mono) or 2 (Stereo). * @param sourceNumber The number of external audio sources. The value of this parameter should be larger than 0. The SDK creates a corresponding number of custom audio tracks based on this parameter value and names the audio tracks starting from 0. In ChannelMediaOptions , you can set publishCustomAudioSourceId to the audio track ID you want to publish. * @param localPlayback Whether to play the external audio source:true: Play the external audio source.false: (Default) Do not play the external source. diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index e64f279b6..003da18bf 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -14,6 +14,7 @@ import { PlayerStreamInfo, } from './AgoraMediaPlayerTypes'; import { IMediaPlayerSourceObserver } from './IAgoraMediaPlayerSource'; + /** * This class provides media player functions and supports multiple instances. */ diff --git a/ts/Private/IAgoraMediaPlayerSource.ts b/ts/Private/IAgoraMediaPlayerSource.ts index 9a021c07c..b6393ed17 100644 --- a/ts/Private/IAgoraMediaPlayerSource.ts +++ b/ts/Private/IAgoraMediaPlayerSource.ts @@ -7,6 +7,7 @@ import { PlayerUpdatedInfo, SrcInfo, } from './AgoraMediaPlayerTypes'; + /** * Provides callbacks for media players. */ diff --git a/ts/Private/IAgoraMediaRecorder.ts b/ts/Private/IAgoraMediaRecorder.ts index 7f349796d..c68014a65 100644 --- a/ts/Private/IAgoraMediaRecorder.ts +++ b/ts/Private/IAgoraMediaRecorder.ts @@ -3,6 +3,7 @@ import { IMediaRecorderObserver, MediaRecorderConfiguration, } from './AgoraMediaBase'; + /** * Used for recording audio and video on the client. * IMediaRecorder can record the following: diff --git a/ts/Private/IAgoraMusicContentCenter.ts b/ts/Private/IAgoraMusicContentCenter.ts index 4b17e5a26..7dad49144 100644 --- a/ts/Private/IAgoraMusicContentCenter.ts +++ b/ts/Private/IAgoraMusicContentCenter.ts @@ -1,5 +1,6 @@ import './extension/IAgoraMusicContentCenterExtension'; import { IMediaPlayer } from './IAgoraMediaPlayer'; + /** * @ignore */ diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index c8bd2dab4..019a96782 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -118,6 +118,7 @@ import { import { RtcConnection } from './IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from './IAgoraSpatialAudio'; import { IAudioDeviceManager } from './IAudioDeviceManager'; + /** * Media device types. */ @@ -1038,7 +1039,7 @@ export class ChannelMediaOptions { */ publishCameraTrack?: boolean; /** - * Whether to publish the video captured by the second camera:true: Publish the video captured by the second camera.false: (Default) Do not publish the video captured by the second camera. + * @ignore */ publishSecondaryCameraTrack?: boolean; /** @@ -1046,7 +1047,7 @@ export class ChannelMediaOptions { */ publishMicrophoneTrack?: boolean; /** - * @ignore + * Whether to publish the video captured from the screen:true: Publish the video captured from the screen.false: (Default) Do not publish the video captured from the screen.This parameter applies to Android and iOS only. */ publishScreenCaptureVideo?: boolean; /** @@ -1366,10 +1367,10 @@ export interface IRtcEngineEventHandler { /** * Reports the volume information of users. - * By default, this callback is disabled. You can enable it by calling enableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback according to the time interval set in enableAudioVolumeIndication. The SDK triggers two independent onAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the muteLocalAudioStream method to mute, the SDK continues to report the volume indication of the local user.If a remote user whose volume is one of the three highest in the channel stops publishing the audio stream for 20 seconds, the callback excludes this user's information; if all remote users stop publishing audio streams for 20 seconds, the SDK stops triggering the callback for remote users. + * By default, this callback is disabled. You can enable it by calling enableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback according to the time interval set in enableAudioVolumeIndication. The SDK triggers two independent onAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the muteLocalAudioStream method for muting, the SDK continues to report the volume indication of the local user. In the callbacks triggered, the volume information about the local user is 0 If a remote user whose volume is one of the three highest in the channel stops publishing the audio stream for 20 seconds, the callback excludes this user's information; if all remote users stop publishing audio streams for 20 seconds, the SDK stops triggering the callback for remote users. * * @param connection The connection information. See RtcConnection . - * @param speakers The volume information of the users. See AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or is sending a stream. + * @param speakers The volume information of the users, see AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or is sending a stream. * @param speakerNumber The total number of users.In the callback for the local user, if the local user is sending streams, the value of speakerNumber is 1.In the callback for remote users, the value range of speakerNumber is [0,3]. If the number of remote users who send streams is greater than or equal to three, the value of speakerNumber is 3. * @param totalVolume The volume of the speaker. The value range is [0,255].In the callback for the local user, totalVolume is the volume of the local user who sends a stream.In the callback for remote users, totalVolume is the sum of the volume of all remote users (up to three) whose instantaneous volume is the highest. */ @@ -2048,12 +2049,12 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the state of Media Push changes. - * When the state of Media Push changes, the SDK triggers this callback and reports the URL address and the current state of the Media Push. This callback indicates the state of the Media Push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter. + * Occurs when the media push state changes. + * When the media push state changes, the SDK triggers this callback and reports the URL address and the current state of the media push. This callback indicates the state of the media push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter. * - * @param url The URL address where the state of the Media Push changes. - * @param state The current state of the Media Push. See RtmpStreamPublishState . - * @param errCode The detailed error information for the Media Push. See RtmpStreamPublishErrorType . + * @param url The URL address where the state of the media push changes. + * @param state The current state of the media push. See RtmpStreamPublishState . + * @param errCode The detailed error information for the media push. See RtmpStreamPublishErrorType . */ onRtmpStreamingStateChanged?( url: string, @@ -2062,10 +2063,10 @@ export interface IRtcEngineEventHandler { ): void; /** - * Reports events during the Media Push. + * Reports events during the media push. * - * @param url The URL for Media Push. - * @param eventCode The event code of Media Push. RtmpStreamingEvent + * @param url The URL of media push. + * @param eventCode The event code of media push. See RtmpStreamingEvent . */ onRtmpStreamingEvent?(url: string, eventCode: RtmpStreamingEvent): void; diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 8f8056727..757f7b915 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -23,6 +23,7 @@ import { LeaveChannelOptions, StreamFallbackOptions, } from './IAgoraRtcEngine'; + /** * Contains connection information. */ diff --git a/ts/Private/IAgoraSpatialAudio.ts b/ts/Private/IAgoraSpatialAudio.ts index 8f827ae88..85264c349 100644 --- a/ts/Private/IAgoraSpatialAudio.ts +++ b/ts/Private/IAgoraSpatialAudio.ts @@ -1,5 +1,6 @@ import './extension/IAgoraSpatialAudioExtension'; import { RtcConnection } from './IAgoraRtcEngineEx'; + /** * The spatial position of the remote user or the media player. */ diff --git a/ts/Private/IAudioDeviceManager.ts b/ts/Private/IAudioDeviceManager.ts index d6afd9529..6966c14a3 100644 --- a/ts/Private/IAudioDeviceManager.ts +++ b/ts/Private/IAudioDeviceManager.ts @@ -1,5 +1,6 @@ import './extension/IAudioDeviceManagerExtension'; import { AudioDeviceInfo } from './IAgoraRtcEngine'; + /** * The maximum length of the device ID. */ @@ -77,7 +78,7 @@ export abstract class IAudioDeviceManager { * Sets the audio capture device. * You can call this method to change the audio route currently being used, but this does not change the default audio route. For example, if the default audio route is microphone, you call this method to set the audio route as bluetooth earphones before joinging a channel and then start a device test, the SDK conducts device test on the bluetooth earphones. After the device test is completed and you join a channel, the SDK still uses the microphone for audio capturing. * - * @param deviceId The ID of the audio capture device. You can get the media player ID by calling enumerateRecordingDevices . Connecting or disconnecting the audio device does not change the value of deviceId.The maximum length is MaxDeviceIdLengthType . + * @param deviceId The ID of the audio capture device. You can get the Device ID by calling enumerateRecordingDevices . Connecting or disconnecting the audio device does not change the value of deviceId.The maximum length is MaxDeviceIdLengthType . * * @returns * 0: Success.< 0: Failure. diff --git a/ts/Private/impl/IAgoraMediaEngineImpl.ts b/ts/Private/impl/IAgoraMediaEngineImpl.ts index bf09fd922..db4189c04 100644 --- a/ts/Private/impl/IAgoraMediaEngineImpl.ts +++ b/ts/Private/impl/IAgoraMediaEngineImpl.ts @@ -13,7 +13,7 @@ import { IVideoFrameObserver, } from '../AgoraMediaBase'; import { IMediaEngine } from '../IAgoraMediaEngine'; -import { callIrisApi } from '../internal/IrisApiEngine'; + // @ts-ignore export class IMediaEngineImpl implements IMediaEngine { registerAudioFrameObserver(observer: IAudioFrameObserver): number { @@ -426,3 +426,5 @@ export class IMediaEngineImpl implements IMediaEngine { return 'MediaEngine_unregisterVideoEncodedFrameObserver'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAgoraMediaPlayerImpl.ts b/ts/Private/impl/IAgoraMediaPlayerImpl.ts index c6d6f7c3d..c52bf3c35 100644 --- a/ts/Private/impl/IAgoraMediaPlayerImpl.ts +++ b/ts/Private/impl/IAgoraMediaPlayerImpl.ts @@ -17,7 +17,7 @@ import { IMediaPlayerVideoFrameObserver, } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; -import { callIrisApi } from '../internal/IrisApiEngine'; + // @ts-ignore export class IMediaPlayerImpl implements IMediaPlayer { getMediaPlayerId(): number { @@ -1136,3 +1136,5 @@ export function processIMediaPlayerVideoFrameObserver( break; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAgoraMediaRecorderImpl.ts b/ts/Private/impl/IAgoraMediaRecorderImpl.ts index 57192036d..e93fc7d70 100644 --- a/ts/Private/impl/IAgoraMediaRecorderImpl.ts +++ b/ts/Private/impl/IAgoraMediaRecorderImpl.ts @@ -3,7 +3,7 @@ import { MediaRecorderConfiguration, } from '../AgoraMediaBase'; import { IMediaRecorder } from '../IAgoraMediaRecorder'; -import { callIrisApi } from '../internal/IrisApiEngine'; + // @ts-ignore export class IMediaRecorderImpl implements IMediaRecorder { setMediaRecorderObserver(callback: IMediaRecorderObserver): number { @@ -55,3 +55,5 @@ export class IMediaRecorderImpl implements IMediaRecorder { return 'MediaRecorder_stopRecording'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAgoraMusicContentCenterImpl.ts b/ts/Private/impl/IAgoraMusicContentCenterImpl.ts index d9fe4e3be..28770a452 100644 --- a/ts/Private/impl/IAgoraMusicContentCenterImpl.ts +++ b/ts/Private/impl/IAgoraMusicContentCenterImpl.ts @@ -9,9 +9,9 @@ import { MusicCollection, MusicContentCenterConfiguration, } from '../IAgoraMusicContentCenter'; -import { callIrisApi } from '../internal/IrisApiEngine'; import { IMediaPlayerImpl } from './IAgoraMediaPlayerImpl'; + // @ts-ignore export class MusicChartCollectionImpl implements MusicChartCollection { getCount(): number { @@ -470,3 +470,5 @@ export class IMusicContentCenterImpl implements IMusicContentCenter { return 'MusicContentCenter_getLyric'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAgoraRtcEngineExImpl.ts b/ts/Private/impl/IAgoraRtcEngineExImpl.ts index 6aa058cf1..641b6d511 100644 --- a/ts/Private/impl/IAgoraRtcEngineExImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineExImpl.ts @@ -22,9 +22,9 @@ import { StreamFallbackOptions, } from '../IAgoraRtcEngine'; import { IRtcEngineEx, RtcConnection } from '../IAgoraRtcEngineEx'; -import { callIrisApi } from '../internal/IrisApiEngine'; import { IRtcEngineImpl } from './IAgoraRtcEngineImpl'; + // @ts-ignore export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { joinChannelEx( @@ -1514,3 +1514,5 @@ export class IRtcEngineExImpl extends IRtcEngineImpl implements IRtcEngineEx { return 'RtcEngineEx_startMediaRenderingTracingEx'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index 95445bf2d..e69036540 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -94,7 +94,7 @@ import { import { RtcConnection } from '../IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; -import { callIrisApi } from '../internal/IrisApiEngine'; + export function processIRtcEngineEventHandler( handler: IRtcEngineEventHandler, event: string, @@ -6782,3 +6782,5 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_getNativeHandle'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAgoraSpatialAudioImpl.ts b/ts/Private/impl/IAgoraSpatialAudioImpl.ts index b3d961cd7..99a8d500d 100644 --- a/ts/Private/impl/IAgoraSpatialAudioImpl.ts +++ b/ts/Private/impl/IAgoraSpatialAudioImpl.ts @@ -5,7 +5,7 @@ import { RemoteVoicePositionInfo, SpatialAudioZone, } from '../IAgoraSpatialAudio'; -import { callIrisApi } from '../internal/IrisApiEngine'; + // @ts-ignore export class IBaseSpatialAudioEngineImpl implements IBaseSpatialAudioEngine { release(): void { @@ -498,3 +498,5 @@ export class ILocalSpatialAudioEngineImpl return 'LocalSpatialAudioEngine_setRemoteAudioAttenuation'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; diff --git a/ts/Private/impl/IAudioDeviceManagerImpl.ts b/ts/Private/impl/IAudioDeviceManagerImpl.ts index 0663d3ec5..215fbe992 100644 --- a/ts/Private/impl/IAudioDeviceManagerImpl.ts +++ b/ts/Private/impl/IAudioDeviceManagerImpl.ts @@ -1,6 +1,6 @@ import { AudioDeviceInfo } from '../IAgoraRtcEngine'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; -import { callIrisApi } from '../internal/IrisApiEngine'; + // @ts-ignore export class IAudioDeviceManagerImpl implements IAudioDeviceManager { enumeratePlaybackDevices(): AudioDeviceInfo[] { @@ -439,3 +439,5 @@ export class IAudioDeviceManagerImpl implements IAudioDeviceManager { return 'AudioDeviceManager_getRecordingDefaultDevice'; } } + +import { callIrisApi } from '../internal/IrisApiEngine'; From 4b9ba27a165dd8c007352816c75bd5e2fc450d29 Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 14 Apr 2023 12:39:59 +0800 Subject: [PATCH 22/74] chore: optimize examples --- example/package.json | 2 +- example/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/example/package.json b/example/package.json index 31f582d92..94a258dfe 100644 --- a/example/package.json +++ b/example/package.json @@ -65,7 +65,7 @@ ] }, "dependencies": { - "agora-electron-sdk": "latest", + "agora-electron-sdk": "4.2.0-dev.4", "antd": "^4.20.3", "ffi-napi": "^4.0.3", "history": "^5.0.0", diff --git a/example/yarn.lock b/example/yarn.lock index 37e3d8f72..e64fa043b 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1688,10 +1688,10 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -agora-electron-sdk@latest: - version "4.1.0" - resolved "https://registry.npmmirror.com/agora-electron-sdk/-/agora-electron-sdk-4.1.0.tgz" - integrity sha512-whYlPWpNwvJrvepqKtxBHOMOfeDWZVoWcuppBZNgbEv3vMpFDw0kF3oAfUFqvD7QVOuN2YnEhdWbmuK00qhBEQ== +agora-electron-sdk@4.2.0-dev.4: + version "4.2.0-dev.4" + resolved "https://registry.yarnpkg.com/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.4.tgz#d88a339e03493808c2f94783223a0fae3fca6cc1" + integrity sha512-kfeOmkrdNaheDiBjAHWwgGtmA+59PoBFpHAr/slJPiVX/OTeREoOE9XdkC8dH2bIa1O4N20jyKNcrOq9w8Saaw== dependencies: bindings "1.2.1" buffer "^6.0.3" From 8d6a5d4954223f3427a0f5a50841b59af5d55907 Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 14 Apr 2023 12:49:32 +0800 Subject: [PATCH 23/74] chore: optimize examples --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 43c4e3d48..ca7c1e150 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.2.0-dev.4", + "version": "4.2.0-dev.5", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -77,7 +77,7 @@ "typescript": "^4.5.2" }, "engines": { - "node": ">= 16.0.0" + "node": ">= 14.0.0" }, "packageManager": "^yarn@1.22.15", "commitlint": { From 17e0c4be2577f573e6385d785d1d6ae7cda1e3d9 Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 14 Apr 2023 13:02:16 +0800 Subject: [PATCH 24/74] chore: optimize examples --- example/package.json | 2 +- example/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/example/package.json b/example/package.json index 94a258dfe..86c3f26f2 100644 --- a/example/package.json +++ b/example/package.json @@ -65,7 +65,7 @@ ] }, "dependencies": { - "agora-electron-sdk": "4.2.0-dev.4", + "agora-electron-sdk": "4.2.0-dev.5", "antd": "^4.20.3", "ffi-napi": "^4.0.3", "history": "^5.0.0", diff --git a/example/yarn.lock b/example/yarn.lock index e64fa043b..884fbae0a 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1688,10 +1688,10 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -agora-electron-sdk@4.2.0-dev.4: - version "4.2.0-dev.4" - resolved "https://registry.yarnpkg.com/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.4.tgz#d88a339e03493808c2f94783223a0fae3fca6cc1" - integrity sha512-kfeOmkrdNaheDiBjAHWwgGtmA+59PoBFpHAr/slJPiVX/OTeREoOE9XdkC8dH2bIa1O4N20jyKNcrOq9w8Saaw== +agora-electron-sdk@4.2.0-dev.5: + version "4.2.0-dev.5" + resolved "https://registry.yarnpkg.com/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.5.tgz#bfcaba0b04a40875ab79f109cd6c7dd694db6905" + integrity sha512-DAyXlVStw1KZJCRrGoNQ+CjGPG1dGkp8MnGQPhb5oC/hGPkIKhHgnp+r1upH6SLwUW5AZEX0d1qR3eB+JROwng== dependencies: bindings "1.2.1" buffer "^6.0.3" From 4db41e3b4b7c1c7258429bb2c581bc0c7ce80697 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Mon, 17 Apr 2023 16:19:54 +0800 Subject: [PATCH 25/74] [AUTO] Generate code by terra (#982) Co-authored-by: LichKing-2234 --- ts/Private/IAgoraMediaPlayer.ts | 90 ++++++------ ts/Private/IAgoraRtcEngine.ts | 58 ++++---- ts/Private/impl/IAgoraMediaPlayerImpl.ts | 168 +++++++++++------------ ts/Private/impl/IAgoraRtcEngineImpl.ts | 140 ++++++++++--------- 4 files changed, 237 insertions(+), 219 deletions(-) diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index 003da18bf..0a3f3a340 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -312,6 +312,51 @@ export abstract class IMediaPlayer { observer: IMediaPlayerSourceObserver ): number; + /** + * Registers an audio frame observer object. + * + * @param mode The use mode of the audio frame. See RawAudioFrameOpModeType . + */ + abstract registerAudioFrameObserver( + observer: IAudioPcmFrameSink, + mode?: RawAudioFrameOpModeType + ): number; + + /** + * Unregisters an audio observer. + * + * @param observer The audio observer. See IMediaPlayerAudioFrameObserver . + * + * @returns + * 0: Success.< 0: Failure. + */ + abstract unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number; + + /** + * Registers a video frame observer object. + * You need to implement the IMediaPlayerVideoFrameObserver class in this method and register callbacks according to your scenarios. After you successfully register the video frame observer, the SDK triggers the registered callbacks each time a video frame is received. + * + * @param observer The video observer, reporting the reception of each video frame. See IMediaPlayerVideoFrameObserver . + * + * @returns + * 0: Success.< 0: Failure. + */ + abstract registerVideoFrameObserver( + observer: IMediaPlayerVideoFrameObserver + ): number; + + /** + * Unregisters the video frame observer. + * + * @param observer The video observer, reporting the reception of each video frame. See IMediaPlayerVideoFrameObserver . + * + * @returns + * 0: Success.< 0: Failure. + */ + abstract unregisterVideoFrameObserver( + observer: IMediaPlayerVideoFrameObserver + ): number; + /** * @ignore */ @@ -447,51 +492,6 @@ export abstract class IMediaPlayer { * @ignore */ abstract setSoundPositionParams(pan: number, gain: number): number; - - /** - * Registers an audio frame observer object. - * - * @param mode The use mode of the audio frame. See RawAudioFrameOpModeType . - */ - abstract registerAudioFrameObserver( - observer: IAudioPcmFrameSink, - mode?: RawAudioFrameOpModeType - ): number; - - /** - * Unregisters an audio observer. - * - * @param observer The audio observer. See IMediaPlayerAudioFrameObserver . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number; - - /** - * Registers a video frame observer object. - * You need to implement the IMediaPlayerVideoFrameObserver class in this method and register callbacks according to your scenarios. After you successfully register the video frame observer, the SDK triggers the registered callbacks each time a video frame is received. - * - * @param observer The video observer, reporting the reception of each video frame. See IMediaPlayerVideoFrameObserver . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract registerVideoFrameObserver( - observer: IMediaPlayerVideoFrameObserver - ): number; - - /** - * Unregisters the video frame observer. - * - * @param observer The video observer, reporting the reception of each video frame. See IMediaPlayerVideoFrameObserver . - * - * @returns - * 0: Success.< 0: Failure. - */ - abstract unregisterVideoFrameObserver( - observer: IMediaPlayerVideoFrameObserver - ): number; } /** diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index 019a96782..f366885a4 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -1087,9 +1087,9 @@ export class ChannelMediaOptions { */ publishMediaPlayerVideoTrack?: boolean; /** - * Whether to publish the local transcoded video:true: Publish the local transcoded video.false: (Default) Do not publish the local transcoded video. + * @ignore */ - publishTrancodedVideoTrack?: boolean; + publishTranscodedVideoTrack?: boolean; /** * Whether to automatically subscribe to all remote audio streams when the user joins a channel:true: (Default) Automatically subscribe to all remote audio streams.false: Do not automatically subscribe to any remote audio streams. */ @@ -4796,7 +4796,7 @@ export abstract class IRtcEngine { /** * @ignore */ - abstract startScreenCaptureDesktop( + abstract startScreenCaptureBySourceType( sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): number; @@ -4830,6 +4830,14 @@ export abstract class IRtcEngine { */ abstract setScreenCaptureScenario(screenScenario: ScreenScenarioType): number; + /** + * Stops screen sharing. + * + * @returns + * 0: Success.< 0: Failure. + */ + abstract stopScreenCapture(): number; + /** * Stops the local video preview. * After calling startPreview to start the preview, if you want to close the local video preview, call this method.Call this method before joining a channel or after leaving a channel. @@ -4839,7 +4847,7 @@ export abstract class IRtcEngine { * @returns * < 0: Failure. */ - abstract stopScreenCapture(sourceType?: VideoSourceType): number; + abstract stopScreenCaptureBySourceType(sourceType: VideoSourceType): number; /** * Retrieves the call ID. @@ -5590,27 +5598,7 @@ export abstract class IRtcEngine { /** * @ignore */ - abstract getNtpTimeInMs(): number; - - /** - * Destroys a video renderer object. - * - * @param view The HTMLElement object to be destroyed. - */ - abstract destroyRendererByView(view: any): void; - - /** - * Destroys multiple video renderer objects at one time. - * - * @param sourceType The type of the video frame, see VideoSourceType . - * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters:All lowercase English letters: a to z.All uppercase English letters: A to Z.All numeric characters: 0 to 9.Space"!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," - * @param uid The user ID of the remote user. - */ - abstract destroyRendererByConfig( - sourceType: VideoSourceType, - channelId?: string, - uid?: number - ): void; + abstract getNtpWallTimeInMs(): number; /** * Gets the IAudioDeviceManager object to manage audio devices. @@ -5680,6 +5668,26 @@ export abstract class IRtcEngine { */ abstract setMaxMetadataSize(size: number): number; + /** + * Destroys a video renderer object. + * + * @param view The HTMLElement object to be destroyed. + */ + abstract destroyRendererByView(view: any): void; + + /** + * Destroys multiple video renderer objects at one time. + * + * @param sourceType The type of the video frame, see VideoSourceType . + * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters:All lowercase English letters: a to z.All uppercase English letters: A to Z.All numeric characters: 0 to 9.Space"!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," + * @param uid The user ID of the remote user. + */ + abstract destroyRendererByConfig( + sourceType: VideoSourceType, + channelId?: string, + uid?: number + ): void; + /** * Unregisters the encoded audio frame observer. * diff --git a/ts/Private/impl/IAgoraMediaPlayerImpl.ts b/ts/Private/impl/IAgoraMediaPlayerImpl.ts index c52bf3c35..531c84913 100644 --- a/ts/Private/impl/IAgoraMediaPlayerImpl.ts +++ b/ts/Private/impl/IAgoraMediaPlayerImpl.ts @@ -531,6 +531,90 @@ export class IMediaPlayerImpl implements IMediaPlayer { return 'MediaPlayer_unregisterPlayerSourceObserver'; } + registerAudioFrameObserver( + observer: IAudioPcmFrameSink, + mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly + ): number { + const apiType = this.getApiTypeFromRegisterAudioFrameObserver( + observer, + mode + ); + const jsonParams = { + observer: observer, + mode: mode, + toJSON: () => { + return { + mode: mode, + }; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromRegisterAudioFrameObserver( + observer: IAudioPcmFrameSink, + mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly + ): string { + return 'MediaPlayer_registerAudioFrameObserver'; + } + + unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number { + const apiType = this.getApiTypeFromUnregisterAudioFrameObserver(observer); + const jsonParams = { + observer: observer, + toJSON: () => { + return {}; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromUnregisterAudioFrameObserver( + observer: IAudioPcmFrameSink + ): string { + return 'MediaPlayer_unregisterAudioFrameObserver'; + } + + registerVideoFrameObserver(observer: IMediaPlayerVideoFrameObserver): number { + const apiType = this.getApiTypeFromRegisterVideoFrameObserver(observer); + const jsonParams = { + observer: observer, + toJSON: () => { + return {}; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromRegisterVideoFrameObserver( + observer: IMediaPlayerVideoFrameObserver + ): string { + return 'MediaPlayer_registerVideoFrameObserver'; + } + + unregisterVideoFrameObserver( + observer: IMediaPlayerVideoFrameObserver + ): number { + const apiType = this.getApiTypeFromUnregisterVideoFrameObserver(observer); + const jsonParams = { + observer: observer, + toJSON: () => { + return {}; + }, + }; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromUnregisterVideoFrameObserver( + observer: IMediaPlayerVideoFrameObserver + ): string { + return 'MediaPlayer_unregisterVideoFrameObserver'; + } + registerMediaPlayerAudioSpectrumObserver( observer: IAudioSpectrumObserver, intervalInMS: number @@ -870,90 +954,6 @@ export class IMediaPlayerImpl implements IMediaPlayer { ): string { return 'MediaPlayer_setSoundPositionParams'; } - - registerAudioFrameObserver( - observer: IAudioPcmFrameSink, - mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly - ): number { - const apiType = this.getApiTypeFromRegisterAudioFrameObserver( - observer, - mode - ); - const jsonParams = { - observer: observer, - mode: mode, - toJSON: () => { - return { - mode: mode, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromRegisterAudioFrameObserver( - observer: IAudioPcmFrameSink, - mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly - ): string { - return 'MediaPlayer_registerAudioFrameObserver'; - } - - unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number { - const apiType = this.getApiTypeFromUnregisterAudioFrameObserver(observer); - const jsonParams = { - observer: observer, - toJSON: () => { - return {}; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromUnregisterAudioFrameObserver( - observer: IAudioPcmFrameSink - ): string { - return 'MediaPlayer_unregisterAudioFrameObserver'; - } - - registerVideoFrameObserver(observer: IMediaPlayerVideoFrameObserver): number { - const apiType = this.getApiTypeFromRegisterVideoFrameObserver(observer); - const jsonParams = { - observer: observer, - toJSON: () => { - return {}; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromRegisterVideoFrameObserver( - observer: IMediaPlayerVideoFrameObserver - ): string { - return 'MediaPlayer_registerVideoFrameObserver'; - } - - unregisterVideoFrameObserver( - observer: IMediaPlayerVideoFrameObserver - ): number { - const apiType = this.getApiTypeFromUnregisterVideoFrameObserver(observer); - const jsonParams = { - observer: observer, - toJSON: () => { - return {}; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromUnregisterVideoFrameObserver( - observer: IMediaPlayerVideoFrameObserver - ): string { - return 'MediaPlayer_unregisterVideoFrameObserver'; - } } // @ts-ignore diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index e69036540..17b6c837d 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -5009,11 +5009,11 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_startScreenCapture'; } - startScreenCaptureDesktop( + startScreenCaptureBySourceType( sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): number { - const apiType = this.getApiTypeFromStartScreenCaptureDesktop( + const apiType = this.getApiTypeFromStartScreenCaptureBySourceType( sourceType, config ); @@ -5031,11 +5031,11 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromStartScreenCaptureDesktop( + protected getApiTypeFromStartScreenCaptureBySourceType( sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): string { - return 'RtcEngine_startScreenCaptureDesktop'; + return 'RtcEngine_startScreenCaptureBySourceType'; } updateScreenCapture(captureParams: ScreenCaptureParameters2): number { @@ -5089,10 +5089,20 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setScreenCaptureScenario'; } - stopScreenCapture( - sourceType: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary - ): number { - const apiType = this.getApiTypeFromStopScreenCapture(sourceType); + stopScreenCapture(): number { + const apiType = this.getApiTypeFromStopScreenCapture(); + const jsonParams = {}; + const jsonResults = callIrisApi.call(this, apiType, jsonParams); + return jsonResults.result; + } + + protected getApiTypeFromStopScreenCapture(): string { + return 'RtcEngine_stopScreenCapture'; + } + + stopScreenCaptureBySourceType(sourceType: VideoSourceType): number { + const apiType = + this.getApiTypeFromStopScreenCaptureBySourceType(sourceType); const jsonParams = { sourceType: sourceType, toJSON: () => { @@ -5105,10 +5115,10 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromStopScreenCapture( - sourceType: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + protected getApiTypeFromStopScreenCaptureBySourceType( + sourceType: VideoSourceType ): string { - return 'RtcEngine_stopScreenCapture'; + return 'RtcEngine_stopScreenCaptureBySourceType'; } getCallId(): string { @@ -6593,65 +6603,15 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_enableInstantMediaRendering'; } - getNtpTimeInMs(): number { - const apiType = this.getApiTypeFromGetNtpTimeInMs(); + getNtpWallTimeInMs(): number { + const apiType = this.getApiTypeFromGetNtpWallTimeInMs(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); return jsonResults.result; } - protected getApiTypeFromGetNtpTimeInMs(): string { - return 'RtcEngine_getNtpTimeInMs'; - } - - destroyRendererByView(view: any): void { - const apiType = this.getApiTypeFromDestroyRendererByView(view); - const jsonParams = { - view: view, - toJSON: () => { - return { - view: view, - }; - }, - }; - callIrisApi.call(this, apiType, jsonParams); - } - - protected getApiTypeFromDestroyRendererByView(view: any): string { - return 'RtcEngine_destroyRendererByView'; - } - - destroyRendererByConfig( - sourceType: VideoSourceType, - channelId?: string, - uid: number = 0 - ): void { - const apiType = this.getApiTypeFromDestroyRendererByConfig( - sourceType, - channelId, - uid - ); - const jsonParams = { - sourceType: sourceType, - channelId: channelId, - uid: uid, - toJSON: () => { - return { - sourceType: sourceType, - channelId: channelId, - uid: uid, - }; - }, - }; - callIrisApi.call(this, apiType, jsonParams); - } - - protected getApiTypeFromDestroyRendererByConfig( - sourceType: VideoSourceType, - channelId?: string, - uid: number = 0 - ): string { - return 'RtcEngine_destroyRendererByConfig'; + protected getApiTypeFromGetNtpWallTimeInMs(): string { + return 'RtcEngine_getNtpWallTimeInMs'; } getAudioDeviceManager(): IAudioDeviceManager { @@ -6750,6 +6710,56 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_setMaxMetadataSize'; } + destroyRendererByView(view: any): void { + const apiType = this.getApiTypeFromDestroyRendererByView(view); + const jsonParams = { + view: view, + toJSON: () => { + return { + view: view, + }; + }, + }; + callIrisApi.call(this, apiType, jsonParams); + } + + protected getApiTypeFromDestroyRendererByView(view: any): string { + return 'RtcEngine_destroyRendererByView'; + } + + destroyRendererByConfig( + sourceType: VideoSourceType, + channelId?: string, + uid: number = 0 + ): void { + const apiType = this.getApiTypeFromDestroyRendererByConfig( + sourceType, + channelId, + uid + ); + const jsonParams = { + sourceType: sourceType, + channelId: channelId, + uid: uid, + toJSON: () => { + return { + sourceType: sourceType, + channelId: channelId, + uid: uid, + }; + }, + }; + callIrisApi.call(this, apiType, jsonParams); + } + + protected getApiTypeFromDestroyRendererByConfig( + sourceType: VideoSourceType, + channelId?: string, + uid: number = 0 + ): string { + return 'RtcEngine_destroyRendererByConfig'; + } + unregisterAudioEncodedFrameObserver( observer: IAudioEncodedFrameObserver ): number { From 5f8b567400b2cafa9cb10bc7fead0afa5fcc14e8 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 18 Apr 2023 11:36:12 +0800 Subject: [PATCH 26/74] chore: optimize examples --- example/package.json | 3 + example/src/renderer/App.tsx | 90 +++---- .../src/renderer/components/BaseComponent.tsx | 10 +- .../components/RtcSurfaceView/index.tsx | 6 +- example/src/renderer/components/ui/index.tsx | 16 +- .../LocalVideoTranscoder.tsx | 27 ++- .../MusicContentCenter/MusicContentCenter.tsx | 22 +- .../advanced/ScreenShare/ScreenShare.tsx | 2 +- .../src/renderer/examples/advanced/index.ts | 223 ++++++++++-------- .../JoinChannelVideo/JoinChannelVideo.tsx | 35 +-- example/src/renderer/examples/basic/index.ts | 36 +-- .../examples/config/AuthInfoScreen/index.tsx | 1 + .../hook/DeviceManager/DeviceManager.tsx | 1 - .../JoinChannelAudio/JoinChannelAudio.tsx | 1 - .../JoinChannelVideo/JoinChannelVideo.tsx | 1 - .../JoinMultipleChannel.tsx | 1 - .../examples/hook/StringUid/StringUid.tsx | 1 - .../VirtualBackground/VirtualBackground.tsx | 1 - .../hook/components/BaseComponent.tsx | 9 +- .../hook/components/BaseRenderUsers.tsx | 11 +- example/src/renderer/examples/hook/index.ts | 64 +++-- example/src/renderer/index.tsx | 1 + example/src/renderer/utils/base64.ts | 4 +- example/src/renderer/utils/index.ts | 7 +- example/yarn.lock | 58 ++++- scripts/getConfig.js | 1 - ts/Private/internal/IrisApiEngine.ts | 2 - ts/Renderer/AgoraView.ts | 1 + ts/Renderer/GlRenderer/index.ts | 31 +-- ts/Renderer/RendererManager.ts | 9 +- ts/Renderer/YUVCanvasRenderer/index.ts | 6 +- tsconfig.build.json | 5 + tsconfig.json | 43 ++-- 33 files changed, 388 insertions(+), 341 deletions(-) create mode 100644 tsconfig.build.json diff --git a/example/package.json b/example/package.json index 86c3f26f2..3c7f69567 100644 --- a/example/package.json +++ b/example/package.json @@ -67,6 +67,7 @@ "dependencies": { "agora-electron-sdk": "4.2.0-dev.5", "antd": "^4.20.3", + "download": "^8.0.0", "ffi-napi": "^4.0.3", "history": "^5.0.0", "react": "^18.1.0", @@ -82,7 +83,9 @@ "@electron/rebuild": "^3.2.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.6", "@teamsupercell/typings-for-css-modules-loader": "^2.5.1", + "@types/download": "^8.0.2", "@types/react": "^16.9.44", + "@types/react-color": "^3.0.6", "@types/react-dom": "^18.0.3", "@types/react-router-dom": "^5.1.6", "electron": "18.2.3", diff --git a/example/src/renderer/App.tsx b/example/src/renderer/App.tsx index 0f8fcfed7..b643c7f9d 100644 --- a/example/src/renderer/App.tsx +++ b/example/src/renderer/App.tsx @@ -11,10 +11,13 @@ import { } from 'react-router-dom'; import './App.global.scss'; -import advanceRoute from './examples/advanced'; -import basicRoute from './examples/basic'; + +import Advanced from './examples/advanced'; +import Basic from './examples/basic'; import AuthInfoScreen from './examples/config/AuthInfoScreen'; -import hooksRoutes from './examples/hook'; +import Hooks from './examples/hook'; + +const DATA = [Basic, Advanced, Hooks]; const { Content, Footer, Sider } = Layout; const { SubMenu } = Menu; @@ -30,7 +33,7 @@ class App extends React.Component { this.setState({ version: engine.getVersion() }); } - onCollapse = (collapsed) => { + onCollapse = (collapsed: any) => { console.log(collapsed); this.setState({ collapsed }); }; @@ -46,62 +49,41 @@ class App extends React.Component { }> Setting - } title="Basic"> - {basicRoute.map(({ path, title }, index) => { - console.log('path, title ', path, title); - return ( - - {title} - - ); - })} - - } title="Advanced"> - {advanceRoute.map(({ path, title }, index) => { - return ( - - {title} - - ); - })} - - } title="Hooks"> - {hooksRoutes.map(({ path, title }, index) => { - console.log('path, title---> ', path, title); - return ( - - {title} - - ); - })} - + {DATA.map((value, index) => { + return ( + } + title={value.title} + > + {value.data.map(({ name }) => { + return ( + + {name} + + ); + })} + + ); + })} } exact={true} /> - {basicRoute.map((route: any, index) => ( - } - /> - ))} - {advanceRoute.map((route: any, index) => ( - } - /> - ))} - {hooksRoutes.map((route: any, index) => ( - } - /> - ))} + {DATA.map((value) => { + return value.data.map(({ name, component }) => { + const RouteComponent = component; + return ( + } + /> + ); + }); + })} diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index 85a6f7f68..e74cecf34 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -136,18 +136,19 @@ export abstract class BaseComponent< } render() { + const users = this.renderUsers(); const configuration = this.renderConfiguration(); return ( - {this.renderUsers()} + {users ? this.renderUsers() : undefined} {this.renderChannel()} {configuration ? ( <> - The Configuration of {this.constructor.name} + {`The Configuration of ${this.constructor.name}`} {configuration} @@ -184,9 +185,10 @@ export abstract class BaseComponent< const { startPreview, joinChannelSuccess, remoteUsers } = this.state; return ( <> - {startPreview || joinChannelSuccess ? ( + {!!startPreview || joinChannelSuccess ? this.renderVideo(0) : undefined} + {!!startPreview || joinChannelSuccess ? ( { return this.renderVideo(item); }} diff --git a/example/src/renderer/components/RtcSurfaceView/index.tsx b/example/src/renderer/components/RtcSurfaceView/index.tsx index 1876b55e6..38458f363 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.tsx +++ b/example/src/renderer/components/RtcSurfaceView/index.tsx @@ -7,7 +7,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import { Component } from 'react'; +import React, { Component } from 'react'; import { getRandomInt } from '../../utils'; @@ -24,11 +24,11 @@ interface State { } class RtcSurfaceView extends Component { - constructor(props) { + constructor(props: Props) { super(props); this.state = { isMirror: - props.mirrorMode === VideoMirrorModeType.VideoMirrorModeDisabled, + props.canvas.mirrorMode === VideoMirrorModeType.VideoMirrorModeDisabled, uniqueId: getRandomInt(), }; } diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index 1ec724590..605ab9f1c 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -264,31 +264,31 @@ export const AgoraDropdown = ( }))} selectedKeys={ _value?.map - ? _value.map((v) => v.toString()) + ? _value.map((v: any) => v.toString()) : [_value?.toString()] } onSelect={(info) => { - let key; + let key: any; if (typeof _value === 'number') { key = +info.key; } else { key = info.key; } const index = _items?.findIndex(({ value }) => { - return value === key; + return value == key; }); setValue(key); props.onValueChange?.call(this, key, index ?? -1); }} onDeselect={(info) => { - let key; + let key: any; if (typeof _value === 'number') { key = +info.key; } else { key = info.key; } const index = _items?.findIndex(({ value }) => { - return value === key; + return value == key; }); setValue(key); props.onValueChange?.call(this, key, index ?? -1); @@ -300,14 +300,14 @@ export const AgoraDropdown = ( {_value?.map ? _value ?.map( - (v) => + (v: any) => _items?.find((item) => { - return v === item.value; + return v == item.value; })?.label ) ?.toString() : _items?.find((item) => { - return _value === item.value; + return _value == item.value; })?.label} diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index b0a602654..778982020 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -133,7 +133,7 @@ export default class LocalVideoTranscoder clientRoleType: ClientRoleType.ClientRoleBroadcaster, publishMicrophoneTrack: false, publishCameraTrack: false, - publishTrancodedVideoTrack: true, + publishTranscodedVideoTrack: true, }); } @@ -154,13 +154,21 @@ export default class LocalVideoTranscoder }; startCameraCapture = (deviceId: string) => { - const type = this._getVideoSourceTypeCamera(deviceId); - this.engine?.startCameraCapture(type, { deviceId }); + const sourceType = this._getVideoSourceTypeCamera(deviceId); + if (sourceType === undefined) { + this.error('sourceType is invalid'); + return; + } + this.engine?.startCameraCapture(sourceType, { deviceId }); }; stopCameraCapture = (deviceId: string) => { - const type = this._getVideoSourceTypeCamera(deviceId); - this.engine?.stopScreenCapture(type); + const sourceType = this._getVideoSourceTypeCamera(deviceId); + if (sourceType === undefined) { + this.error('sourceType is invalid'); + return; + } + this.engine?.stopScreenCaptureBySourceType(sourceType); }; /** @@ -187,7 +195,7 @@ export default class LocalVideoTranscoder this.error(`targetSource is invalid`); } - this.engine?.startScreenCaptureDesktop( + this.engine?.startScreenCaptureBySourceType( VideoSourceType.VideoSourceScreenPrimary, { isCaptureWindow: @@ -216,7 +224,9 @@ export default class LocalVideoTranscoder * Step 3-4 (Optional): stopScreenCapture */ stopScreenCapture = () => { - this.engine?.stopScreenCapture(VideoSourceType.VideoSourceScreenPrimary); + this.engine?.stopScreenCaptureBySourceType( + VideoSourceType.VideoSourceScreenPrimary + ); this.setState({ startScreenCapture: false }); }; @@ -312,7 +322,7 @@ export default class LocalVideoTranscoder } if (imageUrl) { - const getImageType = (url) => { + const getImageType = (url: string): VideoSourceType | undefined => { if (url.endsWith('.png')) { return VideoSourceType.VideoSourceRtcImagePng; } else if (url.endsWith('.jepg') || url.endsWith('.jpg')) { @@ -320,6 +330,7 @@ export default class LocalVideoTranscoder } else if (url.endsWith('.gif')) { return VideoSourceType.VideoSourceRtcImageGif; } + return undefined; }; streams.push({ sourceType: getImageType(imageUrl), diff --git a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx index e681de0e2..ea85b95d7 100644 --- a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx +++ b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx @@ -490,19 +490,15 @@ export default class MusicContentCenter protected renderUsers(): React.ReactNode { const { musics, songCode } = this.state; - return ( - <> - {songCode >= 0 ? ( - { - return value.songCode === songCode; - })?.poster - } - /> - ) : undefined} - - ); + return +songCode >= 0 ? ( + { + return value.songCode == songCode; + })?.poster + } + /> + ) : undefined; } protected renderAction(): React.ReactNode { diff --git a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx index a6d640636..2bee527b3 100644 --- a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx @@ -579,7 +579,7 @@ export default class ScreenShare { - const { a, r, g, b } = color.rgb; + const { a = 1, r, g, b } = color.rgb; const argbHex = `${((a * 255) | (1 << 8)).toString(16).slice(1)}` + `${(r | (1 << 8)).toString(16).slice(1)}` + diff --git a/example/src/renderer/examples/advanced/index.ts b/example/src/renderer/examples/advanced/index.ts index 2432870d6..97985c2cf 100644 --- a/example/src/renderer/examples/advanced/index.ts +++ b/example/src/renderer/examples/advanced/index.ts @@ -29,101 +29,130 @@ import VideoEncoderConfiguration from './VideoEncoderConfiguration/VideoEncoderC import VirtualBackground from './VirtualBackground/VirtualBackground'; import VoiceChanger from './VoiceChanger/VoiceChanger'; -const advanceRoute = [ - { path: '/AudioMixing', component: AudioMixing, title: 'AudioMixing' }, - { path: '/AudioSpectrum', component: AudioSpectrum, title: 'AudioSpectrum' }, - { path: '/BeautyEffect', component: BeautyEffect, title: 'BeautyEffect' }, - { - path: '/ChannelMediaRelay', - component: ChannelMediaRelay, - title: 'ChannelMediaRelay', - }, - { - path: '/ContentInspect', - component: ContentInspect, - title: 'ContentInspect', - }, - { - path: '/DeviceManager', - component: DeviceManager, - title: 'DeviceManager', - }, - { - path: '/DirectCdnStreaming', - component: DirectCdnStreaming, - title: 'DirectCdnStreaming', - }, - { - path: '/EncodedVideoFrame', - component: EncodedVideoFrame, - title: 'EncodedVideoFrame', - }, - { path: '/Encryption', component: Encryption, title: 'Encryption' }, - { path: '/Extension', component: Extension, title: 'Extension' }, - { - path: '/JoinMultipleChannel', - component: JoinMultipleChannel, - title: 'JoinMultipleChannel', - }, - { - path: '/LocalSpatialAudioEngine', - component: LocalSpatialAudioEngine, - title: 'LocalSpatialAudioEngine', - }, - { - path: '/LocalVideoTranscoder', - component: LocalVideoTranscoder, - title: 'LocalVideoTranscoder', - }, - { path: '/MediaPlayer', component: MediaPlayer, title: 'MediaPlayer' }, - { path: '/MediaRecorder', component: MediaRecorder, title: 'MediaRecorder' }, - { - path: '/MusicContentCenter', - component: MusicContentCenter, - title: 'MusicContentCenter', - }, - { path: '/PlayEffect', component: PlayEffect, title: 'PlayEffect' }, - { - path: '/ProcessVideoRawData', - component: ProcessVideoRawData, - title: 'ProcessVideoRawData', - }, - { - path: '/PushVideoFrame', - component: PushVideoFrame, - title: 'PushVideoFrame', - }, - { path: '/RhythmPlayer', component: RhythmPlayer, title: 'RhythmPlayer' }, - { - path: '/RTMPStreaming', - component: RTMPStreaming, - title: 'RTMPStreaming', - }, - { path: '/ScreenShare', component: ScreenShare, title: 'ScreenShare' }, - { path: '/SendMetadata', component: SendMetadata, title: 'SendMetadata' }, - { - path: '/SendMultiVideoStream', - component: SendMultiVideoStream, - title: 'SendMultiVideoStream', - }, - { path: '/SpatialAudio', component: SpatialAudio, title: 'SpatialAudio' }, - { - path: '/StreamMessage', - component: StreamMessage, - title: 'StreamMessage', - }, - { path: '/TakeSnapshot', component: TakeSnapshot, title: 'TakeSnapshot' }, - { - path: '/VideoEncoderConfiguration', - component: VideoEncoderConfiguration, - title: 'VideoEncoderConfiguration', - }, - { - path: '/VirtualBackground', - component: VirtualBackground, - title: 'VirtualBackground', - }, - { path: '/VoiceChanger', component: VoiceChanger, title: 'VoiceChanger' }, -]; +const Advanced = { + title: 'Advanced', + data: [ + { + name: 'AudioMixing', + component: AudioMixing, + }, + { + name: 'AudioSpectrum', + component: AudioSpectrum, + }, + { + name: 'BeautyEffect', + component: BeautyEffect, + }, + { + name: 'ChannelMediaRelay', + component: ChannelMediaRelay, + }, + { + name: 'ContentInspect', + component: ContentInspect, + }, + { + name: 'DeviceManager', + component: DeviceManager, + }, + { + name: 'DirectCdnStreaming', + component: DirectCdnStreaming, + }, + { + name: 'EncodedVideoFrame', + component: EncodedVideoFrame, + }, + { + name: 'Encryption', + component: Encryption, + }, + { + name: 'Extension', + component: Extension, + }, + { + name: 'JoinMultipleChannel', + component: JoinMultipleChannel, + }, + { + name: 'LocalSpatialAudioEngine', + component: LocalSpatialAudioEngine, + }, + { + name: 'LocalVideoTranscoder', + component: LocalVideoTranscoder, + }, + { + name: 'MediaPlayer', + component: MediaPlayer, + }, + { + name: 'MediaRecorder', + component: MediaRecorder, + }, + { + name: 'MusicContentCenter', + component: MusicContentCenter, + }, + { + name: 'PlayEffect', + component: PlayEffect, + }, + { + name: 'ProcessVideoRawData', + component: ProcessVideoRawData, + }, + { + name: 'PushVideoFrame', + component: PushVideoFrame, + }, + { + name: 'RhythmPlayer', + component: RhythmPlayer, + }, + { + name: 'RTMPStreaming', + component: RTMPStreaming, + }, + { + name: 'ScreenShare', + component: ScreenShare, + }, + { + name: 'SendMetadata', + component: SendMetadata, + }, + { + name: 'SendMultiVideoStream', + component: SendMultiVideoStream, + }, + { + name: 'SpatialAudio', + component: SpatialAudio, + }, + { + name: 'StreamMessage', + component: StreamMessage, + }, + { + name: 'TakeSnapshot', + component: TakeSnapshot, + }, + { + name: 'VideoEncoderConfiguration', + component: VideoEncoderConfiguration, + }, + { + name: 'VirtualBackground', + component: VirtualBackground, + }, + { + name: 'VoiceChanger', + component: VoiceChanger, + }, + ], +}; -export default advanceRoute; +export default Advanced; diff --git a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx index 06d7d0935..a0da501f6 100644 --- a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx @@ -17,13 +17,6 @@ import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; -import { - AgoraButton, - AgoraCard, - AgoraList, - AgoraText, -} from '../../../components/ui'; import Config from '../../../config/agora.config'; interface State extends BaseVideoComponentState {} @@ -170,34 +163,10 @@ export default class JoinChannelVideo } protected renderUsers(): React.ReactNode { - const { startPreview, joinChannelSuccess, remoteUsers } = this.state; - return ( - <> - {startPreview || joinChannelSuccess ? ( - - ) : undefined} - - ); + return super.renderUsers(); } protected renderVideo(uid: number): ReactElement { - const { enableVideo, remoteUsers } = this.state; - return ( - - Click view to mirror - {enableVideo ? : undefined} - { - this.setState({ - remoteUsers: [...remoteUsers!, uid], - }); - }} - /> - - ); + return super.renderVideo(uid); } } diff --git a/example/src/renderer/examples/basic/index.ts b/example/src/renderer/examples/basic/index.ts index fe2426db5..255daface 100644 --- a/example/src/renderer/examples/basic/index.ts +++ b/example/src/renderer/examples/basic/index.ts @@ -2,22 +2,22 @@ import JoinChannelAudio from './JoinChannelAudio/JoinChannelAudio'; import JoinChannelVideo from './JoinChannelVideo/JoinChannelVideo'; import StringUid from './StringUid/StringUid'; -const basicRoutes = [ - { - path: '/JoinChannelVideo', - component: JoinChannelVideo, - title: 'JoinChannelVideo', - }, - { - path: '/JoinChannelAudio', - component: JoinChannelAudio, - title: 'JoinChannelAudio', - }, - { - path: '/StringUid', - component: StringUid, - title: 'StringUid', - }, -]; +const Basic = { + title: 'Basic', + data: [ + { + name: 'JoinChannelAudio', + component: JoinChannelAudio, + }, + { + name: 'JoinChannelVideo', + component: JoinChannelVideo, + }, + { + name: 'StringUid', + component: StringUid, + }, + ], +}; -export default basicRoutes; +export default Basic; diff --git a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx index cdce99af3..82b940750 100644 --- a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx +++ b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx @@ -1,5 +1,6 @@ import { AgoraEnv } from 'agora-electron-sdk'; import { Button, Card, Checkbox, Form, Input, Row } from 'antd'; +import React from 'react'; import config from '../../../config/agora.config'; diff --git a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx index 94b9f45a1..8ef02384c 100644 --- a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx @@ -255,7 +255,6 @@ export default function DeviceManager() { return ( ( ( ( ( ( ReactNode; renderChannel: () => ReactNode; renderUsers?: () => ReactNode; @@ -13,23 +12,21 @@ interface Props { export function BaseComponent({ name, - enableVideo, renderConfiguration, renderChannel, renderUsers, renderAction, }: Props) { + const users = renderUsers ? renderUsers() : undefined; const configuration = renderConfiguration ? renderConfiguration() : undefined; return ( - - {renderUsers ? renderUsers() : undefined} - + {users} {renderChannel()} {configuration ? ( <> - The Configuration of {name} + {`The Configuration of ${name}`} {configuration} ) : undefined} diff --git a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx index 724da95f5..1f54d6411 100644 --- a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx +++ b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx @@ -4,28 +4,29 @@ import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraCard, AgoraList, AgoraText } from '../../../components/ui'; export interface BaseRenderUsersProps { - renderVideo?: (uid: number) => ReactElement; startPreview?: boolean; joinChannelSuccess: boolean; remoteUsers: number[]; + renderVideo?: (uid: number) => ReactElement; } function BaseRenderUsers({ + startPreview, + joinChannelSuccess, + remoteUsers, renderVideo = (uid) => ( Click view to mirror ), - startPreview, - joinChannelSuccess, - remoteUsers, }: BaseRenderUsersProps) { return ( <> + {!!startPreview || joinChannelSuccess ? renderVideo(0) : undefined} {!!startPreview || joinChannelSuccess ? ( { return renderVideo(item); }} diff --git a/example/src/renderer/examples/hook/index.ts b/example/src/renderer/examples/hook/index.ts index 4c55faf86..0a5c65335 100644 --- a/example/src/renderer/examples/hook/index.ts +++ b/example/src/renderer/examples/hook/index.ts @@ -5,37 +5,33 @@ import JoinMultipleChannel from './JoinMultipleChannel/JoinMultipleChannel'; import StringUid from './StringUid/StringUid'; import VirtualBackground from './VirtualBackground/VirtualBackground'; -const hooksRoutes = [ - { - path: '/JoinChannelVideoWithHook', - component: JoinChannelVideo, - title: 'JoinChannelVideoWithHook', - }, - { - path: '/JoinChannelAudioWithHook', - component: JoinChannelAudio, - title: 'JoinChannelAudioWithHook', - }, - { - path: '/StringUidHook', - component: StringUid, - title: 'StringUidHook', - }, - { - path: '/JoinMultipleChannelHook', - component: JoinMultipleChannel, - title: 'JoinMultipleChannelHook', - }, - { - path: '/VirtualBackgroundHook', - component: VirtualBackground, - title: 'VirtualBackgroundHook', - }, - { - path: '/DeviceManagerHook', - component: DeviceManager, - title: 'DeviceManagerHook', - }, -]; - -export default hooksRoutes; +const Hooks = { + title: 'Hooks', + data: [ + { + name: 'DeviceManagerHooks', + component: DeviceManager, + }, + { + name: 'JoinChannelVideoHooks', + component: JoinChannelVideo, + }, + { + name: 'JoinChannelAudioHooks', + component: JoinChannelAudio, + }, + { + name: 'StringUidHooks', + component: StringUid, + }, + { + name: 'JoinMultipleChannelHooks', + component: JoinMultipleChannel, + }, + { + name: 'VirtualBackgroundHooks', + component: VirtualBackground, + }, + ], +}; +export default Hooks; diff --git a/example/src/renderer/index.tsx b/example/src/renderer/index.tsx index 110b002f4..d089c8073 100644 --- a/example/src/renderer/index.tsx +++ b/example/src/renderer/index.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; diff --git a/example/src/renderer/utils/base64.ts b/example/src/renderer/utils/base64.ts index 65a54bb52..4ea1be88d 100644 --- a/example/src/renderer/utils/base64.ts +++ b/example/src/renderer/utils/base64.ts @@ -1,4 +1,4 @@ -export default (input) => { +export default (input: any) => { const keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; let output = ''; @@ -29,7 +29,7 @@ export default (input) => { return output; }; -export const rgbImageBufferToBase64 = (target) => { +export const rgbImageBufferToBase64 = (target: any) => { if (!target) { return ''; } diff --git a/example/src/renderer/utils/index.ts b/example/src/renderer/utils/index.ts index 855f98a1e..a088017c1 100644 --- a/example/src/renderer/utils/index.ts +++ b/example/src/renderer/utils/index.ts @@ -2,16 +2,16 @@ import path from 'path'; import { AgoraDropdownItem } from '../components/ui'; -export const objToArray = (obj) => +export const objToArray = (obj: any) => Object.keys(obj).map((key) => ({ key, value: obj[key] })); -export const configMapToOptions = (obj) => +export const configMapToOptions = (obj: any) => objToArray(obj).map(({ key, value }) => ({ dropId: value, dropText: key, })); -export const configEnumToOptions = (enumValue) => { +export const configEnumToOptions = (enumValue: any) => { const items = Object.values(enumValue); const keys = items.filter((v) => typeof v === 'string') as string[]; const values = items.filter((v) => typeof v === 'number') as number[]; @@ -63,6 +63,7 @@ export const getResourcePath = (filePath = './') => { ); } else { resourcePath = path.resolve( + // @ts-ignore `${process.resourcesPath}/extraResources`, filePath ); diff --git a/example/yarn.lock b/example/yarn.lock index 884fbae0a..ee7aed4ea 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1295,6 +1295,22 @@ dependencies: "@types/ms" "*" +"@types/decompress@*": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@types/decompress/-/decompress-4.2.4.tgz#dd2715d3ac1f566d03e6e302d1a26ffab59f8c5c" + integrity sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA== + dependencies: + "@types/node" "*" + +"@types/download@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@types/download/-/download-8.0.2.tgz#2ef0a8b19caec152b51a2efe2e99a6795dcf1ec2" + integrity sha512-z1Jbba+2mUP3LuQ6EaH9xsVElphj7eY7UMCnIQ5Jw6L4ZZOC3oizFo7MbyjUx8DRMupsZvEZZfXnTmLEPQFzQg== + dependencies: + "@types/decompress" "*" + "@types/got" "^9" + "@types/node" "*" + "@types/fs-extra@^9.0.11": version "9.0.13" resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" @@ -1310,6 +1326,15 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/got@^9": + version "9.6.12" + resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.12.tgz#fd42a6e1f5f64cd6bb422279b08c30bb5a15a56f" + integrity sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + "@types/history@^4.7.11": version "4.7.11" resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" @@ -1370,6 +1395,14 @@ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/react-color@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.6.tgz#602fed023802b2424e7cd6ff3594ccd3d5055f9a" + integrity sha512-OzPIO5AyRmLA7PlOyISlgabpYUa3En74LP8mTMa0veCA719SvYQov4WLMsHvCgXP+L+KI9yGhYnqZafVGG0P4w== + dependencies: + "@types/react" "*" + "@types/reactcss" "*" + "@types/react-dom@^18.0.3": version "18.0.6" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz" @@ -1412,6 +1445,13 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/reactcss@*": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@types/reactcss/-/reactcss-1.2.6.tgz#133c1e7e896f2726370d1d5a26bf06a30a038bcc" + integrity sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg== + dependencies: + "@types/react" "*" + "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" @@ -1434,6 +1474,11 @@ resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz" integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + "@types/uglify-js@*": version "3.17.0" resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.0.tgz" @@ -3078,7 +3123,7 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3945,7 +3990,7 @@ dotenv@^9.0.2: download@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/download/-/download-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== dependencies: archive-type "^4.0.0" @@ -4817,6 +4862,15 @@ fork-ts-checker-webpack-plugin@^4.1.2: tapable "^1.0.0" worker-rpc "^0.1.0" +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" diff --git a/scripts/getConfig.js b/scripts/getConfig.js index 8c9b4394f..4be2e7b01 100644 --- a/scripts/getConfig.js +++ b/scripts/getConfig.js @@ -4,7 +4,6 @@ const minimist = require('minimist'); const logger = require('./logger'); -//@ts-ignore const { INIT_CWD } = minimist(process.argv.slice(2), { string: ['INIT_CWD'], default: {}, diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index e7a7acd44..b714ccfb5 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -317,7 +317,6 @@ function handleEvent(...[event, data, buffers]: any) { let processor: EventProcessor = EVENT_PROCESSORS.IRtcEngineEventHandler; Object.values(EVENT_PROCESSORS).some((it) => { - // @ts-ignore const p = it as EventProcessor; if ( _event.startsWith(p.suffix) && @@ -421,7 +420,6 @@ export function callIrisApi(funcName: string, params: any): any { buffers.push(params.data); break; case 'RtcEngine_destroyMediaPlayer': - // @ts-ignore params.mediaPlayerId = params.media_player.getMediaPlayerId(); params.toJSON = function () { return { playerId: params.mediaPlayerId }; diff --git a/ts/Renderer/AgoraView.ts b/ts/Renderer/AgoraView.ts index 3a024cb00..29f126474 100644 --- a/ts/Renderer/AgoraView.ts +++ b/ts/Renderer/AgoraView.ts @@ -82,6 +82,7 @@ export default class AgoraView extends HTMLElement { this.removeAttribute(VIDEO_SOURCE_TYPE_STRING); } } + get uid(): number { const number = Number(this.getAttribute(UID_STRING)); return isNaN(number) ? 0 : number; diff --git a/ts/Renderer/GlRenderer/index.ts b/ts/Renderer/GlRenderer/index.ts index 01ae8e9b1..2ee8a3908 100644 --- a/ts/Renderer/GlRenderer/index.ts +++ b/ts/Renderer/GlRenderer/index.ts @@ -56,8 +56,10 @@ export class GlRenderer extends IRenderer { texCoordBuffer: any; surfaceBuffer: any; + // @ts-ignore parentElement: HTMLElement | undefined; container: HTMLElement | undefined; + // @ts-ignore canvas: HTMLCanvasElement | undefined; renderImageCount = 0; initWidth = 0; @@ -102,8 +104,7 @@ export class GlRenderer extends IRenderer { } unbind() { - // @ts-ignore - this.observer && this.observer.unobserve && this.observer.disconnect(); + this.observer?.unobserve && this.observer.disconnect(); this.program = undefined; this.positionLocation = undefined; this.texCoordLocation = undefined; @@ -158,39 +159,33 @@ export class GlRenderer extends IRenderer { // Cover if (rotation === 0 || rotation === 180) { if (this.clientWidth / this.clientHeight > width / height) { - // @ts-ignore - this.canvas.style.zoom = this.clientWidth / width; + this.canvas.style.transform = `scale(${this.clientWidth / width})`; } else { - // @ts-ignore - this.canvas.style.zoom = this.clientHeight / height; + this.canvas.style.transform = `scale(${ + this.clientHeight / height + })`; } } else { // 90, 270 if (this.clientHeight / this.clientWidth > width / height) { - // @ts-ignore - this.canvas.style.zoom = this.clientHeight / width; + this.canvas.style.transform = `scale(${this.clientHeight / width})`; } else { - // @ts-ignore - this.canvas.style.zoom = this.clientWidth / height; + this.canvas.style.transform = `scale(${this.clientWidth / height})`; } } // Contain } else if (rotation === 0 || rotation === 180) { if (this.clientWidth / this.clientHeight > width / height) { - // @ts-ignore - this.canvas.style.zoom = this.clientHeight / height; + this.canvas.style.transform = `scale(${this.clientHeight / height})`; } else { - // @ts-ignore - this.canvas.style.zoom = this.clientWidth / width; + this.canvas.style.transform = `scale(${this.clientWidth / width})`; } } else { // 90, 270 if (this.clientHeight / this.clientWidth > width / height) { - // @ts-ignore - this.canvas.style.zoom = this.clientWidth / height; + this.canvas.style.transform = `scale(${this.clientWidth / height})`; } else { - // @ts-ignore - this.canvas.style.zoom = this.clientHeight / width; + this.canvas.style.transform = `scale(${this.clientHeight / width})`; } } } catch (e) { diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index 1dde23472..baf652906 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -183,7 +183,7 @@ export class RendererManager { const render = this.bindHTMLElementToRender(formatConfig, view!); // render config - render.setRenderOption(rendererOptions); + render?.setRenderOption(rendererOptions); // enable iris videoFrame this.enableVideoFrameCache({ @@ -458,7 +458,7 @@ export class RendererManager { private bindHTMLElementToRender( config: FormatRendererVideoConfig, view: HTMLElement - ): IRenderer { + ): IRenderer | undefined { this.ensureRendererConfig(config); const renders = this.getRenderers(config); const filterRenders = @@ -611,14 +611,13 @@ export class RendererManager { /** * @ignore */ - private updateVideoFrameCacheInMap( + public updateVideoFrameCacheInMap( config: VideoFrameCacheConfig, shareVideoFrame: ShareVideoFrame ): void { let rendererConfigMap = this.ensureRendererConfig(config); rendererConfigMap - ? // @ts-ignore - Object.assign(rendererConfigMap.get(config.uid), { + ? Object.assign(rendererConfigMap.get(config.uid) ?? {}, { shareVideoFrame, }) : logWarn( diff --git a/ts/Renderer/YUVCanvasRenderer/index.ts b/ts/Renderer/YUVCanvasRenderer/index.ts index 1b25d002f..82327275a 100644 --- a/ts/Renderer/YUVCanvasRenderer/index.ts +++ b/ts/Renderer/YUVCanvasRenderer/index.ts @@ -156,12 +156,10 @@ export class YUVCanvasRenderer extends IRenderer { options.clientHeight ); - // @ts-ignore - this.canvas.style.zoom = scale.toString(); + this.canvas.style.transform = `scale(${scale.toString()})`; if (transformItems.length > 0) { - let transform = `${transformItems.join(' ')}`; - this.canvas.style.transform = transform; + this.canvas.style.transform = `${transformItems.join(' ')}`; } } } diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 000000000..999d3f3c8 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,5 @@ + +{ + "extends": "./tsconfig", + "exclude": ["example"] +} diff --git a/tsconfig.json b/tsconfig.json index e89f8058d..a5697ce48 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,19 +1,34 @@ { "compilerOptions": { - "outDir": "./js", - "baseUrl": ".", - "target": "es2015", - "strict": true, - "module": "commonjs", + "baseUrl": "./", + "paths": { + "agora-electron-sdk": [ + "./ts/AgoraSdk" + ] + }, + "allowUnreachableCode": false, + "allowUnusedLabels": false, "esModuleInterop": true, - "declaration": true, - "allowJs": true, + "importsNotUsedAsValues": "remove", + "forceConsistentCasingInFileNames": true, + "jsx": "react", + "lib": [ + "esnext", + "dom" + ], + "module": "commonjs", "moduleResolution": "node", - "lib": ["es2015", "dom"], - "types": ["node"], - "typeRoots": ["node_modules/@types"], - }, - "include": [ - "./ts/**/*" - ] + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": false, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "esnext", + "outDir": "./js" + } } From 44af24f85d2e54fffaa0f8fff40a5d0b7789a1a4 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 18 Apr 2023 14:58:45 +0800 Subject: [PATCH 27/74] chore: optimize examples --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ca7c1e150..df5a401c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.2.0-dev.5", + "version": "4.2.0-dev.8", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -230,7 +230,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.4_DCG_Windows_Video_20230410_1051.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.4_DCG_Mac_Video_20230410_1051.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.8_DCG_Windows_Video_20230417_1118.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.8_DCG_Mac_Video_20230417_1121.zip" } } From 14bbce6e5fcbb2bc82166296a1f56410e5463dc0 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 18 Apr 2023 16:42:42 +0800 Subject: [PATCH 28/74] fix: jira NMS-12422 NMS-12418 --- .../advanced/MediaRecorder/MediaRecorder.tsx | 4 ++-- package.json | 1 + patches/json-bigint+1.0.0.patch | 16 ++++++++++++++++ yarn.lock | 5 +++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 patches/json-bigint+1.0.0.patch diff --git a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx index a79898ca4..17d30f528 100644 --- a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx +++ b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx @@ -88,8 +88,6 @@ export default class MediaRecorder // Start preview before joinChannel this.engine.startPreview(); this.setState({ startPreview: true }); - - this.createMediaRecorder(); } /** @@ -116,6 +114,8 @@ export default class MediaRecorder // Make myself as the broadcaster to send stream to remote clientRoleType: ClientRoleType.ClientRoleBroadcaster, }); + + this.createMediaRecorder(); } /** diff --git a/package.json b/package.json index df5a401c1..cc2876fb0 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@commitlint/config-conventional": "^17.0.2", "@evilmartians/lefthook": "^1.2.2", "@release-it/conventional-changelog": "^5.0.0", + "@types/json-bigint": "^1.0.1", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "cmake-js": "6.3.2", diff --git a/patches/json-bigint+1.0.0.patch b/patches/json-bigint+1.0.0.patch new file mode 100644 index 000000000..7a194677b --- /dev/null +++ b/patches/json-bigint+1.0.0.patch @@ -0,0 +1,16 @@ +diff --git a/node_modules/json-bigint/lib/parse.js b/node_modules/json-bigint/lib/parse.js +index bb4e5eb..91ff283 100644 +--- a/node_modules/json-bigint/lib/parse.js ++++ b/node_modules/json-bigint/lib/parse.js +@@ -206,9 +206,9 @@ var json_parse = function (options) { + error('Bad number'); + } else { + if (BigNumber == null) BigNumber = require('bignumber.js'); +- //if (number > 9007199254740992 || number < -9007199254740992) ++ if (number > 9007199254740992 || number < -9007199254740992) + // Bignumber has stricter check: everything with length > 15 digits disallowed +- if (string.length > 15) ++ // if (string.length > 15) + return _options.storeAsString + ? string + : _options.useNativeBigInt diff --git a/yarn.lock b/yarn.lock index 0afbfb424..88e0431cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -507,6 +507,11 @@ resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/json-bigint@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/json-bigint/-/json-bigint-1.0.1.tgz#201062a6990119a8cc18023cfe1fed12fc2fc8a7" + integrity sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw== + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" From 48ead159616bf40204f95f67a391b953996d9690 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 18 Apr 2023 17:38:09 +0800 Subject: [PATCH 29/74] build: optimize buildJS.js --- dtsconfig.json | 19 ------------------- scripts/buildJS.js | 3 +-- tsconfig.build.json | 12 ++++++++++-- tsconfig.json | 3 +-- 4 files changed, 12 insertions(+), 25 deletions(-) delete mode 100644 dtsconfig.json diff --git a/dtsconfig.json b/dtsconfig.json deleted file mode 100644 index e6012356f..000000000 --- a/dtsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "emitDeclarationOnly": true, - "declaration": true, - "declarationDir": "./types", - "baseUrl": ".", - "target": "es6", - "module": "commonjs", - "esModuleInterop": true, - "moduleResolution": "node", - "types": ["node"], - "typeRoots": ["node_modules/@types"], - "forceConsistentCasingInFileNames": true - }, - "forceConsistentCasingInFileNames": true, - "include": [ - "./ts/**/*" - ] -} diff --git a/scripts/buildJS.js b/scripts/buildJS.js index 93292d418..6fc4c4fbb 100644 --- a/scripts/buildJS.js +++ b/scripts/buildJS.js @@ -7,8 +7,7 @@ const buildJS = async (cb) => { logger.info('Build js from typescript'); await cleanJSDir(); await cleanTypesDir(); - await exec('tsc', { silent: false }); - await exec('tsc -p dtsconfig.json', { silent: false }); + await exec('tsc -p tsconfig.build.json', { silent: false }); cb(); }; diff --git a/tsconfig.build.json b/tsconfig.build.json index 999d3f3c8..4abc564ec 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,5 +1,13 @@ - { "extends": "./tsconfig", - "exclude": ["example"] + "include": [ + "ts" + ], + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "declarationDir": "./types", + "allowJs": true, + "outDir": "./js" + } } diff --git a/tsconfig.json b/tsconfig.json index a5697ce48..3cba93fae 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,7 +28,6 @@ "resolveJsonModule": true, "skipLibCheck": true, "strict": true, - "target": "esnext", - "outDir": "./js" + "target": "esnext" } } From 5b1f0bf1d528d723553196160bf66824df1efe11 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 18 Apr 2023 18:17:23 +0800 Subject: [PATCH 30/74] chore: optimize example --- example/src/renderer/components/BaseComponent.tsx | 1 - .../advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx | 1 - example/src/renderer/renderer.d.ts | 7 +++++++ 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 example/src/renderer/renderer.d.ts diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index e74cecf34..ee47c7cfd 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -59,7 +59,6 @@ export abstract class BaseComponent< componentDidMount() { this.initRtcEngine(); - // @ts-ignore window.agoraRtcEngine = this.engine; } diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 778982020..e596a4db5 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -106,7 +106,6 @@ export default class LocalVideoTranscoder this.enumerateDevices(); this.getScreenCaptureSources(); - (window as any).engine = this.engine; } /** diff --git a/example/src/renderer/renderer.d.ts b/example/src/renderer/renderer.d.ts new file mode 100644 index 000000000..0bd5c8f65 --- /dev/null +++ b/example/src/renderer/renderer.d.ts @@ -0,0 +1,7 @@ +import type { IRtcEngine } from 'agora-electron-sdk'; + +declare global { + interface Window { + agoraRtcEngine?: IRtcEngine; + } +} From 8239e098416e40b5da6597bd6769fc6be6146065 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 19 Apr 2023 18:40:12 +0800 Subject: [PATCH 31/74] chore: optimize example --- .../src/renderer/components/BaseComponent.tsx | 30 +++++++--- .../components/RtcSurfaceView/index.tsx | 2 - .../JoinMultipleChannel.tsx | 9 +-- .../LocalVideoTranscoder.tsx | 59 +++++++------------ .../advanced/MediaPlayer/MediaPlayer.tsx | 2 +- .../SendMultiVideoStream.tsx | 2 +- .../advanced/VoiceChanger/VoiceChanger.tsx | 1 - .../JoinChannelVideo/JoinChannelVideo.tsx | 5 +- .../hook/DeviceManager/DeviceManager.tsx | 1 + .../JoinChannelAudio/JoinChannelAudio.tsx | 1 + .../JoinChannelVideo/JoinChannelVideo.tsx | 1 + .../JoinMultipleChannel.tsx | 9 +-- .../examples/hook/StringUid/StringUid.tsx | 21 ++++--- .../VirtualBackground/VirtualBackground.tsx | 1 + .../hook/components/BaseRenderUsers.tsx | 41 +++++++++---- ts/Private/internal/RtcEngineExInternal.ts | 20 +++++-- ts/Utils.ts | 6 +- 17 files changed, 121 insertions(+), 90 deletions(-) diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index ee47c7cfd..e10324141 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -5,6 +5,8 @@ import { RtcConnection, RtcStats, UserOfflineReasonType, + VideoCanvas, + VideoSourceType, } from 'agora-electron-sdk'; import React, { Component, ReactElement, ReactNode } from 'react'; @@ -52,7 +54,7 @@ export abstract class BaseComponent< { protected engine?: IRtcEngine; - protected constructor(props: P) { + constructor(props: P) { super(props); this.state = this.createState(); } @@ -184,33 +186,45 @@ export abstract class BaseComponent< const { startPreview, joinChannelSuccess, remoteUsers } = this.state; return ( <> - {!!startPreview || joinChannelSuccess ? this.renderVideo(0) : undefined} + {!!startPreview || joinChannelSuccess + ? this.renderUser({ + uid: 0, + sourceType: VideoSourceType.VideoSourceCamera, + }) + : undefined} {!!startPreview || joinChannelSuccess ? ( { - return this.renderVideo(item); - }} + renderItem={(item) => + this.renderUser({ + uid: item, + sourceType: VideoSourceType.VideoSourceRemote, + }) + } /> ) : undefined} ); } - protected renderVideo(uid: number): ReactElement { + protected renderUser(user: VideoCanvas): ReactElement { const { enableVideo } = this.state; return ( - + {enableVideo ? ( <> Click view to mirror - + {this.renderVideo(user)} ) : undefined} ); } + protected renderVideo(user: VideoCanvas): ReactElement { + return ; + } + protected renderConfiguration(): ReactNode { return undefined; } diff --git a/example/src/renderer/components/RtcSurfaceView/index.tsx b/example/src/renderer/components/RtcSurfaceView/index.tsx index 38458f363..b3b7a549d 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.tsx +++ b/example/src/renderer/components/RtcSurfaceView/index.tsx @@ -86,8 +86,6 @@ class RtcSurfaceView extends Component { } else { funcName = engine.setupLocalVideo; } - } else if (canvas.sourceType === VideoSourceType.VideoSourceMediaPlayer) { - funcName = engine.setupLocalVideo; } else if (canvas.sourceType === VideoSourceType.VideoSourceRemote) { funcName = engine.setupRemoteVideo; } else { diff --git a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx index e3becff6f..0fc9233a7 100644 --- a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -8,6 +8,7 @@ import { RtcConnection, RtcStats, UserOfflineReasonType, + VideoCanvas, createAgoraRtcEngine, } from 'agora-electron-sdk'; import React, { ReactElement } from 'react'; @@ -429,7 +430,7 @@ export default class JoinMultipleChannel data={[0, ...remoteUsers, ...remoteUsers2]} renderItem={(item) => { return this.renderVideo( - item, + { uid: item }, remoteUsers2.indexOf(item) === -1 ? channelId : channelId2, remoteUsers2.indexOf(item) === -1 ? uid : uid2 ); @@ -441,14 +442,14 @@ export default class JoinMultipleChannel } protected renderVideo( - uid: number, + user: VideoCanvas, channelId?: string, localUid?: number ): ReactElement { return ( - + Click view to mirror - + ); } diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index e596a4db5..e8e954f29 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -15,7 +15,7 @@ import createAgoraRtcEngine, { VideoDeviceInfo, VideoSourceType, } from 'agora-electron-sdk'; -import React, { ReactElement } from 'react'; +import React from 'react'; import { BaseComponent, @@ -24,11 +24,9 @@ import { import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, - AgoraCard, AgoraDivider, AgoraDropdown, AgoraImage, - AgoraText, AgoraTextInput, } from '../../../components/ui'; import Config from '../../../config/agora.config'; @@ -425,46 +423,29 @@ export default class LocalVideoTranscoder } } - protected renderVideo(uid: number, channelId?: string): ReactElement { - const { startLocalVideoTranscoder } = this.state; - const sourceType = - uid === 0 - ? startLocalVideoTranscoder - ? VideoSourceType.VideoSourceTranscoded - : VideoSourceType.VideoSourceCamera - : VideoSourceType.VideoSourceRemote; - - return ( - - Click view to mirror - - - ); - } - protected renderUsers(): React.ReactNode { - const { startPreview, joinChannelSuccess, videoDeviceId } = this.state; + const { + startPreview, + joinChannelSuccess, + startLocalVideoTranscoder, + videoDeviceId, + } = this.state; return ( <> - {super.renderUsers()} - {startPreview || joinChannelSuccess - ? videoDeviceId?.map((value) => { - return ( - - ); + {startLocalVideoTranscoder + ? this.renderUser({ + uid: 0, + sourceType: VideoSourceType.VideoSourceTranscoded, }) : undefined} + {startPreview || joinChannelSuccess + ? videoDeviceId?.map((value) => + this.renderUser({ + uid: 0, + sourceType: this._getVideoSourceTypeCamera(value), + }) + ) + : undefined} ); } @@ -543,7 +524,7 @@ export default class LocalVideoTranscoder {open ? ( diff --git a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx index c7e79ba57..66bf823e4 100644 --- a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx +++ b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx @@ -351,7 +351,7 @@ export default class MediaPlayer {open ? ( diff --git a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx index bc8ff196b..fc096e8c7 100644 --- a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx +++ b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx @@ -326,7 +326,7 @@ export default class SendMultiVideoStream {open ? ( diff --git a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx index 5c7d098ec..42809a3f9 100644 --- a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx +++ b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx @@ -22,7 +22,6 @@ import { AgoraSlider, } from '../../../components/ui'; import Config from '../../../config/agora.config'; - import { enumToItems } from '../../../utils'; import { diff --git a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx index a0da501f6..7314bbe62 100644 --- a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx @@ -8,6 +8,7 @@ import { RtcConnection, RtcStats, UserOfflineReasonType, + VideoCanvas, VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; @@ -166,7 +167,7 @@ export default class JoinChannelVideo return super.renderUsers(); } - protected renderVideo(uid: number): ReactElement { - return super.renderVideo(uid); + protected renderVideo(user: VideoCanvas): ReactElement { + return super.renderVideo(user); } } diff --git a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx index 8ef02384c..e10d42d3d 100644 --- a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx @@ -267,6 +267,7 @@ export default function DeviceManager() { )} renderUsers={() => ( ( diff --git a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx index c2beb099e..893b8fa0b 100644 --- a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx @@ -115,6 +115,7 @@ export default function JoinChannelVideo() { )} renderUsers={() => ( { return renderVideo( - item, + { uid: item }, remoteUsers2.indexOf(item) === -1 ? channelId : channelId2, remoteUsers2.indexOf(item) === -1 ? uid : uid2 ); @@ -344,14 +345,14 @@ export default function JoinMultipleChannel() { } function renderVideo( - uid: number, + user: VideoCanvas, channelId?: string, localUid?: number ): ReactElement { return ( - + Click view to mirror - + ); } diff --git a/example/src/renderer/examples/hook/StringUid/StringUid.tsx b/example/src/renderer/examples/hook/StringUid/StringUid.tsx index 99461b723..1fa21d90f 100644 --- a/example/src/renderer/examples/hook/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/hook/StringUid/StringUid.tsx @@ -1,5 +1,5 @@ import { ClientRoleType } from 'agora-electron-sdk'; -import React, { ReactNode, useEffect, useState } from 'react'; +import React, { ReactNode, useCallback, useEffect, useState } from 'react'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import * as log from '../../../utils/log'; @@ -13,6 +13,7 @@ export default function StringUid() { channelId, setChannelId, token, + setUid, joinChannelSuccess, remoteUsers, engine, @@ -68,19 +69,22 @@ export default function StringUid() { engine.current.leaveChannel(); }; + const onLocalUserRegistered = useCallback( + (uid: number, userAccount: string) => { + log.info('LocalUserRegistered', 'uid', uid, 'userAccount', userAccount); + setUid(uid); + }, + [setUid] + ); + useEffect(() => { - engine.current.addListener( - 'onLocalUserRegistered', - (uid: number, userAccount: string) => { - log.info('LocalUserRegistered', 'uid', uid, 'userAccount', userAccount); - } - ); + engine.current.addListener('onLocalUserRegistered', onLocalUserRegistered); const engineCopy = engine.current; return () => { engineCopy.removeAllListeners(); }; - }, [engine]); + }, [engine, onLocalUserRegistered]); return ( ( diff --git a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx index a89c8a90e..e138bc390 100644 --- a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx +++ b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx @@ -132,6 +132,7 @@ export default function VirtualBackground() { )} renderUsers={() => ( ReactElement; + renderUser?: (user: VideoCanvas) => ReactElement; + renderVideo?: (user: VideoCanvas) => ReactElement; } function BaseRenderUsers({ + enableVideo, startPreview, joinChannelSuccess, remoteUsers, - renderVideo = (uid) => ( - - Click view to mirror - - - ), + renderUser = (user) => { + return ( + + {enableVideo ? ( + <> + Click view to mirror + {renderVideo(user)} + + ) : undefined} + + ); + }, + renderVideo = (user) => , }: BaseRenderUsersProps) { return ( <> - {!!startPreview || joinChannelSuccess ? renderVideo(0) : undefined} + {!!startPreview || joinChannelSuccess + ? renderUser({ + uid: 0, + sourceType: VideoSourceType.VideoSourceCamera, + }) + : undefined} {!!startPreview || joinChannelSuccess ? ( { - return renderVideo(item); - }} + renderItem={(item) => + renderUser({ + uid: item, + sourceType: VideoSourceType.VideoSourceRemote, + }) + } /> ) : undefined} diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index b5fd00f07..52e3e854b 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -61,11 +61,6 @@ import { import AgoraBaseTI from '../ti/AgoraBase-ti'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; import IAgoraRtcEngineTI from '../ti/IAgoraRtcEngine-ti'; -const checkers = createCheckers( - AgoraBaseTI, - AgoraMediaBaseTI, - IAgoraRtcEngineTI -); import { AudioDeviceManagerInternal } from './AudioDeviceManagerInternal'; import { DeviceEventEmitter, EVENT_TYPE, callIrisApi } from './IrisApiEngine'; @@ -76,6 +71,12 @@ import { MediaRecorderInternal } from './MediaRecorderInternal'; import { MusicContentCenterInternal } from './MusicContentCenterInternal'; import type { EmitterSubscription } from './emitter/EventEmitter'; +const checkers = createCheckers( + AgoraBaseTI, + AgoraMediaBaseTI, + IAgoraRtcEngineTI +); + export class RtcEngineExInternal extends IRtcEngineExImpl { static _event_handlers: IRtcEngineEventHandler[] = []; static _direct_cdn_streaming_event_handler: IDirectCdnStreamingEventHandler[] = @@ -583,13 +584,20 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { } setupLocalVideo(canvas: VideoCanvas): number { - const { + let { sourceType = VideoSourceType.VideoSourceCamera, uid, + mediaPlayerId, view, renderMode, mirrorMode, } = canvas; + if ( + sourceType === VideoSourceType.VideoSourceMediaPlayer && + mediaPlayerId !== undefined + ) { + uid = mediaPlayerId; + } return ( AgoraEnv.AgoraRendererManager?.setupLocalVideo({ videoSourceType: sourceType, diff --git a/ts/Utils.ts b/ts/Utils.ts index d43f95591..cdc5759d6 100644 --- a/ts/Utils.ts +++ b/ts/Utils.ts @@ -106,7 +106,7 @@ export const formatConfigByVideoSourceType = ( videoSourceType: VideoSourceType; } => { if (videoSourceType === undefined || videoSourceType === null) { - throw new Error(`must set videoSourceType`); + throw new Error(`must set videoSourceType:${videoSourceType}`); } let uid = originUid; let channelId = originChannelId; @@ -122,13 +122,13 @@ export const formatConfigByVideoSourceType = ( break; case VideoSourceType.VideoSourceRemote: if (!uid || !channelId) { - throw new Error(`must set uid:${uid}} and channelId:${channelId}`); + throw new Error(`must set uid:${uid} and channelId:${channelId}`); } break; case VideoSourceType.VideoSourceMediaPlayer: channelId = ''; if (!uid) { - throw new Error(`must set uid(mediaPlayerId):${uid}}}`); + throw new Error(`must set mediaPlayerId:${uid}`); } break; default: From 52fbc0ab99603d5562dea4b89261306b0179326b Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 19 Apr 2023 19:21:39 +0800 Subject: [PATCH 32/74] chore: optimize example --- example/src/renderer/components/RtcSurfaceView/index.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/example/src/renderer/components/RtcSurfaceView/index.scss b/example/src/renderer/components/RtcSurfaceView/index.scss index b1974ce34..70aef0b3f 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.scss +++ b/example/src/renderer/components/RtcSurfaceView/index.scss @@ -1,9 +1,11 @@ .window-item { flex: 1; + height: 240px; } .video-item { flex: 1; + height: 240px; background: #cccccc; overflow: hidden; } From 1ce0727ceb6e0842101fb91e797cc04e53fb97df Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 19 Apr 2023 19:27:17 +0800 Subject: [PATCH 33/74] chore: optimize example --- example/src/renderer/components/ui/index.tsx | 8 ++++- .../advanced/RTMPStreaming/RTMPStreaming.tsx | 29 +++++++------------ .../advanced/TakeSnapshot/TakeSnapshot.tsx | 10 ++----- 3 files changed, 20 insertions(+), 27 deletions(-) diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index 605ab9f1c..e3afd84f5 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -316,4 +316,10 @@ export const AgoraDropdown = ( ); }; -export const AgoraStyle = css; +export const AgoraStyle = { + ...css, + image: { + width: 120, + height: 120, + }, +}; diff --git a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx index 13d05e516..6aa9362df 100644 --- a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx +++ b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx @@ -84,8 +84,8 @@ export default class RTMPStreaming uid: 0, x: 0, y: 0, - width: styles.image.width, - height: styles.image.height, + width: AgoraStyle.image.width, + height: AgoraStyle.image.height, zOrder: 50, }, ], @@ -208,15 +208,15 @@ export default class RTMPStreaming transcodingUsers: [ ...transcodingUsers, ...remoteUsers.map((value, index) => { - const maxNumPerRow = Math.floor(width / styles.image.width); + const maxNumPerRow = Math.floor(width / AgoraStyle.image.width); const numOfRow = Math.floor((index + 1) / maxNumPerRow); const numOfColumn = Math.floor((index + 1) % maxNumPerRow); return { uid: value, - x: numOfColumn * styles.image.width, - y: numOfRow * styles.image.height, - width: styles.image.width, - height: styles.image.height, + x: numOfColumn * AgoraStyle.image.width, + y: numOfRow * AgoraStyle.image.height, + width: AgoraStyle.image.width, + height: AgoraStyle.image.height, zOrder: 50, }; }), @@ -225,10 +225,10 @@ export default class RTMPStreaming watermark: [ { url: watermarkUrl, - x: width - styles.image.width, - y: height - styles.image.height, - width: styles.image.width, - height: styles.image.height, + x: width - AgoraStyle.image.width, + y: height - AgoraStyle.image.height, + width: AgoraStyle.image.width, + height: AgoraStyle.image.height, zOrder: 100, }, ], @@ -527,10 +527,3 @@ export default class RTMPStreaming ); } } - -const styles = { - image: { - width: 120, - height: 120, - }, -}; diff --git a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx index af811b377..715a5954a 100644 --- a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx +++ b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx @@ -19,6 +19,7 @@ import { AgoraDivider, AgoraDropdown, AgoraImage, + AgoraStyle, } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { arrayToItems } from '../../../utils'; @@ -172,7 +173,7 @@ export default class TakeSnapshot <> @@ -194,10 +195,3 @@ export default class TakeSnapshot ); } } - -const styles = { - image: { - width: 120, - height: 120, - }, -}; From 71d0262636152f1ab26a90032df3154da6c8d217 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 20 Apr 2023 11:31:12 +0800 Subject: [PATCH 34/74] chore: optimize example --- example/src/renderer/config/agora.config.ts | 2 +- .../examples/advanced/TakeSnapshot/TakeSnapshot.tsx | 12 +++++++++--- ts/Private/internal/RtcEngineExInternal.ts | 6 +++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/example/src/renderer/config/agora.config.ts b/example/src/renderer/config/agora.config.ts index 43114b0a0..267d53ea8 100644 --- a/example/src/renderer/config/agora.config.ts +++ b/example/src/renderer/config/agora.config.ts @@ -16,7 +16,7 @@ const config = { channelId: 'testdcg', uid: 0, pluginPath: '', - SDKLogPath: './agorasdk.log', + SDKLogPath: '', }; export default config; diff --git a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx index 715a5954a..57ab472e8 100644 --- a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx +++ b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx @@ -34,6 +34,8 @@ export default class TakeSnapshot extends BaseComponent<{}, State> implements IRtcEngineEventHandler { + _timestamp: number = 0; + protected createState(): State { return { appId: Config.appId, @@ -109,7 +111,11 @@ export default class TakeSnapshot return; } - this.engine?.takeSnapshot(targetUid, `${filePath}/${targetUid}.jpg`); + this._timestamp = new Date().getTime(); + this.engine?.takeSnapshot( + targetUid, + `${filePath}/${targetUid}-${this._timestamp}.jpg` + ); this.setState({ takeSnapshot: false }); }; @@ -152,7 +158,7 @@ export default class TakeSnapshot errCode ); const { targetUid, filePath: path } = this.state; - if (filePath === `${path}/${targetUid}.jpg`) { + if (filePath === `${path}/${targetUid}-${this._timestamp}.jpg`) { this.setState({ takeSnapshot: errCode === ErrorCodeType.ErrOk }); } } @@ -174,7 +180,7 @@ export default class TakeSnapshot ) : undefined} diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 52e3e854b..36da155ef 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -479,15 +479,15 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return 'RtcEngineEx_createDataStreamEx2'; } - protected getApiTypeFromStartScreenCaptureDesktop( + protected getApiTypeFromStartScreenCaptureBySourceType( sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): string { return 'RtcEngine_startScreenCapture2'; } - protected getApiTypeFromStopScreenCapture( - sourceType: VideoSourceType = VideoSourceType.VideoSourceScreenPrimary + protected getApiTypeFromStopScreenCaptureBySourceType( + sourceType: VideoSourceType ): string { return 'RtcEngine_stopScreenCapture2'; } From 89c26512cc693103e2f79fdb5eebeb38eac8f2b1 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 20 Apr 2023 16:00:18 +0800 Subject: [PATCH 35/74] feat: support main process --- ts/AgoraSdk.ts | 7 +++- ts/Private/internal/RtcEngineExInternal.ts | 9 +++-- ts/Renderer/IRenderer.ts | 22 ++++------ ts/Renderer/IRendererManager.ts | 35 ++++++++++++++++ ts/Renderer/RendererManager.ts | 9 +++-- .../{GlRenderer => WebGLRenderer}/index.ts | 40 ++++++------------- .../webgl-utils.js | 0 ts/Renderer/YUVCanvasRenderer/index.ts | 12 +++--- ts/Renderer/index.ts | 2 + ts/Types.ts | 24 ++++++----- ts/Utils.ts | 4 +- 11 files changed, 96 insertions(+), 68 deletions(-) create mode 100644 ts/Renderer/IRendererManager.ts rename ts/Renderer/{GlRenderer => WebGLRenderer}/index.ts (95%) rename ts/Renderer/{GlRenderer => WebGLRenderer}/webgl-utils.js (100%) create mode 100644 ts/Renderer/index.ts diff --git a/ts/AgoraSdk.ts b/ts/AgoraSdk.ts index 86bc26617..11050f3ef 100644 --- a/ts/AgoraSdk.ts +++ b/ts/AgoraSdk.ts @@ -2,6 +2,8 @@ import { IMediaPlayerCacheManager } from './Private/IAgoraMediaPlayer'; import { IRtcEngineEx } from './Private/IAgoraRtcEngineEx'; import { IMediaPlayerCacheManagerImpl } from './Private/impl/IAgoraMediaPlayerImpl'; import { RtcEngineExInternal } from './Private/internal/RtcEngineExInternal'; +import { AgoraEnvOptions } from './Types'; +import { AgoraEnv } from './Utils'; export * from './Private/AgoraBase'; export * from './Private/AgoraMediaBase'; @@ -17,7 +19,7 @@ export * from './Private/IAgoraRtcEngine'; export * from './Private/IAgoraRtcEngineEx'; export * from './Private/IAgoraSpatialAudio'; export * from './Private/IAudioDeviceManager'; -export * from './Renderer/RendererManager'; +export * from './Renderer'; export * from './Types'; export * from './Utils'; @@ -30,7 +32,8 @@ const instance = new RtcEngineExInternal(); * @returns * One IRtcEngine object. */ -export function createAgoraRtcEngine(): IRtcEngineEx { +export function createAgoraRtcEngine(options?: AgoraEnvOptions): IRtcEngineEx { + Object.assign(AgoraEnv, options); return instance; } diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 36da155ef..ff4f78159 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -1,6 +1,5 @@ import { createCheckers } from 'ts-interface-checker'; -import { RendererManager } from '../../Renderer/RendererManager'; import { Channel } from '../../Types'; import { AgoraEnv } from '../../Utils'; @@ -108,8 +107,11 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { >(); initialize(context: RtcEngineContext): number { - AgoraEnv.AgoraRendererManager = new RendererManager(); - AgoraEnv.AgoraRendererManager.enableRender(); + if (AgoraEnv.webEnvReady) { + const { RendererManager } = require('../../Renderer/RendererManager'); + AgoraEnv.AgoraRendererManager = new RendererManager(); + } + AgoraEnv.AgoraRendererManager?.enableRender(); const ret = super.initialize(context); callIrisApi.call(this, 'RtcEngine_setAppType', { appType: 3, @@ -118,6 +120,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { } release(sync: boolean = false) { + AgoraEnv.AgoraElectronBridge.ReleaseRenderer(); AgoraEnv.AgoraRendererManager?.clear(); AgoraEnv.AgoraRendererManager = undefined; this._audio_device_manager.release(); diff --git a/ts/Renderer/IRenderer.ts b/ts/Renderer/IRenderer.ts index 58ac35d26..1c0318964 100644 --- a/ts/Renderer/IRenderer.ts +++ b/ts/Renderer/IRenderer.ts @@ -8,32 +8,30 @@ export type RenderFailCallback = | undefined | null; -export class IRenderer { +export abstract class IRenderer { parentElement?: HTMLElement; canvas?: HTMLCanvasElement; event?: EventEmitter; contentMode = RenderModeType.RenderModeFit; mirror?: boolean; - snapshot(fileType = 'image/png') { + public snapshot(fileType = 'image/png') { if (this.canvas && this.canvas.toDataURL) { return this.canvas.toDataURL(fileType); } return null; } - bind(element: HTMLElement) { + public bind(element: HTMLElement) { if (!element) { throw new Error('You have pass a element'); } this.parentElement = element; } - unbind() { - throw new Error('You have to declare your own custom render'); - } + abstract unbind(): void; - equalsElement(element: Element): boolean { + public equalsElement(element: Element): boolean { if (!element) { throw new Error('You have pass a element'); } @@ -43,11 +41,9 @@ export class IRenderer { return element === this.parentElement; } - drawFrame(imageData: ShareVideoFrame) { - throw new Error('You have to declare your own custom render'); - } + abstract drawFrame(imageData: ShareVideoFrame): void; - setRenderOption({ contentMode, mirror }: RendererOptions) { + public setRenderOption({ contentMode, mirror }: RendererOptions) { this.contentMode = contentMode ?? RenderModeType.RenderModeFit; this.mirror = mirror; Object.assign(this.parentElement!.style, { @@ -55,7 +51,5 @@ export class IRenderer { }); } - refreshCanvas() { - throw new Error('You have to declare your own custom render'); - } + abstract refreshCanvas(): void; } diff --git a/ts/Renderer/IRendererManager.ts b/ts/Renderer/IRendererManager.ts new file mode 100644 index 000000000..cba695edc --- /dev/null +++ b/ts/Renderer/IRendererManager.ts @@ -0,0 +1,35 @@ +import { RenderModeType, VideoSourceType } from '../Private/AgoraMediaBase'; +import { Channel, RendererVideoConfig } from '../Types'; + +/** + * @ignore + */ +export abstract class IRendererManager { + abstract get defaultRenderConfig(): RendererVideoConfig; + + abstract enableRender(enabled?: boolean): void; + + abstract clear(): void; + + abstract setupVideo(rendererVideoConfig: RendererVideoConfig): number; + + abstract setupLocalVideo(rendererConfig: RendererVideoConfig): number; + + abstract setupRemoteVideo(rendererConfig: RendererVideoConfig): number; + + abstract setRenderOptionByConfig(rendererConfig: RendererVideoConfig): number; + + abstract destroyRendererByView(view: Element): void; + + abstract destroyRenderersByConfig( + videoSourceType: VideoSourceType, + channelId?: Channel, + uid?: number + ): void; + + abstract setRenderOption( + view: HTMLElement, + contentMode?: RenderModeType, + mirror?: boolean + ): void; +} diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index baf652906..907a2c348 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -23,14 +23,15 @@ import { logWarn, } from '../Utils'; -import GlRenderer from './GlRenderer'; import { IRenderer, RenderFailCallback } from './IRenderer'; +import { IRendererManager } from './IRendererManager'; +import WebGLRenderer from './WebGLRenderer'; import { YUVCanvasRenderer } from './YUVCanvasRenderer'; /** * @ignore */ -export class RendererManager { +export class RendererManager extends IRendererManager { /** * @ignore */ @@ -58,6 +59,7 @@ export class RendererManager { defaultRenderConfig: RendererVideoConfig; constructor() { + super(); this.renderFps = 10; this.renderers = new Map(); this.renderMode = this.checkWebglEnv() @@ -305,7 +307,6 @@ export class RendererManager { * @ignore */ public clear(): void { - AgoraEnv.AgoraElectronBridge.ReleaseRenderer(); this.stopRender(); this.removeAllRenderer(); } @@ -423,7 +424,7 @@ export class RendererManager { if (this.renderMode === RENDER_MODE.SOFTWARE) { return new YUVCanvasRenderer(); } else { - return new GlRenderer(failCallback); + return new WebGLRenderer(failCallback); } } diff --git a/ts/Renderer/GlRenderer/index.ts b/ts/Renderer/WebGLRenderer/index.ts similarity index 95% rename from ts/Renderer/GlRenderer/index.ts rename to ts/Renderer/WebGLRenderer/index.ts index 2ee8a3908..490edd669 100644 --- a/ts/Renderer/GlRenderer/index.ts +++ b/ts/Renderer/WebGLRenderer/index.ts @@ -84,26 +84,11 @@ export class GlRenderer extends IRenderer { this.failInitRenderCB = failCallback; } - bind(view: HTMLElement) { + public bind(view: HTMLElement) { super.bind(view); - - // this.initCanvas( - // view, - // view.clientWidth, - // view.clientHeight, - // this.initRotation, - // console.warn - // ); - // const ResizeObserver = window.ResizeObserver; - // if (ResizeObserver) { - // this.observer = new ResizeObserver(() => { - // this.refreshCanvas && this.refreshCanvas(); - // }); - // this.observer.observe(view); - // } } - unbind() { + public unbind() { this.observer?.unobserve && this.observer.disconnect(); this.program = undefined; this.positionLocation = undefined; @@ -147,7 +132,7 @@ export class GlRenderer extends IRenderer { this.parentElement = undefined; } - updateViewZoomLevel(rotation: number, width: number, height: number) { + private updateViewZoomLevel(rotation: number, width: number, height: number) { if (!this.parentElement || !this.canvas) { return; } @@ -196,7 +181,7 @@ export class GlRenderer extends IRenderer { return true; } - updateCanvas(rotation: number, width: number, height: number) { + private updateCanvas(rotation: number, width: number, height: number) { // if (this.canvasUpdated) { // return; // } @@ -283,7 +268,7 @@ export class GlRenderer extends IRenderer { gl.uniform2f(resolutionLocation, width, height); } - drawFrame(videoFrame: ShareVideoFrame) { + public drawFrame(videoFrame: ShareVideoFrame) { let error; try { this.renderImage({ @@ -311,7 +296,7 @@ export class GlRenderer extends IRenderer { } } - refreshCanvas() { + public refreshCanvas() { if (this.lastImageWidth) { this.updateViewZoomLevel( this.lastImageRotation, @@ -321,7 +306,7 @@ export class GlRenderer extends IRenderer { } } - renderImage(image: { + private renderImage(image: { width: number; height: number; left: number; @@ -393,7 +378,7 @@ export class GlRenderer extends IRenderer { } } - uploadYuv( + private uploadYuv( width: number, height: number, yplane: Uint8Array, @@ -451,19 +436,19 @@ export class GlRenderer extends IRenderer { ); } - deleteBuffer(buffer: any) { + private deleteBuffer(buffer: any) { if (buffer && this.gl) { this.gl.deleteBuffer(buffer); } } - deleteTexture(texture: any) { + private deleteTexture(texture: any) { if (texture && this.gl) { this.gl.deleteTexture(texture); } } - initCanvas( + private initCanvas( view: HTMLElement, width: number, height: number, @@ -556,7 +541,8 @@ export class GlRenderer extends IRenderer { this.initTextures(); } - initTextures() { + + private initTextures() { let gl = this.gl; if (!gl) { return; diff --git a/ts/Renderer/GlRenderer/webgl-utils.js b/ts/Renderer/WebGLRenderer/webgl-utils.js similarity index 100% rename from ts/Renderer/GlRenderer/webgl-utils.js rename to ts/Renderer/WebGLRenderer/webgl-utils.js diff --git a/ts/Renderer/YUVCanvasRenderer/index.ts b/ts/Renderer/YUVCanvasRenderer/index.ts index 82327275a..193aac0c2 100644 --- a/ts/Renderer/YUVCanvasRenderer/index.ts +++ b/ts/Renderer/YUVCanvasRenderer/index.ts @@ -33,7 +33,7 @@ export class YUVCanvasRenderer extends IRenderer { }; } - bind(element: HTMLElement) { + public bind(element: HTMLElement) { super.bind(element); let container = document.createElement('div'); Object.assign(container.style, { @@ -54,7 +54,7 @@ export class YUVCanvasRenderer extends IRenderer { }); } - unbind() { + public unbind() { if (this._container) { this._container.replaceChildren(); this._container = undefined; @@ -71,7 +71,7 @@ export class YUVCanvasRenderer extends IRenderer { } } - zoom( + private zoom( vertical: boolean, contentMode: RenderModeType = RenderModeType.RenderModeFit, width: number, @@ -108,7 +108,7 @@ export class YUVCanvasRenderer extends IRenderer { } } - updateCanvas( + private updateCanvas( options: CanvasOptions = { frameWidth: 0, frameHeight: 0, @@ -164,7 +164,7 @@ export class YUVCanvasRenderer extends IRenderer { } } - drawFrame(frame: ShareVideoFrame) { + public drawFrame(frame: ShareVideoFrame) { if (!this._container || !this._yuvCanvasSink) { return; } @@ -233,7 +233,7 @@ export class YUVCanvasRenderer extends IRenderer { this._yuvCanvasSink.drawFrame(yuvBufferFrame); } - refreshCanvas() { + public refreshCanvas() { if (this._cacheCanvasOptions) { this.zoom( this._cacheCanvasOptions.rotation === 90 || diff --git a/ts/Renderer/index.ts b/ts/Renderer/index.ts new file mode 100644 index 000000000..26cd4c4db --- /dev/null +++ b/ts/Renderer/index.ts @@ -0,0 +1,2 @@ +export * from './IRenderer'; +export * from './IRendererManager'; diff --git a/ts/Types.ts b/ts/Types.ts index 94c1264a6..517e6be4a 100644 --- a/ts/Types.ts +++ b/ts/Types.ts @@ -1,19 +1,25 @@ import { RenderModeType, VideoSourceType } from './Private/AgoraMediaBase'; -import { IRenderer } from './Renderer/IRenderer'; -import { RendererManager } from './Renderer/RendererManager'; +import { IRenderer, IRendererManager } from './Renderer'; -/** - * @ignore - */ -export interface AgoraEnvType { +export interface AgoraEnvOptions { + /** + * @ignore + */ + enableLogging?: boolean; /** * @ignore */ - enableLogging: boolean; + enableDebugLogging?: boolean; /** * @ignore */ - enableDebugLogging: boolean; + webEnvReady?: boolean; +} + +/** + * @ignore + */ +export interface AgoraEnvType extends AgoraEnvOptions { /** * @ignore */ @@ -21,7 +27,7 @@ export interface AgoraEnvType { /** * @ignore */ - AgoraRendererManager?: RendererManager; + AgoraRendererManager?: IRendererManager; } /** diff --git a/ts/Utils.ts b/ts/Utils.ts index cdc5759d6..f0b4adc7f 100644 --- a/ts/Utils.ts +++ b/ts/Utils.ts @@ -195,8 +195,6 @@ const agora = require('../build/Release/agora_node_ext'); export const AgoraEnv: AgoraEnvType = { enableLogging: true, enableDebugLogging: false, + webEnvReady: true, AgoraElectronBridge: new agora.AgoraElectronBridge(), }; - -// @ts-ignore -(window || global).AgoraEnv = AgoraEnv; From 0e6ce64c9a4ec3fef3bd153ae22bf2d436fc09c8 Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 21 Apr 2023 21:32:46 +0800 Subject: [PATCH 36/74] chore: optimize --- example/package.json | 3 +- .../ProcessVideoRawData.tsx | 61 +++++++++++++------ example/yarn.lock | 23 +++++++ ts/Private/internal/IrisApiEngine.ts | 6 +- 4 files changed, 70 insertions(+), 23 deletions(-) diff --git a/example/package.json b/example/package.json index 3c7f69567..9bfa8345f 100644 --- a/example/package.json +++ b/example/package.json @@ -65,7 +65,7 @@ ] }, "dependencies": { - "agora-electron-sdk": "4.2.0-dev.5", + "agora-electron-sdk": "4.2.0-dev.8", "antd": "^4.20.3", "download": "^8.0.0", "ffi-napi": "^4.0.3", @@ -84,6 +84,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.6", "@teamsupercell/typings-for-css-modules-loader": "^2.5.1", "@types/download": "^8.0.2", + "@types/ffi-napi": "^4.0.7", "@types/react": "^16.9.44", "@types/react-color": "^3.0.6", "@types/react-dom": "^18.0.3", diff --git a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx index bccc82163..e6f50c06a 100644 --- a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx +++ b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx @@ -9,6 +9,10 @@ import { createAgoraRtcEngine, } from 'agora-electron-sdk'; import download from 'download'; +import ffi, { + LibraryObject, + LibraryObjectDefinitionToLibraryDefinition, +} from 'ffi-napi'; import React from 'react'; import { @@ -18,9 +22,6 @@ import { import { AgoraButton } from '../../../components/ui'; import Config from '../../../config/agora.config'; -const ffi = require('ffi-napi'); -const Pointer = 'uint64'; - const pluginVersion = 'v4.2.0'; let pluginName = 'VideoObserverPlugin'; let postfix = `_${process.arch}`; @@ -31,6 +32,14 @@ if (process.platform === 'darwin') { } pluginName += postfix; +type PluginType = { + EnablePlugin: ['bool', ['uint64']]; + DisablePlugin: ['bool', ['uint64']]; + CreateSamplePlugin: ['uint64', ['uint64']]; + DestroySamplePlugin: ['void', ['uint64']]; + CreateSampleAudioPlugin: ['uint64', ['uint64']]; +}; + interface State extends BaseVideoComponentState { enablePlugin: boolean; } @@ -39,8 +48,11 @@ export default class ProcessVideoRawData extends BaseComponent<{}, State> implements IRtcEngineEventHandler { - pluginLibrary?: any; - plugin?: any; + pluginLibrary?: LibraryObject< + LibraryObjectDefinitionToLibraryDefinition + >; + plugin?: string | number; + pluginAudio?: string | number; protected createState(): State { return { @@ -121,16 +133,22 @@ export default class ProcessVideoRawData console.log(`download success`); } - this.pluginLibrary ??= ffi.Library(dllPath, { - EnablePlugin: ['bool', [Pointer]], - DisablePlugin: ['bool', [Pointer]], - CreateSamplePlugin: [Pointer, [Pointer]], - DestroySamplePlugin: ['void', [Pointer]], - }); + const plugin: PluginType = { + CreateSampleAudioPlugin: ['uint64', ['uint64']], + CreateSamplePlugin: ['uint64', ['uint64']], + DestroySamplePlugin: ['void', ['uint64']], + DisablePlugin: ['bool', ['uint64']], + EnablePlugin: ['bool', ['uint64']], + }; + this.pluginLibrary ??= ffi.Library(dllPath, plugin); const handle = this.engine?.getNativeHandle(); - this.plugin = this.pluginLibrary.CreateSamplePlugin(handle); - this.pluginLibrary.EnablePlugin(this.plugin); + if (handle !== undefined) { + this.plugin = this.pluginLibrary.CreateSamplePlugin(handle); + this.pluginLibrary.EnablePlugin(this.plugin); + this.pluginAudio = this.pluginLibrary.CreateSampleAudioPlugin(handle); + this.pluginLibrary.EnablePlugin(this.pluginAudio); + } this.setState({ enablePlugin: true }); }; @@ -138,14 +156,21 @@ export default class ProcessVideoRawData * Step 4: disablePlugin */ disablePlugin = () => { - if (!this.plugin) { + if (this.plugin) { + this.pluginLibrary?.DisablePlugin(this.plugin); + this.pluginLibrary?.DestroySamplePlugin(this.plugin); + this.plugin = undefined; + } else { this.error('plugin is invalid'); - return; } - this.pluginLibrary.DisablePlugin(this.plugin); - this.pluginLibrary.DestroySamplePlugin(this.plugin); - this.plugin = undefined; + if (this.pluginAudio) { + this.pluginLibrary?.DisablePlugin(this.pluginAudio); + this.pluginLibrary?.DestroySamplePlugin(this.pluginAudio); + this.pluginAudio = undefined; + } else { + this.error('pluginAudio is invalid'); + } this.setState({ enablePlugin: false }); }; diff --git a/example/yarn.lock b/example/yarn.lock index ee7aed4ea..df42ae554 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1311,6 +1311,15 @@ "@types/got" "^9" "@types/node" "*" +"@types/ffi-napi@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@types/ffi-napi/-/ffi-napi-4.0.7.tgz#b3a9beeae160c74adca801ca1c9defb1ec0a1a32" + integrity sha512-2CvLfgxCUUSj7qVab6/uFLyVpgVd2gEV4H/TQEHHn6kZTV8iTesz9uo0bckhwzsh71atutOv8P3JmvRX2ZvpZg== + dependencies: + "@types/node" "*" + "@types/ref-napi" "*" + "@types/ref-struct-di" "*" + "@types/fs-extra@^9.0.11": version "9.0.13" resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" @@ -1452,6 +1461,20 @@ dependencies: "@types/react" "*" +"@types/ref-napi@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/ref-napi/-/ref-napi-3.0.7.tgz#20adc93a7a2f9f992dfb17409fd748e6f4bf403d" + integrity sha512-CzPwr36VkezSpaJGdQX/UrczMSDsDgsWQQFEfQkS799Ft7n/s183a53lsql7RwVq+Ik4yLEgI84pRnLC0XXRlA== + dependencies: + "@types/node" "*" + +"@types/ref-struct-di@*": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@types/ref-struct-di/-/ref-struct-di-1.1.8.tgz#df8cbf7b9bbbc03f476dcbe1958f92bf443f17d9" + integrity sha512-t5jwtHlEH6c3rgBRtMQTAtysROr1gWt/ZfcytolK+45dag747fUdgmZy/iQs5q41jinMnr62nxwI0Q8GkdK9TA== + dependencies: + "@types/ref-napi" "*" + "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index b714ccfb5..526f434f8 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -1,5 +1,6 @@ -import { AgoraEnv } from '../../Utils'; +import JSON from 'json-bigint'; +import { AgoraEnv } from '../../Utils'; import { IAudioEncodedFrameObserver } from '../AgoraBase'; import { AudioFrame, @@ -24,7 +25,6 @@ import { IRtcEngineEventHandler, Metadata, } from '../IAgoraRtcEngine'; - import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; import { processIAudioFrameObserver, @@ -55,8 +55,6 @@ import { RtcEngineExInternal } from './RtcEngineExInternal'; import type { EventEmitter as IEventEmitter } from './emitter/EventEmitter'; import EventEmitter from './emitter/EventEmitter'; -const JSON = require('json-bigint'); - // @ts-ignore export const DeviceEventEmitter: IEventEmitter = new EventEmitter(); From 1cda85aeb6f54c25bf0285fd71e1bb47dc2c9674 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 10 May 2023 15:03:22 +0800 Subject: [PATCH 37/74] chore: optimize --- .editorconfig | 12 +- .eslintignore | 6 + .eslintrc | 90 + .gitattributes | 28 +- .github/actions/setup/action.yml | 6 +- .github/workflows/ci.yml | 18 +- .gitignore | 254 +- .prettierignore | 6 + .prettierrc | 7 + .yarnrc | 1 + ci/electron-sdk-build-mac-release.sh | 6 +- ci/electron-sdk-build-windows-release.bat | 6 +- ci/packager-mac.sh | 21 +- ci/packager-win.ps1 | 33 +- example/.yarnrc | 1 + example/README.md | 15 +- example/extraResources/agora-logo.png | Bin 0 -> 1188 bytes example/extraResources/effect.mp3 | Bin 0 -> 105369 bytes example/package.json | 4 +- example/src/main/index.js | 18 +- .../src/renderer/components/BaseComponent.tsx | 7 +- .../components/RtcSurfaceView/index.tsx | 4 +- example/src/renderer/components/ui/index.tsx | 6 + .../src/renderer/components/ui/public.scss | 5 - .../renderer/components/ui/public.scss.d.ts | 1 - example/src/renderer/config/agora.config.ts | 3 +- .../advanced/AudioMixing/AudioMixing.tsx | 9 +- .../advanced/AudioSpectrum/AudioSpectrum.tsx | 8 +- .../advanced/BeautyEffect/BeautyEffect.tsx | 7 +- .../ChannelMediaRelay/ChannelMediaRelay.tsx | 6 +- .../ContentInspect/ContentInspect.tsx | 6 +- .../advanced/DeviceManager/DeviceManager.tsx | 6 +- .../DirectCdnStreaming/DirectCdnStreaming.tsx | 10 +- .../EncodedVideoFrame/EncodedVideoFrame.tsx | 6 +- .../advanced/Encryption/Encryption.tsx | 6 +- .../examples/advanced/Extension/Extension.tsx | 6 +- .../JoinMultipleChannel.tsx | 8 +- .../LocalSpatialAudioEngine.tsx | 14 +- .../LocalVideoTranscoder.tsx | 17 +- .../advanced/MediaPlayer/MediaPlayer.tsx | 4 +- .../advanced/MediaRecorder/MediaRecorder.tsx | 10 +- .../MusicContentCenter/MusicContentCenter.tsx | 2 +- .../advanced/PlayEffect/PlayEffect.tsx | 8 +- .../ProcessVideoRawData.tsx | 10 +- .../PushVideoFrame/PushVideoFrame.tsx | 10 +- .../advanced/RTMPStreaming/RTMPStreaming.tsx | 10 +- .../advanced/RhythmPlayer/RhythmPlayer.tsx | 6 +- .../advanced/ScreenShare/ScreenShare.tsx | 13 +- .../advanced/SendMetadata/SendMetadata.tsx | 6 +- .../SendMultiVideoStream.tsx | 13 +- .../advanced/SpatialAudio/SpatialAudio.tsx | 6 +- .../advanced/StreamMessage/StreamMessage.tsx | 6 +- .../advanced/TakeSnapshot/TakeSnapshot.tsx | 6 +- .../VideoEncoderConfiguration.tsx | 10 +- .../VirtualBackground/VirtualBackground.tsx | 8 +- .../advanced/VoiceChanger/VoiceChanger.tsx | 6 +- .../JoinChannelAudio/JoinChannelAudio.tsx | 6 +- .../JoinChannelVideo/JoinChannelVideo.tsx | 6 +- .../examples/basic/StringUid/StringUid.tsx | 6 +- .../examples/config/AuthInfoScreen/index.tsx | 17 +- .../examples/hook/AudioMixing/AudioMixing.tsx | 235 + .../hook/DeviceManager/DeviceManager.tsx | 7 +- .../JoinChannelAudio/JoinChannelAudio.tsx | 7 +- .../JoinChannelVideo/JoinChannelVideo.tsx | 9 +- .../JoinMultipleChannel.tsx | 7 +- .../examples/hook/ScreenShare/ScreenShare.tsx | 562 ++ .../examples/hook/StringUid/StringUid.tsx | 7 +- .../hook/TakeSnapshot/TakeSnapshot.tsx | 191 + .../VirtualBackground/VirtualBackground.tsx | 9 +- .../hook/components/BaseRenderUsers.tsx | 8 +- .../examples/hook/hooks/useInitRtcEngine.tsx | 20 +- .../examples/hook/hooks/useResetState.tsx | 18 + example/src/renderer/examples/hook/index.ts | 15 + example/src/renderer/utils/base64.ts | 22 +- example/src/renderer/utils/permissions.ts | 43 + example/yarn.lock | 5027 ++++++++--------- package.json | 121 +- patches/eslint+8.39.0.patch | 13 + scripts/build.js | 4 +- scripts/clean.js | 27 +- scripts/downloadPrebuild.js | 28 +- scripts/getConfig.js | 12 +- scripts/synclib.js | 67 +- scripts/util.js | 4 +- ts/Private/AgoraBase.ts | 14 + ts/Private/IAgoraRtcEngine.ts | 20 +- ts/Private/impl/IAgoraRtcEngineImpl.ts | 42 +- .../internal/AudioDeviceManagerInternal.ts | 8 +- .../LocalSpatialAudioEngineInternal.ts | 30 +- ts/Private/internal/MediaEngineInternal.ts | 14 +- ts/Private/internal/MediaPlayerInternal.ts | 32 +- ts/Private/internal/MediaRecorderInternal.ts | 2 +- .../internal/MusicContentCenterInternal.ts | 24 +- ts/Private/internal/RtcEngineExInternal.ts | 123 +- ts/Renderer/YUVCanvasRenderer/index.ts | 8 +- ts/Types.ts | 3 + yarn.lock | 3622 ++++++------ 97 files changed, 6255 insertions(+), 4986 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 example/.yarnrc create mode 100644 example/extraResources/agora-logo.png create mode 100644 example/extraResources/effect.mp3 create mode 100644 example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx create mode 100644 example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx create mode 100644 example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx create mode 100644 example/src/renderer/examples/hook/hooks/useResetState.tsx create mode 100644 example/src/renderer/utils/permissions.ts create mode 100644 patches/eslint+8.39.0.patch diff --git a/.editorconfig b/.editorconfig index 4c7f8a8ef..65365be68 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,11 +1,15 @@ -# 🎨 editorconfig.org +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org root = true [*] -charset = utf-8 -end_of_line = lf + indent_style = space indent_size = 2 + +end_of_line = lf +charset = utf-8 trim_trailing_whitespace = true -insert_final_newline = true \ No newline at end of file +insert_final_newline = true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..3acd846b5 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,6 @@ +**/node_modules/* +build/ +**/dist/* +js/ +types/ +ts/Private/ti/ diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 000000000..3266c7e45 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,90 @@ +{ + "root": true, + "env": { + "es6": true, + "node": true, + "shared-node-browser": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "sourceType": "module" + }, + "extends": [ + "plugin:prettier/recommended", + "prettier" + ], + "plugins": [ + "@typescript-eslint/eslint-plugin", + "import", + "auto-import", + "react", + "react-hooks" + ], + "settings": { + "react": { + "version": "detect" + } + }, + "globals": { + "define": false, + "obj_attrib": false, + "info": false, + "NodeJS": false, + "window": false, + "alert": false, + "document": false, + "HTMLElement": false, + "HTMLDivElement": false, + "WebGL2RenderingContext": false, + "WebGLTexture": false, + "HTMLCanvasElement": false, + "ResizeObserver": false, + "name": false, + "Element": false + }, + "rules": { + "prettier/prettier": [ + "error", + { + "quoteProps": "consistent", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false + } + ], + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "warn", + "auto-import/auto-import": [ + "error", + { + "rootPath": "./ts/Private" + } + ], + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "error", + "import/order": [ + "error", + { + "newlines-between": "always-and-inside-groups", + "pathGroups": [ + { + "pattern": "../internal/IrisApiEngine", + "group": "unknown" + } + ], + "alphabetize": { + "order": "asc", + "orderImportKind": "asc" + } + } + ], + "sort-imports": [ + "error", + { + "ignoreDeclarationSort": true, + "ignoreMemberSort": false + } + ] + } +} diff --git a/.gitattributes b/.gitattributes index a2f00b59e..e27f70fa4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,27 +1,3 @@ -# Set the default behavior, in case people don't have core.autocrlf set. -* text=auto - -# Explicitly declare text files you want to always be normalized and converted -# to native line endings on checkout. -*.c text eol=lf -*.h text eol=lf -*.cpp text eol=lf -*.hpp text eol=lf -*.js text eol=lf -*.ts text eol=lf -*.jsx text eol=lf -*.tsx text eol=lf -*.sh text eol=lf -*.json text eol=lf -*.gyp text eol=lf - -# Declare files that will always have CRLF line endings on checkout. -*.sln text eol=crlf +*.pbxproj -text +# specific for windows script files *.bat text eol=crlf - -# Denote all files that are truly binary and should not be modified. -*.png binary -*.jpg binary - -package-lock.json -diff -yarn.lock -diff diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 79a026dbb..d677bc5c4 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -15,13 +15,13 @@ runs: with: path: | **/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + key: ${{ runner.os }}-yarn-ng-${{ hashFiles('**/yarn.lock') }} restore-keys: | - ${{ runner.os }}-yarn- + ${{ runner.os }}-yarn-ng - name: Install dependencies - if: steps.yarn-cache.outputs.cache-hit != 'true' run: | + yarn config set agora-electron-sdk-pre-built 0 yarn install --frozen-lockfile yarn patch-package shell: bash diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9a544bdad..092ca6f1c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,10 +29,26 @@ jobs: - name: Typecheck files run: | set +e - yarn install --cwd example --frozen-lockfile + yarn example install --frozen-lockfile set -e yarn typecheck + test: + strategy: + matrix: + runner: [ windows, macos ] + runs-on: ${{ matrix.runner }}-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup + uses: ./.github/actions/setup + + - name: Build + run: | + yarn totalBuild + build: runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index 955c73f9f..d97ef4723 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,248 @@ -.idea/ +### VisualStudioCode template +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Node template +# Logs +logs *.log -sdk -tmp +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Sass template +.sass-cache/ +*.css.map +*.sass.map +*.scss.map + +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Custom +.idea/ +sdk/ +tmp/ build/ dist/ *.zip -node_modules/ -.DS_Store -error-log.txt -.vscode -.history -peer.log -peer.pid -nohup.out -.version-cache js/ docs/ types/ -package-lock.json iris/ -source_code/iris +appId.* diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..3acd846b5 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +**/node_modules/* +build/ +**/dist/* +js/ +types/ +ts/Private/ti/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..670761058 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "quoteProps": "consistent", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false +} diff --git a/.yarnrc b/.yarnrc index fedc0f117..fdbfcede9 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1,3 +1,4 @@ # Override Yarn command so we can automatically setup the repo on running `yarn` yarn-path "scripts/bootstrap.js" +registry "https://registry.npmjs.org/" diff --git a/ci/electron-sdk-build-mac-release.sh b/ci/electron-sdk-build-mac-release.sh index b3f35765d..11767145f 100755 --- a/ci/electron-sdk-build-mac-release.sh +++ b/ci/electron-sdk-build-mac-release.sh @@ -1,3 +1,6 @@ +set -e +set -x + npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/ # Example 1 # npm config set AGORA_ELECTRON_SDK_PRE_BUILT false @@ -8,7 +11,8 @@ rm -rf tmp # npm install --verbose # # Example 2 -npm install --verbose --agora_electron_sdk_pre_built=false +yarn config set agora-electron-sdk-pre-built 0 +npm install --verbose npm run totalBuild --verbose npm run zipBuild # diff --git a/ci/electron-sdk-build-windows-release.bat b/ci/electron-sdk-build-windows-release.bat index 68f1d6043..4cae13bae 100644 --- a/ci/electron-sdk-build-windows-release.bat +++ b/ci/electron-sdk-build-windows-release.bat @@ -5,12 +5,14 @@ call node -v call npm config list if %1 == ia32 ( echo sdk_ia32 - call npm install --verbose --agora_electron_sdk_pre_built=false --agora_electron_sdk_arch=ia32 + call yarn config set agora-electron-sdk-pre-built 0 + call npm install --verbose --agora_electron_sdk_arch=ia32 call npm run totalBuild --verbose --agora_electron_sdk_arch=ia32 ) if %1 == x64 ( echo sdk_x64 - call npm install --verbose --agora_electron_sdk_pre_built=false --agora_electron_sdk_arch=x64 + call yarn config set agora-electron-sdk-pre-built 0 + call npm install --verbose --agora_electron_sdk_arch=x64 call npm run totalBuild --verbose --agora_electron_sdk_arch=x64 ) diff --git a/ci/packager-mac.sh b/ci/packager-mac.sh index e0ade5f8b..a0dd68fba 100755 --- a/ci/packager-mac.sh +++ b/ci/packager-mac.sh @@ -1,3 +1,5 @@ +set -e +set -x outterZipName="electronDemo.zip" @@ -9,22 +11,21 @@ echo example_sdk_mode: $example_sdk_mode echo example_electron_version: $example_electron_version packExample() { - rm $outterZipName + rm $outterZipName || true pushd $1 echo 当前工作路径:$(pwd) - rm -rf node_modules dist + rm -rf node_modules dist yarn.lock || true - if [ -n "$2" ] - then - echo 选择了 electron_version:$2 - yarn add electron@$2 + yarn config set registry https://registry.npmmirror.com + if [ -n "$2" ]; then + echo 选择了 electron_version:$2 + yarn add --dev electron@$2 --no-lockfile else - echo 安装example 依赖 - yarn + echo 安装example 依赖 + yarn install --no-lockfile fi - if [ "$3" -eq 1 ] - then + if [ "$3" -eq 1 ]; then rm -rf node_modules/agora-electron-sdk/build cp -P -R ../Electron-*/* node_modules/agora-electron-sdk/ fi diff --git a/ci/packager-win.ps1 b/ci/packager-win.ps1 index 9921426e4..cab8db2cb 100644 --- a/ci/packager-win.ps1 +++ b/ci/packager-win.ps1 @@ -4,40 +4,40 @@ $electronVersion=$args[2] $outterZipName="electronDemo.zip" pushd example +yarn config set registry https://registry.npmmirror.com function ChooseArch($type) { # remove node_modules Remove-Item -Path node_modules -Recurse -Force -ErrorAction Ignore; - if($type -eq "ia32"){ + if ($type -eq "ia32") { write-host("ChooseArch ia32") Copy-Item -Path ../ci/.npmrc_x32 -Destination ./.npmrc -Force - } elseif($type -eq "x64"){ + } elseif ($type -eq "x64") { write-host("ChooseArch x64") Copy-Item -Path ../ci/.npmrc_x64 -Destination ./.npmrc -Force - }else { + } else { write-host("not set arch type") } } -if($electronVersion -eq "switchEnv"){ +if ($electronVersion -eq "switchEnv") { write-host("switchEnv") ChooseArch -type $chooseExampleType - yarn + yarn install --no-lockfile popd return } function DistByArch($type) { - - if($type -eq "ia32"){ + if ($type -eq "ia32") { write-host("distByArch x32") yarn dist:win32 - } elseif($type -eq "x64"){ + } elseif ($type -eq "x64") { write-host("distByArch x64") yarn dist:win64 - }else { + } else { write-host("not set arch type") } } @@ -52,18 +52,15 @@ function Package($archNum,$electronVersion,$example_sdk_mode){ # choose arch ChooseArch -type $archNum - If([String]::IsNullOrEmpty($electronVersion)) + if ([String]::IsNullOrEmpty($electronVersion)) { Write-Host "安装example 依赖" - yarn - } - Else - { - + yarn install --no-lockfile + } else { Write-Host "选择了 electron_version:$electronVersion" - yarn add electron@$electronVersion + yarn add --dev electron@$electronVersion --no-lockfile } - if($example_sdk_mode -eq 1){ + if ($example_sdk_mode -eq 1) { Remove-Item -Path node_modules/agora-electron-sdk/build -Recurse -Force -ErrorAction Ignore; Remove-Item -Path node_modules/agora-electron-sdk/js -Recurse -Force -ErrorAction Ignore; Remove-Item -Path node_modules/agora-electron-sdk/type -Recurse -Force -ErrorAction Ignore; @@ -101,6 +98,4 @@ popd; # 4 {"It is four."; Break} # } - echo "结束" - diff --git a/example/.yarnrc b/example/.yarnrc new file mode 100644 index 000000000..45291c133 --- /dev/null +++ b/example/.yarnrc @@ -0,0 +1 @@ +registry "https://registry.npmjs.org/" diff --git a/example/README.md b/example/README.md index 544d19feb..91f148f3c 100644 --- a/example/README.md +++ b/example/README.md @@ -57,12 +57,15 @@ cd example && yarn link "agora-electron-sdk" | Demo | Description | APIs | | ---------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| [JoinChannelAudio](src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx) | basic demo to show audio call | getAudioDeviceManager, setAudioProfile,setRecordingDevice, adjustRecordingSignalVolume, adjustAudioMixingPlayoutVolume, adjustPlaybackSignalVolume | -| [JoinChannelVideo](src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx) | video demo with role selection in Editor Inspector | enableVideo, getVideoDeviceManager,setChannelProfile, joinChannelEx, setAudioProfile, setVideoEncoderConfiguration | -| [StringUid](src/renderer/examples/hook/StringUid/StringUid.tsx) | basic demo with string uid | joinChannelWithUserAccount | -| [JoinMultipleChannel](src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx) | Joins a channel with the connection ID | joinChannelEx, updateChannelMediaOptionsEx | -| [DeviceManager](src/renderer/examples/hook/DeviceManager/DeviceManager.tsx) | Management tool that can switch microphone and camera | getVideoDeviceManager, getAudioDeviceManager | -| [VirtualBackground](src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx) | Enables/Disables the virtual background (beta feature) | enableExtension, enableVirtualBackground | +| [JoinChannelAudio](src/renderer/examples/hook/JoinChannelAudio/JoinChannelAudio.tsx) | basic demo to show audio call | getAudioDeviceManager, setAudioProfile,setRecordingDevice, adjustRecordingSignalVolume, adjustAudioMixingPlayoutVolume, adjustPlaybackSignalVolume | +| [JoinChannelVideo](src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx) | video demo with role selection in Editor Inspector | enableVideo, getVideoDeviceManager,setChannelProfile, joinChannelEx, setAudioProfile, setVideoEncoderConfiguration | +| [StringUid](src/renderer/examples/hook/StringUid/StringUid.tsx) | basic demo with string uid | joinChannelWithUserAccount | +| [JoinMultipleChannel](src/renderer/examples/hook/JoinMultipleChannel/JoinMultipleChannel.tsx) | Joins a channel with the connection ID | joinChannelEx, updateChannelMediaOptionsEx | +| [DeviceManager](src/renderer/examples/hook/DeviceManager/DeviceManager.tsx) | Management tool that can switch microphone and camera | getVideoDeviceManager, getAudioDeviceManager | +| [VirtualBackground](src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx) | Enables/Disables the virtual background (beta feature) | enableExtension, enableVirtualBackground | +| [AudioMixing](src/renderer/examples/hook/AudioMixing/AudioMixing.tsx) | Starts playing the music file | startAudioMixing, pauseAudioMixing, resumeAudioMixing | +| [TakeSnapshot](src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx) | Takes a snapshot of a video stream | takeSnapshot | +| [ScreenShare](src/renderer/examples/hook/ScreenShare/ScreenShare.tsx) | sharing application screen view | getScreenCaptureSources, startPrimaryScreenCapture, startSecondaryScreenCapture,joinChannelEx | ## 👏 Feedback diff --git a/example/extraResources/agora-logo.png b/example/extraResources/agora-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0b93e8b9fb9a90adf25d780654619bee3e0b5d7f GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz&Ja=C&U%V{r~@e{r~@=tNuIe z|8IQezt*b%GOPZJFZwUE^Dg|)yX-&blK%orL0tYt|M?gE=Ue=r4V;^Bm;h!Y z6r-w#=tZ#(ZZ(_%GUu<7TayehdOAvi{DK)6nV4Bv**LlR_yvSTWaJeTl~q*LG&Hre z^$iS-Ow7z}?VVlSJv_aA{eweeViQx-vkHn!%PMQ@8X8;LIy!rL`zK7CG-c|{Sqm30 zU9oD-x=ow6ZQrqT_ny7`_8&NO_~^0YCr+O^cj4ltD_5`IxOwO9y$6q;K70P^^_zF^ zKYaZ3YWjNqy+1!Z{d_yT z|M&Sft*=fjz2W|2y6+94bqilATcYfpc%2%_?WVkG#(gEcvp|b#DY~!(9EH zd{qavC8gHJ@rb$YV2s+`{!+WHefEN2)6=@mZn3kX+1Cfms%$tuFY+04-oeCYta*38 zc&IPFm@=!XK=X8v>CM3AIkWmavkp9!6E*e~n3eW|@oHjsP`*G{g8tnFT|pdY$g{-p=oLQ$WfrVz)4f^5B06y`2YW^xl2QMkKgv8>x$ z5e3(m90xUA7=yaDss4yq#C*vpH~530EBg|iT;~slE+AU)N5=)m%$eI*YE)h{eCgZf z`Xgcq^QB-bt;7&d#!I?Zw-T)I+keS#~9S%#LOe5;b`c7JcJ>tG1DvHOW=#9 zFmcfUnFR^03kA2WXvk_glqDheFm%-dE3cEUcpL;@Y zFFSL`^)FtPOQq_Giyq&>s20kf`60=^A+~T`^UaOVzid)k&h_DTALFwF=ND#w4q5Wc zdBa?}=Td(hzqa09Ts*%n?YZ#A#%HwwvhU@7ckK^p$o+p#pYc-BgymD1` zPK-&-2oc~V4SneDjX>Oox_R8cPx=u2z{k%6dhP1ft58|!e|4~N_YS%5bsypG=OGQf z2K9Hn552f7sj4ckq^K+}Wov05Pa2J$)E>ItclGyqhzJR|XRC8Vm-H77QVT%%JoI=7 zMFiaU3GjeELfpR!mA7>;uqIuiAhm09^2)Y)7B@+!l>gmZ&%)fCbbg)GJOaExlI~K_ zi*C^W-wm$1BmAK2DIBp@UzA$8@doT9SYbxmzuLt|5O3v1ikj(6a$?p{9k1A-oggg=f(#Xd<) zP0z^AEqGpBT3%IC-}I`r{mt9=UEO^HpGUq-PR-2y_=#Cw{k^%pcW`uic1|GOOYMe^ zxq-q}HMIw14gWnwc9bZj+zqh%%e0x6WFU1vv&-g5pS8)j1XX9co+GaM+&uY6iTp6)0S8y5`to$dhuaQowzsHDd4<9XIX1262GHmq1&wI7%_p+KzJj{Qx2zdWN5*Ek;h zxqBK>ZCU(7deaF2aF4znV?HsXPmX`6cQ*e8%wYh4{$csKBcC_LHGxgQmMgH+QZlki z^=)7Uhe=hodFctnl3e^-E^um0%MifILM+?W6iumgog}{xq5@qmk%`%&FJn}_gL>_( z%9II)Ui$h%nH8NRsU{3#Xvt#scFI(R`aRjimnsOaJqUWj?Oba4_4YAEzC}?{AumhJ z23JC>zdjQYE?e|mNQY8Vjb2{60}a$ZG{c&8Qkm4T;k zlOG^>dW3K>&?U)hVPn^wjer8C`msk1-Hd5q3a~!!n^eh0+hnha#2*z8?FVI*pWMru zau$ox7Z(}elxMSg%@3_Fa565~7Svr$4dWk#%!ua6v+0-Wj~>>Xztlg)e#VzHMh(GV zSde~d9+U9jKbjFHQ6&H_HHPm}lE+mLB>sAORc3wG9r_^L0QLI<>)yAmKXt#!Q)PAQ zIwS{Qf3Znss1!MEX__3Yo*89Ay`23Fp)R!0sd9Wvi!bVCh2X3?w=y>Cgjn$bmjN_R z5~08Z7GqKGapOI&aS?}~XFSVyKOd|N>n?uy$^}BSDDaj!+-K7-_pT40g=XywdIlxL zdTR?=w5Y$vX-e4dhr5HYbq3T(-4#}pu=P(GS6{WS3(K2{v#i#9Hsg@LYl1_GXgk>% zg4-icjJgB14*?K>k+^?u6o*fFNU^cL{(zf^Ab3z)z6gtDnEC-(;BvM9Ev%dig~q}D zTpg$nWQ&rI8MRk1EKk{8>Y~ijYhs`CcUh0-?w!~o+Yj^hjwcVvE~(Fn@^$co`yQTI>py3fPD2vf!G}pRhm7eB{q%^zH=|xT`?!-O(yb$*l@YTe76J zeGPUfjgNT^;qG%P<6P4DO?{KRcAOb0(K(&==_E-aa(SCJPL6Gb ze6sqN6YVXtwJSa4D%GJ?E;OGW3z$3-S39#hL6 zRsq0YfR0=NkCHg$JH`Q95RR-#Dub_@=A5dAWsQhULY=PTAFD?%x z*3(0C-OKCUyBCw%V|Nc!1*%kvn$|85qC1b@^SAme>_~-O<4tRqlPGKTSbJ$Eii9R_<8D zw2D^yRonO1UQfQC1F)sbOBi5p3)hunpro!4@2|?<4&9aSWoGbdqbMsfv$}ErCItD@ z%dh0?i06~GT+wCRhyB-;lZ>3Rf?zvL6|IY>&&)JWX|ZHPFUV|bmIyybT7_-^zma)j z1RAQ^tt;mzUpLNi@htX=WQLWNZ~VCp>#S4mUN)boY2r4FfyjLbvT$O_3L8y_QJJVM z>Z<#@cgZmzmNb5z>asuv?bE1>JCakQ#&yx7(Wt48rXlvw*Q=ZzFQp#e)mi9hGGqe8 zfEVw}sL1FQNVbi8G?VTAW132Sx+!Z)YM$_bJB#g{!{V2p70F?rOEa zSZxbiPc4nOeYnmxR>}8Xb zCJwGM&vb4o8A&!)9(d3=V7_E~{$~xLz*ysX?5-Bbm8Q``v!Rf#SS)n?^{uSfE4vz} z`E_9#UB8@PPnYeR{>d2L}Uq)F&k!RR_Kk*+0O{5dJ)*oLg?AnhvZz^FdU&;{yxlFxl1nkNM+gvZK&Ze|H^@;>yamKoSpxYFpIuFI#CIi!1a0GTzJ6+ z$@wn7+;2-VB9~(WUC)cO%GBx{T|t+@Hh^savBAvp2rov+LOWmC#S$9~9kIN(?wEeb zq6$_dtEQ+EPBFg3(mwDH&;N%I(c5`*SECX`GW?@lZII~1uiQS1PO4gwiT|0?TI|P?9DFy zA9VBfp)lnOdm$O8yw_d&T&~A_1+h|P>k?-yJ@_o?R}oU7K|A9Qb)Lwn#y{-<#Vc+r zZ}Ij%n`_HE$uQ;0kTvyH{QwAL2>Gvl08+Xh*mjiw=;O9sjAhqpKRRDZ2K;+Y@fmKD-|n zdwrjx?iZq=A(Yvs3oe7ozfIlcq}bLe(Kg&FUp*4#yF>;AKd)e>VZ@4wzld3V)^nmJ zBVas$eprj%#u^2aCDkpGQ-jG}(gi3`{#)HuRPXW3V+^a(0sbhBiJZ4g-ZnqjpnBO~ z>f~Tnu&3)fa1wM-%Qx2`2iqaMA?c+fJjAsRaMflPaWB~z*0~(P_KR{&iWe_lk{50~H z(ATboZetEeMft;JCcdw4()#|+-Kd(1woOiCl~eDlH2Q3_Es_*)( zc`c2L{bvn<$mvZSA2ay`-WqN!)ikPNU`ck}QL^rN#4i(hTH@l6{!^eT`X4xJUEtneG!y8Klqb&K~M%a2(hcWdbHi)t#$@1DJPz&h-0%j1^-fFO8O zQ_^fP@tB~MVx$3+t9fhRiqV$>LHjBnB!<<#+v(yrC!ecZPQCjmU-hKcP1QUU4kAC{ zIvdlA0)ZRKUyxO2iQL-dvd)FID zpmMj%Sy%g;-loi{ba-0{ye&$gYWJHqCq^Sqt!aY!)X5bwEgjp;+7i~$nKY>5DULdJ zOd9BQy=3=&Y2saDB&Ckg?|h;QEo_9HWX$)@_Wg(?LPB~E!-uLfzp_zZsuZYWuk%kY z*W%!d2lsSJGxH6PT1AzYJc?p^Kp$owIN;d?th=Om-RpAZGmPNR(UT$d>yuspj zfe?u)ESNiOGsW84QjWs4#OmmR#5~4G2zgY!j67|ymm5zSZb?4(4>Y%6!CIrvhP%^V z1r}|y_l9n)BU|GukKmnWqF zBwry0;kT+uXF9Oar248Du1k%$-2ZL*DMmz0_{|S%UVS@cI@gv&WH%z>Y5b*9+lBjW zRO<``CEB5RoUac2JKqr_G3Hk(_E+r*>GAvc7L-a)X42y6oc;XLC2KDC5RbOI_g=^_ zroe}?<$t^eHP1@!jgmaDYoE->O8jQ!Ec&#IF)hU@6Z&OwCxQ_z>K4b>gaF7rSn33^ z%>3+a0RX7rJx#U%%*+Y*TU}T3OD^5Y?-V>3_j>|{Z|S<*vu{xz{K%R7danN@_Lg!R zS!B4vGzAZ1VQQ4?z6;`~s_u2khLwqQf?J)$v9dD0tQFUZRrw2899Hh_OVBy%U`~<5 z=TLo@7A+M$lv>NREYu&tg3JNsrDMr{6!PT9fa2uzy*h%PL(gKxd7KMipA;Y%bAb>y z2>jf5p2W6WY?2!%G;8xyc*GDjO4eDn;w_p9#lMTTIm{ovrukI~zs3EO*bZa)jJyq~ z90R~QGMgcC57;?>pE)_X(PPr`%*@#nO=+yOeBX`pB~~D21Wqw3tpg*l8B-syxE{wW zD{Qk-E)Pi)%LC_CbS(13&dT^s!VycDd0Z#yNu9^nixPD9D%&u~+Tn7LOV!jfV9Eev)NMNyS@YM1gT>(+wh~fjDbwy=C`cLxD9YuW$39J@CkX@ z9LEUg6l{0_M9dmZWD)RZ3mbaR$V4YNiQUS2s^R78{;j3}VdkJq^qd+AF{9sRo7*a= zovGeIRgzH^c#hgAeN2$ZnZDDZa}|t&94LnkxLK^HNgO60J^_FY1U3=K1{MIRWnW?T zm~I{i$NE&?&~z(7j_WBR%XV=TZzpfRC^dZf?oYnPPr+LHay$4e#YmLtk)q`<85s9n>QUP5Ia1NB15Y2(w$^LuQ5L%57ze*^{Gp}7BB!>c*nv)Q+ zW45X1d#c%xof0JGvm;;GV^x1uh}nw&hQIvPF#<9 zh;5lZUIBb1>=lisYS9{H*DJOsu+FoOh_jEFHSh_E*pbv6Vf6eHv5ZWK4ixi*(=F6r zfI^I0ez0585UrQRDBouc!L<0^(5r2Ou8B{RzZ0K*{Q2N6=RsgK_R2anEC;Z@B7=8G zD_sYgEYPYM0I>iY+&%*A0+k!uy4PYLqC?uRc5GeFXh*(xTv=KTYWTX+9!Pul=*QKD z=@2M;Z)uXkLuM$|YY26K(?H=o7O4xoLmm^&PLPN2T7Z~Alpr(6nY_isc9iRnK@jX% zu04o_Xa>`+j~g0$e533>4eE)vD3}PymI7jPJ>HbZ#>dREi*da)Umgor2y4;v*Y$|_ zyl6djMg%^_oW0k;Y;XZoXbb^1M}*SAPgpbsL-B3TXxW*CL7ZT zLYk!689n8?*@H8ofy3l?m&rB6vLf}+s$9YE6a}MOD&ebIW)}z}qyDo))*v+QQa9W^8zE0n?qE08o~X9?Cx=?imsPv_ci>LAq;- z!Z~R)BT$O>Wwlygn!RN1yLo=LPKgn}&ODE838#P^6rd-#3N zpw74Sk9F>|Qareh#2saPn0@I0tn4#sO|Dc5K!N$W6T)Rl<3N|1XKC;5v0!pEvWIg; zYmt(LlJ?a6Ou2t|11t{o@G{Vm6X~nOUh9QHpo)+Dp>E|d`*k}_WH&`$eLQV&O#5)jVZPB%V8pKSa&@e>h|b(qnpVLwvX55LRtHH`?4?atOe6L` zo&7y!C#c}}W4fx*Lui8wr4{qDmiPxis_us5>()*ArPWcE8KHn( z6Xcq=Lm$s1mz=Y|s}j;;jG}o~kDxy~JJB_`2zwR+G^PoI9``3-m(pY~q^B2E% zaD>1)nPeSy%CF9J+^G)E8?AD}8S&XLx>*Ffgn16EB1tR@LvX@B2F~&5Nl~!t(+41C zFgU2C<&sX#$`W^kWdX9nu<&u?G`CA5l zjZN;SzYgUg1 z^QALL|6H%hJE~WMRwkclzAwFjoCQj=A=(jlq1G?x_XIPo8WA3G>F)<^w#e>#%XO;K zf{ILwEMM%U#$SolAaH6CVv7!vkq4cp08o!O>&^QAlvWM5qgB~z``3X%}IDC{E9x3pFXZ6FznTK-$H?y8|CMff@ow)`ZZ+0^B^w9s;nnEYsk95zkv9`Bq|1ta8Oa zwTYq`a&~0oM?Ci&@_3V0*P~FcgwF2F&;14`Eh|`0dooOp$EHn;#P?9v*+H;TcAfKP z*uClI4FR(?_fUXfg#I!^^Z-6IZyusLQLm+03y-eNc`ucTJ#rS zHDk+ukFNm#4Im{+FA(Yik+WT7A2fzs(#)7#j|Au(l!9to8@@(}H)%?Agw1H%pe8Bq zIJt4T)-kzCSNbMMujYM7YoGqcW?n%q9$DNIVC3Zzl2+xsh>EJk^)13JN`Gs!QaS~# z@5rhEFRL-*MZ{-&>vZV6Y5=eX#w@}yxF}I@zN5?9V(?=vJ?EfY>i{bc+SACSVU>F- zJCOxURau-3FXv+IM-k&>LZW|y6T{KC03|WWKd1LgUnHLvEyOt`ZT4CVcr5vg4u5 zEXqVbSMME?0Bv_5x=_d^-Bk4?6R;G-4KN*#6X7QSNx1?Te4rR|dhdkzapG9)k}}hnAnwqODcB5}C%LZFiW9>!2y6l}1act@EQaI~Zeg$%x^~9z3E~)_ z(zPa{N=>vL{AsT1&oiWFZ$hQ|4eZ@K(aYJoaVQj*&zz!p(=;(ip71DE79rA``BACN zN}C^?)X|BSHkQz#1Q*FTXNW*YS_l{IZbR#(TKh zQ#FHhrq#FoW4Km0&STgjiGrI>q~|ql`mDCUYuRJWGcrZK=OG;YbbEQMKu}=kR#OHk z4mO+!j3L!Ao5(NdQEHM$hajNmfYCpzoUW>>+-+bEwK!pKh_pr8_SNssk9F_R`4%+) zhszCsz=P%v+YA~VuE|%TUH7l2d}X??xi$5=GVm+e9nnb6xhT)O zx^=xyRkYonzH`}VS>ip1^Bcf}jMbBw!-^SnUM6~u*nu8nJOOsLa8V#oATOw!86LWc*~rqEmcT=RIxf9S)qp%DF8hX+zIlUv1F10y_!*Bq)YSg~FYV$<(2mtZ{oO zNG{lnaK^wkmZfxgZp{qY3=jpVkfS)Q@lGsUI2Ux8mb}eHQ5aWF^rshMUNEh=SGRAv<1YLD>n4{>A5FGbSQ{Y9{iGNuuF=vro2k~FJ`v5r$b8a1x1O+j zSWhfH1%&yDRTJkD0OA;d?<|{qHlD`)oPjcaDDy_4q@m`JJnu|}y9s+Svx51Vm?d%{ zN2O!NSqN%y1l33uUz@n$8s&ah^A}2@e+@`+gLXaFIp#Ca_CH*Pq_=bYuU(F@ZK%_o$9jF6C3#58WS111C56)C(WfU-S}2JBRgk6STY)07pF`BzBAV{BnLdT#!{{Q885kz9(}IscG~_fLg5O-a$8_6letGrw8poWPvCONFh|^QSQsP{Wcl2U%r-`?-#Dv zB`bhzMlY+gwH-Isz^Thq5r>)~m}6;m0CImyfOCzW`mr0Pgnii;SU`NkGX_vZ+i| zL~@dc>8n7BQz*w(^yxRG2!n6lepj^@dc(8GU%)a=aqXkA3a`Ol1?^dK_<&o^Q9NRh z9Bm`abyy9ENSD4RW40(l44O|^>ZCo)DsQiM&aQ2xM`n_Wy`4Ju)Q@ybQ)M# zfoLe9GO)6Dg4{AEKEb1j7+j=njQpw`v*dKO**nLpYXP&6ezV3fJ2^S}>w;2y*7X87 zd#W>3GGoi11)Yg#H{s}DswrIkCwGx?9-<;A!K5x9zsYpi(thJ8g!>3 zjx}A(e|^AuDWTU^A%LFns>r+(g@ts=<yj9Du8EH!SJdV3AzuFl*31CXvoCu-wG_EJES#{Sw>APf?EX9<1 zTCFc17#-*$;WPgUPG=BH0b=Qz!}cKvd|wV)QE05Pu3*us$}^MskeXcL(&xi6*R9_w z+Xn@KBF~|&iB%y~?jGy9i$9IHh^=B4<{_+TY5Ys#kAihr-EDP1-3wQQpE!{q3W0jA zhsOj`3LUfF3kRD29?w9P-Lomw`%;`f+13^DdakKHm-(a>Q^P_N^Ln8rWn#)$L29=M z_1)aR85L>;WZfGtOJ=-1%Wv~#_FLDo0q&xp@h1vAZT!#Xu5G{jm|3)DLuu-hAg|hC z>#vWcWJs~?h!;l8TF*|nkiyT2o>wmE9U;b_BP)P$K4eBOfDJu&0!~RR{z%p>lSM<5 zEN(LJ!(*DwJB-T?G9z+N>(%~wTt)SXAx~oaK>Q=bUM}}KJ@dz)27V%p3SDQ;iuaoA z%!`L&O78pN1kVZ;o6jg=--y7PVd-)7}#MX>1C9S-x??Zu**hGV{|V9V)GK zzGzuwe~Ws8N*2p?u3SG2zB*r1S4}bmZLlQTXWwOn&+fO(ci4HlJQe#C1oBfG_<8q9Lncr9kziZe*Gzn~spr zQ~%_mlHd`mRKw=Rh@Hpg-FtfMfSQz$@};hDR*i^P&2uUy-$YMq5noR>W&Elg057bai*4NF;&v_Y3|* zslZ?H4I*DYvMSh0amT*>r(ce~oh`tP>%r%`YRg5NHN9eDNY|fA!SND;+p}40FPcaK zK#_doS9@IN=ly7-DGIsrviJQL2rYoX7~{Ef290j#G*iHJSDkKC>EZgzrq*(KnRiqj z(f+s;v?h+${t)jaNes48Ah=&Sszc@h4FFXSAsU@~AlOIHZDtm=t~3%IeKH)#KAtp$ zt}HaAaEdlij46q4?3Ho(j#XlQW5C@n;P#`V=dM-)YV)^H;})%mIpw2EFURz3v=XUX zu=uqMfQuF;$t-a|gHyqBVRg8OPzdIrlN4p8@3g+@^}V&48LE-uXPgCDTVxaNe!D{d zyeqYGb&>E|GHkFZPDl{F?^JJ*TJREx{Ssn=9s}htn5`Kfg$QzB4&}D1Br!H_6a5mz zo*7cUgT&o|HG&p^!)JU4Ln_5h#W+(gKd95Eq~U6!le=?8PBAVkbF2K9WaB?$H~x?r zUT&u>!I=(!Qe<_BQz@9iktlbNu9C^b8j%&~zxb932Py1^_w8T*MI)ASqFN zZKk4Od=91em@AuRMQssWQr2DU@9oYuFX}u`P)p`o>?BT{Y=c77xdr!nN?(;P%~Dva zrCDikXaJP)R-6DOr8`In&4a-E#`8YAn)hAnKOjg%A=QWJVQul9p!==Tq@a%}26ott z)t(~8BdsyOiN#^Y20+jU-LQ5WwD(r5l^Af<_VZo-!)&MA^DCk#K7(?2n8-}c8N5U# zSS{1|Brcuf9@J#9hiRH0rs-jTU`fCviveE;IZ)2HJP|l1kG4hDw#j`n!TC7#`*)1k~Y5Tf*@!BU^5SiRQ1qkIn zAkT3rRkt?H^i^JU(3c&Q7Z2J*V7Z*fzXWP(zVJzVN_f*#n}*eRO@|{uI?-t-Gl1Ml za%+o6E3md9#DjVES33oi*h*~@4J{9seR^xQ+%~Yx7w;=DAK8p=swIj&5hSrvfW*0< zowEovy<_g6qa7Y2-$_d-R=cOmsn#Lvo74Cz8U17bq~Q|8K7>z0ZTIM8>25{Dv>$S zFXtx!mi`r(tG6;BaT@greq|HH9ZnA+6aAb_W9#BU+peCRi~9U6t}>->Cw4`f2cV;V zW#*2`p(8v|Sdepo@gxD3Zp!%1Sv`ED3@*QQ?%*DK`q77IOM*GE`Q$k=j~8%rKkz~h zMXF5G*trPZQ?|CrqX=B%h*1lW=o7-p|8k;p zhWzx_bVkv6>`34Ue#y(~mD)c5KEoPB?%qN{sqgWm?J}!vNzArIUp&0Ek4o~&xUN_1 zSeKjBPp06XbIzbZw|ta86j9eX*6Z-0FoufycDliDi6@&{fxye;m&cr~U(VjE5UTR(cL!*n+G_{@%aXnuyv=z;itdB%fVIK}9BH z6u{c*%psZZO@*yhu{Kb)?T+eht(U31d0JD_q(+x-Y!*|$B##;H=d|msI^j&^CVBy zB!@Td?fGrhoY8w}r$15fq0s)p@6mOGEobvMskg|kjtnu4-oQ+nkzDrWtoq;hx=&p~ z7YJ>m$b~Q5A@BWrW2O^srrGp)A`Uwy);$l!w?8E`*ds}V1WhdUM$yEBpmw*Nzp${e zST#3hv~%9P`^`A)0H@qJch8#fenm{T20TzQKE#*Xxok?6S#wtK3m}dWjGI5Fs{z)F zepA3L+aLwU;EWR)04O+$#sJ?=Q6M>ca4ZxA%6C3|!*SrqwN)t@xI0malFZ3|-)gz| zXVY!eV>;U3TI%~wfZdBOfeB4-aL?;_W>!xxT#q0LKxI2dF#S!%gkttvkhwC3f$vjbR*FKtSTV7Mzre)!b{}VX%ok(l_SiBc3)mc-`hWR6@GLb)p z?cqZ=wFAUXKpi=b91ZLIw(|hQ5?Cfq$)d~VE9$z+<@(`19dv8Kgy)}VruW<~)*&np z^qY)aL|uljz_3^4*Rj2V==1&XPo2LiQ&8dNy0v3q&Vz~mR-*}VZ68EpS?S^hLTey! zvD)_wcgQa3u>fi7Lt2cI%}$4%PMfH2RKXim7jq`FY-$WYo`)S-i(^7+Cy~ry@irE& zt1bK#B3U(d>t0UU_e|4ser5g1XwB+2C)-O+fA_>krJs(O{?K+tHT{^heEF_62b{b9 zhXGY|+Y%VqU9;7u#K_GEMl0|Vdw6V!hM>J^41hyptv7Kw!L@Ce(A*Q0e3|{#OG155 zf3P2W`=v(a$!F*G3=QayGg)`P*Km589fr*BmQS8kxcY!bBM$*wkI2aPx1hKj)a9DjgteSrm#@Bm zd!i4%I`7{kP%T`uV0vxFk;u%&I*;pv0irIOXl=P7Zz{gjVXeg;l{qndJ#39~1{Y_6 zz>SBX3xI{a;~6qmRGAvBexv58{iT;OcF{aFTOobtUWluM6DP`a$m z6$bj_)l_u83_^ice^3@rs4@~SHOVBMh;6&NVYCmX%#JFI4lP+seqX*oXdOguZE`z& zOY5!kW+T6ALvE_3lKXm(b&q|KbW~#f;!!Q~3KGE2;}6hSg&%((6STn-WC_V`YQd%n zk{wxbA7%BTEF>wGOFI;Hqv1y4 z&|{YFaPx`&j*oBo&Dz_=dkz1XwaxgiaG%j+Vzz@{)1$@XJtF$v8Oe&am1UOC;1iD~ z(vc}h9x^s=q6_q*a0LMHNjBT0Llp=r32`_|E4PYW5q|R!Qw~-@c@9eq~#?r(WFK(2#EY31=MlY z%%a+vytKM{6Q`oWqKshwTirt3nQ9UmfqOT!3m&_BT)O!!<*-{O;Y-<7d0&3+Vs~bm z>CzfXBChg!B)pvm6qZ2)Kj&OQqmlhTjbkWG-@74zF9e<;)E zhAF{yS2|@t%%}FX4U1*Hbnt13_3Yi~+{nMTza3MP%n%p_0vSA*CTDWx$w*HT!<6H&PHjoBsZ)i!NVYD^V2mDpc zdpek^T9*=hOZ+0x_XPdf7)SvC^r$5FkTE1(r`&lWW=L2^mnC(Cf8`UrEwlNS;IYC$ zsufe7?(Zo+Axhl)h0Uc|@_>pF7v# z0I{CP&jEnY!0nL;Z4k308JRY-x^Ja~pyX$xL~DOOn?HPGZ&PNdG=UqI8V?PATbPe6 zg8Zl+Z#-!iwO*aDf6w-wFd!-Z(ymT6Y>W=gY6het^Wa0U70lfBTy1LnU1FRBAVmWH z!~)-0!@{PWNzEG@i=Lv)ROe{1_phUW60Dx?miNpl4#JiH?12JH>#s{oj*s775fh%N z$h3hmbpoz6F@rJcj+j{udeTc|Ad6!NZm6K3=N8&BH2uxW^Pd%pd@tjOUoH_0fERM5 z{mnDzFUSo|B1^IXGRP@<3v&((0V_y*$v#w;qE*9Pi4|*;2f~;YurAd%Q~hwMVM8a1 zKYu|TrWSSmP|L1`eJelwRXttw;vWdBR`LP##E)Cz75Oerb(rS#*yi!V&RIWVGY+=# z94I6$u-kZGBwSs*;T^B)bdVWpHi>`v!KbY2ilL|}t~Ad<8!Gs`^>En3={V__5NW>C zA+qTuR6K0COsuB-=rOJ(8&J%wJKC?~i_-gsIA*z6LmMD+X7jlS5>s$#a+1-K=tz5~ zv&V;FOB`Q zRnF75Tpxai%iyUKicNt8ikNd5Iwq-yCJ{P6EO2Tpvm`CtP#0n`p* z_porbs824EY20L&KTNI>bFhJu^{hKE8tq2+VHqmyq#0p=^Igk{2_yK1VvxR(zbc7NtE9ywN|sE??Qv&7*`}3=>K#H?L}JFV;)ZwFXL;{Y_@k^4BFgV> zHvN*sSWG)4YxiEQWx0;MdQyscqVDzRUQ|F30cw2x)Ebt{jhFN~M7_R<&f}gD*9gdS z!Y`-c83V~64pFCTeleW9DLt%BAfjj*w}jD?g0LI)T?P5mmiKJ3h5shcYqi4y;qWG{ zqV-i5eWV_68>fN5TC6~;6wWw_7elICAhZGkcbYqr!g9H`3I9yE?h249rCoQl#LDBU z8lsX)T+Uty7ah|jOcURK%pg{RNL%(iU7J#oO}XX%{@joCh7y!r5;GW^XGV5iPPDJh z%aOe?Z%i$twQ`HBTd$UZH-YlN=Ew(cDTn9c8QAW2z1WZt1J zn3@@cLV`qaj{xgw~0_Q5bE|DAW6sGuwPuQSI{ zAw7}4K2zW%`mxH!7E=`m#5SSWod(MS8(o~fVYX&)1vh~N_J{_YNyNh4P13`KBmI** zImqzw@NcR|8VW_c_kf<+}Ogv`SYC zinhVv<+GS78{Ll^{^9luTW;+b8)M`MGRqV;o}N!KpYsGCWF9l{g;cB}cn+)+d?`BQ znT1*9N8fPfi$Znjx9ODjns=psrVpw>t~sB6uzvErHVhJEQAhQFsqVuxuW|ks)5yFe zD0I!{5d8t#h&95;D;b=pdJ-5&+VcV-6u86up9_D;_V>u1>+V&0EQ!k*bm$bz`+h3u z*udcRDGCTi7}8b%LJ}xHP_9Bp?pYS}c^1?u@`{uWBciV13jf=PnwPhF^RoH+B72n4 zhZNu$g0Y4G`4;>IS&ZKS+m;Cq7|56`Ix<`@IwVsfRs!drNQP%&O%s$kD3r+}^ip2T zF|gW7S7y_oK;J!iYY9KWbEtD9{RqCEXF=Rmccpf42eif9UGyDg1?uoCcbg-Xtu@)40X|^0VdLq3WhZ zrJn9$1}LVqkmjVz1&Bz59ro0&#mk)V5Q70+5w;hJKLCK8zu^&(TzU3PI#Qaq;zw9r z_YuzqtA}(xy<2@AtVV8RmU2wEIvh&_{-`xrZ_SW}`%L~|(bF1kpY(jMOrSADWZO*< z*lcRVy1d3J%QFg{aoYm-q?#3n(juQFrln6+;-{>Y}F`Gc`zoeaFK@EIZyb{3 z`N08z^;neBe&~O&bQOM0y>I)_-3kcODIpyyFggUJOF&9Wz=0S@Z8Qi-mqv}YkWd}udSE{&$rhYtN6`4DDDE&5bXDZQ6H#8Ln`Ya=I8BkZ#{0z3G5dR_sP1};rw%bgJ$1eUiJKQPqliQWt zs;Y65*1~m!gz6?J(+)EP!MCj75Ae!rCO@Esyb6$T-@H|760T{p)GD&yMLsY|Z$f1R zWa6Ba?by!d77`g{!8(90Q9{4bK5#OEL@vN{U)S4mGv=vo5rycd=WXkz>OnJtXocYD zFQCOIoQ|yMYaje?5`q_O3vsZGp8($z8%2&bSo_?w9rZ-`NcaVBk<8a8ht&A5UQ%lN zWqFA}JIzwmHADtnv7Diqma$L2uS6mDa6Xus%)TY`a+xMmKDHZyBYwLG6F0)H5<0+* zqdR*z0_waAu)eFO?Vz=F^^afz%X~DSTj=P!oAi>u`eI=5%s%l=&XU6*K}g^aCbn zP4O-vu2(bs(O0VML}LqhAEL0FNrD?XX; zqEnq6a+}yGV@%t^%yopk0F1Av)vB$}jrcD@TL77usnxk^`o4b>7u=7Pmo~iLrK-hp zGDO&4^`zFT9Da-#;{XSM!^UapPz2rJTYCgL#ByY3CDCBT>KC`SQB5dG@o{md}{)V&aiSRa?wD_orFrer@dIw!We^OrZyx+k^_ywB8k!|O_j*+T~}#lYN8FhI`$?s5HH?cfBP)d zFx;G^z^IO^Zbw488dh3=<)X_o&UBpHSR`^0UKhc|j(P^;ztFg)hOZIBx*UWIa&J*+ zew*LW*c1Q>HZ-aaoO>^@M+^%gGg!EvUHtPZhDu=d;^|waMvcpp(>Jbb{-qn(;$(;Q zr&aI{z8)=QD|8j`e)Y^~fMN@!eA>3W8D49kjpsMCwP?Bh^ zdUdU9wMC>Al*U*VPdxH2XjR#XGV39@vT=Cja_Sd7xbXU#w$5fou5p0dO_^I)9pgPB z!-eMRvX=O1WlG6tp4YNrqo|(=-I64ANmXYeaG&N9j3do2O5#h6Q0a-b5VH}hV+Jpc zTg^Hu-gEqD4p5tOYQ|@#k^E${5SsLs`l@C2VbK$9oG;L@SyDOuQi*b_wyR!Y>d24L ze)e{9q_peCN8hmo8(6(XN%i7TL)?7CYIJmmhpK{0n!#qI4#EP&AnHLZryqXcvC3>Q zG-_E50wfs^V(4Wpim@q|3;zn(!_6{S#v5&}nt$htIP`zdH*om$OQT~1z(W_=^;by9 zVzT!;JrI)FQy2JG992q%i*G1Tis>wn`G(@)x;p27cP|n}k1zq=}WFK)VJQC*-JggN4M07_8PriFya1Xz4u0>8y zGGT?0ZN|CefJTFe>U?FD>L%5H5rSw6pDh2I6zr4gc+_jtQ)-N?>g5?N!h~xH@x}I& zrZ5w?k}YKrY$OJ`)Q@C9)y{&v$KE&lQp1cUo-Sxdd@st2@=uyKv#aWG&X3l6oq+_;jHhXFq=v39-$-ZK8{oTDve5n09>NNL;S`;n+bxg5yYhv zqr}ZmL1JUU!I=+hwQPQKda(MaZ^DLd;_r*53L0hT^h7Bk5f1*VY9cBNb9d=|=)4NV zJR3gZge+Vj8=k@L6%-+U`Ch8tN)*%?#-W}H zo-7!%4iWYg{wg1xap?($&fJ&Q{G7kiZk_eTIp@SCZS7}$>uyjDU!#vQ=UbK^PSwWz z+GJkrocs(+l>Rjr`t>{hMQ9cBQ8IN{RWGG?8RTZDY6f0b7C1V*M3OyIxcWp6Nm@Zh zLgC!hBI=IL``YRA#Ac*>+Usvj)9Xaz@}VA$9kaBL7V_9N_ClqZxR4k7xeDKNcgOS` zg}x5K4Y2btcdf_8E@iuYmyE4?XBSldo}%C0!2Z~kzUZgCXq>GrAIAj+)lOF)D5A0I=BDLcc_JE%& z5`ao*nLdVrbQOH)OLmeT86tt;gbjnD=Z-7VSmyOzqRTPZoM7CD!5kqbtTq@afLJG_ zGJOS0sr!{4-^MF_c{2S>gRa(FHuekXFZ&^dn4b?oU;dPw_kj5=jI0=|DV$GR^Sgnr zu1d-ph}ixYpOV{Y@TiVy+D~f&;p!HumeM@NlPr3oTCUmr` zC6-L0P+Mql*9wNIKqic^l#`X6nZl7Pui#-Be`ma5*{2xYhi^1}Bnv zf&7XXlIKb~t-cJ4XL~}d*(3izWy3i!bW>jlD>fHu^Xc zyGtxX=R_dpw-6)f817>tJsiX|5{RhokhEXd{IsY^!hX&0Rej99oI2xBz{od>7SKHP zjdS=Hp=5wG-_-?*khQgOa)KX_z++5|- zT@GQk{aJoF2bH{YK8=eIfV!z9U5W`Ag3D<4}%eCV(r7&V! zhzyVtor97^$G`{?F00O8c{PipcnVB;3nt)$mQK13FTW@fo}XA^uo|OuStvn!pLNo+ zZz*4tbIYz7ojv3D{QK1Dg-UCNd4%;3?2}alxl4EQnHT{vk3sB$V0kDAP7_G6Oo8Sm z9D;(JK=B>czALA0(ng~j)lXJ#<#knSx$>3?vOTVU!9AV~sGG7`-#7i;ZI*nvMka>g zjOsh4*W~{^q0b(Pp8i#Jgh+v<3`dqB2nakX?^sX!RuiK+CG*mACnmBPs^06YyWH3- zWjg{vEx}IL!benauBk9(@rS+cw#C-ry-F$CFwcZ*yJLw}2NiA0U>X)oMSPh*jQ?-i zeuX5B*Zk=Q<&gDu7+Sq7g*JoAud2m7%2;~03CbZk&;^G8!C9gdD^0Yk1mKS>WB&Sk zrTqe{`QF2LqTa$%EB($UAjFhUsXrR+j7gvGJAw|Mvp{^ zsb@!#SKu>BMATnzLMQwXt^WPJ;Jv?nZK@j_))aE2{N>h*Jm)pLx=)tBt;%_AZ!8NT zTBEaEfD}rGdV9$Upa)^V|JD11+Hoz)<0=1MH8GoJO_JDn4jHjP=x9e|2?Qsk7{opH z+Gx#U4w&gN<+|yv3;SIp)O%SK#qr`EL$h^Fv~bpTBr|4SRieix+*g#FZ%JP9@Xb}9 zE|fce6)uKETJqUnbOY{2ScrG-4(N$SH4yXz$zN}fYDcL6U!~$wyr`>%E8im2bPP5o zYxyG;9ZCfYd6t%qmnyVFE*toiOHLZC;@Op3-j`rsLQ6o$mUeNmK)0HI+r6PkF%c|4k#WbN7K>neM~P#3 z@!vDvT4dZ$`cR`;V%m3^h68Sd7-AWGcR{Az!u+E4EM4hE5j`qWUwuW1_~hkS)Pn}q zwj4H%XjLhhOhy8#aR@|h5@6*Bhyn`2w~2Nu^Oc5wEcGX@-c8A0lQbf#v{l5U|89NG z<7rC8e2XN`EK%E|aiCiyDWZ+41xK{CVrG3AsA3K9oW=5EW4Kp4wm@ql*m#J7mPMlw zH4+0RAy%Eqg5uc(%{7@R9$c#K&Ww5+OBC?`atSLlKZSfhDcmcfo=cd>dz^hV#mA~%U7ed&1TDU?E% z>vgH>+FxlS;7`|on`l|e!kbTuhazr(_)q8Vs^XyHlkZ{_p1?yu;)?(~*4XxlS%H1@ z%&DO9fmDf$O@X46*QEhtXD{GR7)K06p_khq*s^t&%XLSA_{nOyF=R0Qp%F^eBb0A5 z3wP($>pivlI7n)-9vzpFpJRz-=H#cL3CQ>-smY--`{VrP&|wdf|L_q| zWBpjv9=>E*FG9GBL6H<-|Lo)wl&n6pB=f{{Rz-~7alE!x`lsUqfMil4ap?~4?YOgm z!R9nBqmUU%$LrxQv@LmW@QbH*A_r7buy20I++)S=o?Ql?(-ZBTv9F0q#Ac|x^rL1F z!x9WBUr3mNix$=msx+uK6E$hTUZz;g*|V;@jse_p>rJfG>rs}og7jH%-c=?+ZaRtK z1Wbioml5~t(F%_BZP8W?!U6H?kLjTsIAV;DLk#up&6Gfl(|-#*GAcKSS8pBYvK^-8 zPL)V!0}o!WZtX@~m3o_4EUT!20&y;fwcm>HEpRwA2bwdB z@cIgeX%H(e4|>EOs2q0Gz#OMdX+E1HixS~2iM*BXBhfFds|#*N+3z_oiApBvBVD_W16XKK zbZ(?S$BQ45VGXM5HS@g2qu3FHr0Cln+X@(kw!zdhB08;4`A$ckT(QNGCEflSroEo9FKggU{CYO)mRz-!t(cQ=Bxb zj-UwQT1Xua9YZK#*isQT17C@7v{)!focZb&IYe z&NHF;q&tMaz9FIctd*2D58NxqpjNcnft`tBW`%^ag9tnm`E2XfEZ`QmlI2l z5LF;P2+UERAV#UOdXNe#0)Umk7j|uO7P4#ux$&6~=Y5u+2D+_%X>W zHK~z*;`)&m;oj2s5dV^H?@7H6>206$3ZS^TWV4(2WP>D6PF;ms02N`5^b!b>N6AQNb;b=VXMI@XpIyVqz>h=M-Hu z0dE;eu_p^@*soxoI!SHXnqK3O2x)ZW{e?`xB7v=I3YTE|x-n1@67x ze54iK@b@!@!?5UM^FrqvG^m6Bb4T|%(oh%4;3~r$RdsXA?7>=efj69;F-|-C1HA0! z%Bw&b%lCo3H`1AH>C9B^gwH7#?TYFWSszRA9YcMlT99VrMD;QkTnBp1`4N2{B{_&6 zpe4E-@dB(ufLS-nd%9+p$yqhY$t0eR*qhp@QceA!%(;H#9{iHgTm2g#58Fmgd_PWR zoji&!H9=*VF}KJ5CgE#Wv`eM@h=`zC7r5<%`MUWpKE5UDqzrbz8u_Sc3&q7G> zgYCW{!gl=7bx6ZyLZ5u)7@GvASF4^6?-7^R$yo&excpUNd#l;ir9X@E*0j5@FTWVT z-fopuCryr=3wX`FF-BCL^iju#(T)|CF4FF-3$^74LT5k_AGWbS`;jijP*YQxLFAq`J^wrb1>}iP^CFrPxrRO81YOpSc{UbLzf(d|Ee64jM4Fj+j?B7Ywf&-`%Ndh!5Gh~qE@ZI zx&WnwT2A~HG{`+BnwMnJYXX`vbcqWiw$*MK8J26SOA&qjM>T0{ zHA$rlYb2NImN%TZhpULb_(}{fBGVhiH6D2jhW$>`Q9sB_Cb0^7wrgynVKu;3E0TK%=?SR~vmM{ny!JBbjfQM{sQUjI(cB z>m7etLeAqHR+!BREzcRR9Y3st*;!g%&QfhkFD=Mco3j%|E2o-M#_d>jn;W z=z{oH(Ge0v8}`JxZ?VO$>E&Hr+*heD=7s0OAiklXuD7(Xg|ABN0J?rMaF7^sTq9h! z!0wwxGA`G>rdUzejRs#|m7b`Mp0^NZ9y_c&?LVIY z=^#u4=56AT33#kIN_8R?;9jbj>s7cUqF2A< z!(iSVr6@5eq)&UtEOThZH91T8V}CbI^*do;&higM@V4qDaps;2S3_Rk{uv0i+(mtW z%yrW$Q3;3W{u8{90P)fPa!Ay5ZgW?I-<`US-mSKk_K_I;-+|Sl>1s2E{in+|>f1DU z4%Q&nIjd=)H5JLJ@mAAFZq(ZsKj3MVr&a`4g?z_9seA)ke){huNT;rTo$xo^7kFyl_xEU|-~3D3u`o9{<2C(1RQwprcE5RYi>3Eac0D@ap@r z$`uZqq|`XvAV4~;dn$2q}E3_;G842F3$c6!?6lO!>{lTUt&Uf6eL86Gr4@ zVKjOjj#!y*pb+sXd~RwMQ0LZE0%}EVSP&{%S5s_dxI^2|%@s_fdt4F1gdemf#F|pRK3UN5l%a&Y(W6 zbC?7_k^Zj_9RNC!uHVa9{arok{OH}OBIyV*-U-ciQC<~0EeSQM$;6u%QI?3E@Wo;9 z#<$ZL5?6qRzf_@DYTD+BB3EE|!xmkoS4j&iw$*1M%;LSgB>HVEKvTlidxI<@QfJ1AZ`JTcfC&_b?6vxSsck^) z9Vrr;eDq1y={7Fu_d&#SShdOlnhv(YheaR5CrZ!+p3b69$o6G|j}W8vN|TzEUZn-M zSa`bc1fDOA7q**EApRQ~>TEyGw{hlo!Ux&JF8 zA~=>Qe166i0nNpIdH9i3Z2yxT7aLgBP{;#*fI`ln?s)2s4>{Z2ESB^tPMKqQeBl*2 zsV9X|QB@+-ceZDTuWYeh8&SMGIh%Kqg0^UEmU3Z4F4=Z9^3{8j zO!(|rFp-@lHJ7IoVDQPe(;bxi0VcV*0Eg+)xvOQ4wkYi9MmAb3ZS!L7_&vi zV3+d8K!mTuau)B*1O*Fj$X;6G~4o>=}d@3VPM!ecpQo7%}IWv z2hDleCNZDMYMxHz3BZzhX44eg{2oXb5@PS#tyI&$@cQcdB>Os0qSO?l;$9>V`%lHX zjwE~NW>Y8c?|N^Cmf&uXLT3{NRXN-4_$H~%gl3#WwBr32TzyE&n)1K8>KkSgX!?@( z#2Cnli2E4KDA^o^fEEjvrMUqPdL*ZKRHjA&0g{f!LtZ?+!zW9Wh7<}5ksNA{A zsuf1)IP`7Fl^P!PJ38YefTrRgKl9}&o+dcAA~PAijz~6{@xJUmPPTROUZ*G*m90R_ z<<$!^yZJ@}2CzTVoq`qZu8US8*tZYqNLH15m&80>BbdEBa6>674Y^%@4<38mWyi7kOri|akNKYM9^dsbd!xsibrTrx2) z35}b$E>k9Db%r=d%a%SnCt9Qaz*qGV5G4u1fL<{jP^*F3i%t?Ei~tRQ{OcP1%JR6v z=gY;vTVdMld?#rO1(q!$p4$Q4QEi~4e&ms|>!lwfplwZ(;k|LrdiMC-! zB}2(DOIQ(n(c>G7?-rO~lNA?ZDhk~+S~_(hzn|+eg{qCX5Piv@^Cb2AVOfTMRc;0# zyXpo}eQxaEP2pyMB19KQ<-Mb5)}36j^C(d%1dPgU4+q=mZMp_6gHmfu+JSaYOt zyM$C~dv`3+5|N5a!@#>?2cQ8YIVC_ABw!mZ@lb10Adq>8oM9@EMq%S{nYo>SzM#jh$Kl%!sB+AoaArCk!E!IT!HgPY)FH!wIXZ-b`_;h z;KLA)AK`ou^H?&36=Wm6xt|ZD14ftbr%-rhu-ILlPFIOBi&bX&sUP8Ho-M4^e1Elz zo4SUDo`Oe`O}}Sx11-m6FdIa#xg`vgzKXm{8^6s%kdRr9?WE1Y`@0-7;a?#}1#qad z<-&utS#Y_LNDGVezX9 zdfng{;j*7!!u4C*!zTv?o=POKRI@%ZMXSoA2StCDqDPMrlPEg)E)KR$SavyH1J6Do z+Rl<|^QdwxsADo5Vkhu^uEUj|A1knj|t{@3z?Ps2s8lm9nuj{&50jz4|( zFSt6=bE~UuHPN>~Ii$GP9o`h62tnJXFcwiFjG3S(%<#Im$WvElaEW$(K4^nzE{rb^ z*Av5Bh~HjM0TDy&1jHVq&KEo^*+8$7Z#d|40=6SePSh43_{yAGDH&hJje1gHTfaVu z65TdZb+hvy5V`$!pIzLWlo)X)UCE7ATE;dS7PAgEd}PqD`CNVB{)`X?(LaBHKE$WN zL%i3)8-KTgtgjmzY0}Y-WT|shCHT;#%bQ$EGFTQG5~J+|o zaHTF*T`N+bdQh@5QLUmGslH4GmWnlXgNd*$uyMbPh{9z3qf!y5LXm2v^d#riBK4W@ z;x9ZB6}p$W3(sv{zA_(*&{Dm?o>urqDGW^3VC|?6ORqY(>dfFtk_cy;CYn-tIJD8t zWB2+xKjDMsmwX{&$ulyrZOi5KCHQ^~K`6l?pl#!eBwc{q(A8+hM(cR!sU!1XfQbh` z1?sTs9kWe?wrOSu|8M_%n%vd8!-BSP;c2#o#IlDcD_t+&|I48%fb@?mB=AymwfC-r z{QsWOVuF0Dn%_o+%GRyM7tbA(q+>5^w6g!&?8}y8gm-FzyHCKf z=7kH)5!xFtITTU{bsA?*udAn~$Ku`@sxDAy&?$YEJr@$`Xfa@jcnq{?mCcOd@ek>?$L#!)GpP zhU|mq)HoZa(iEk{GSB_XUnTw2?2=R0v=@l3ObshwHhK8ZH2fi~j%b4tcfk-Fh*r=> zfq=>uBU*}*_5h^XFAQ1^mt|i(4so5|EHo^(M@-$GOO>z66IZ?xegxyYDV9-5^2sFGBN3($|_lwwZjpT#Y`# z)GJeHW7~YI8d|j;H%UQ65?SLBvH@3TM>QJ#_ZyX@rSX<#%p~AnUBZ^>yi9iP#={FTgF)b~@|^T?7MmpuYX z68cia;?9!+EE-fG7~>3){LB!9zq4#?={tNwJ2UuTBs-D=9kXhYJ83SId*;ks6#mS0 zuorznYZu07wEd?(+%&;wdpr}M7ER>4^^X66c|@P!oj}xHcBCu%`Qdm!dd(YkV{g@_ zZt~mqF$usAh%;0AhRqGhte?rdTf&viSeNu6& zc)&$MRk;2t<*#i0i>IN9UGc#|X`vU1-mmCD9=w6dL2~3(6$~W$2Vt|@w4~7h0Nl#H zc2j6nUYu9iNbZ3(1K4dWpC8D30~r$g9R63@k#K>x>J2(>R{21kz2TYf!LiNrsJKzR zec!)rVH{sR5L;*u1hxh5)XWg?`<`tYZ2ik2NND`U^%o?;v$vrO3;2g^FOWH>bX0W* zS4svY)XZs4AK+WCo&&Fxi z+TwiDtQm+PUH&+z+Oh6yZ(~lb+`C@wga;-R3fryLhAvsKE4T~{>JJhe$RiXU$iddY ze6R{aH?2`v+i21*H-M*heB(uyZ9>d=#J*RLSV>mH(i4f3bWhPj!slwFMOV zXPE&9Ne|@5gcv>*U--EpgzWB!P6@sZb%13Kyeqo+8U$}PfJ7V64g?Wc8EjmKJ6Svx z3!vU4q7%a7wLm2~pKZYi2HH4>PuR}D#Pvy{Tv|6%aX+>aLynUbgi<>y$(nMj* z4R^7s_WsRFPbI{(@)DOT|3boO(cOKhqsijc!ECZ?XS0K@E zX>k7fP2Hv(mmKK|mZ+b7|Bt4y8BHdx`Q5`TY2TTitIw?}g{~par5;+brZ&}W94iCR zC~t)TYrsyl-3j!Ax(ul3nXfO!j^Psc-)X(5*O)9D#P-x^b>4X`@l9{=`=KetX}vay zo{ocf#95O1wpwlM<=H{xtru4oU%iyfoxj*NN~pD)K#Y_e7aqRG@127$U=qiXB_b;V zZnEM4HQ&uU$`}SuY4Oc~p_iT$!R`cw#*bC^EAx*y=%3+8f3yek@;(;QW}Y4zI31I# z@lX0|h`i1Fs{S6MVxa}UV{5|a-@$7x^$z7{z3OKp=$9^L#cO-><6$35CYY%qKoQ6i zu1Q5A4<9+9Kd(%7f?Enz^}4xHeYJ-Q+~66N;Av2N!npd#U)m(Aud0pfW>+qdH#bi5 zX+=+Uu5_tEJD-+Y1cnn{qB!EKB(&2P699=%pb+JwXB^f#T13d4Jxc+=c(;##!OfiJ zW15+QZ9jYHt^_97*#`6Eub(NhSE zJ^%6})NmE3dAfWQ2`Lc%(Y8tPu67I zvuz&S0BiU#e8$4N%ct-2SN!_Lvfq_!us~GF#0mvsTy8L zf1uj3)^#r3SQ^U_Zt3Eyg<3T|mLo<};rI9YlfX*^#5$rA%A;e%@l~ckK$Dg11$Bih zY_vWh8p|11syA-S_~{KvcFY3p#KvrT7mE5<0fqTd^-^15NaZlXqb@DF&4VQXZox#i zbARZuR3{ek9H;U}2Stnc(ocl4RD^&6*FY^ZOL8w=K&SPG`@L&d!wpm)mT`#0-g;-V zz@PeLmPQkgUO)4mm!}Ph)9IU!KRNj8@K;9ISDr^HpSDziLn?szuJ^lm0m8xR?sY3n zfy(L$-r;#kLHd6YLXwfV*+G-SzGGc7m%8?Mdc7FOl!4vu;H#1wSaw(#^=34+| z4AOXq{hT?b1ZeRf{_xy3KK`YO5r&1HSyrf*{CId>dNAEwy*^27ncwC}?z5NgmE4bB zB%P&IGn|wb-_oh#i>=Wz{M03-qbLDHp9snV{S5`~pzP2PN#PZ&f>uiaAf*62yKPh| z4{Wc8tZ=uwsS$`dD2u}`8_yix?AH-R_a6$(g6R_{8`zX=Q5WFkH9sdUM-ZwspBbJ4 z#C@bn2#we(4(UM2p)R3Tn6O%C@Q4qZ*})-|vWd7T=z^8RS%+4G*Sv?CUN2`_r!(wo z-;f;1nO10h7Gavnzrb$U15ggJ>)yI_)_U*VJ8Ce)SnVG9{M07xt>OA7#fR_VQpqGz z_X{-Vx7hwg2-<>EXxSP=IppGd{ij<%Gra?J9@4TR376h(iK(6VGLH>R#ZCs`C`!h` zg4AB#H2ZFMy|{#{{rfR32z3zm|iV)G>#WesMJ*NEtJ8+G%lgo+pR zH?vB366yxECyic<;YMO3PeXerZOjJCzR#p#al@Tu&s=IyaxiQk!3-oq2=s9wcHBCX zq`DL!r_;qcJDD|vumg(h*LF5nGTjZ4A8#rM8}OQz3YG{*y(9+SfnSnYH{<-=@Oj_4 z6Z}kl zDJt>EYfXlAUyeiTBh+rt+3OTySadt~MzqWqbk?1I8~l94_Xt#g_a8uwfBLZEtZ;sw z2>Dn4t8zNmjlOS7+(SD1`O&)V^U`9qJa!bfyDg=+H%@Zretf48Nk@tUNJq^rm=>4l zIHkK+Md=~$jRAyblkm!mHo2~+s4Y!}xOgy1kPZhhd~CZG3!bDNyjoAz&5wbZA*g zaDXX+v>AA9IczTo?qSnFqQMYW#s}ae0VY1OJ88tEc{`{l``7H4!lzby6!-jpzRDr@ zH0O6im=Bgt6lb_bqs(8XVO?{jDtUCpaw%P&v{yUnEP5>>J25i({IK&#C6JC-jsl0! z&<#amXFZ4%#QnGt(k^H(!*5l|?!cJ55dJcYv?;Z>6otPW@j-F@t=E9}_G-4)`;=^w zVUyoy^kR7F!HJ2?o_m89h9Xj_m040fSKQw0=Y6t z&Y|Go#BG>}(QA`-hc!RLHopvbPzPR)_l)m!f8JyzT&0+ zBk_*ZUK_)597}p9Nco(G5ihQAwl_-vzw#ZRHjYE-B3MlHGH%zZ_d>S(ZnWo@tt@<| zy5H*>u$)r39hRzcEpKS}8S1GN7KR`6r!4p0PWl6X{bQe{e{0k@!ec$xXt{s#Htc=m zLrCfZI)LC2Y8C{qqi6E4$r9c1-OS_wzwxuf?3(G7&C9DJD7u)-33$peHo;3AGtZUQ zdKc+zK{((1jFqB3efT{AM+tYo*Fu?F9NIL&qfIWiKWFYbw7n@)nIt|u-TaqBkQ7|Y z_S?4EJy-9cpF?hC^>nGwy&TOgBz{f)R}z}-b0e)Cpk;3!HY+j##G@xDNRVH$Gc~OQ z1h2Nd{`5P0r)ac9mm8JHzH!4y(P3ORXY@0S>GbCgwf~RA0v^)bMG3?ItFJ3|JY;0vg}t;i6~wl<>xazRbN&RYN4*E5^cSd4ef z>~wV!UvukNIkQlIw{B>M&i-A0?ZkMC>PKYJpPw~KsJU7OrG(Xg0Lpx-?p%O5iJet- z*lpq)&Kx5z+`tf1iTtXd3W!dD-Yy^;0C;qqOVS_NcK}H;HodP;YV7u(s=Y8NQ1SY8 zP%(Za_mWN#o~p&L;>({GIAiRmQeWyK^PJ7%cKYYJ4|ECXhj&f5s}oduB95^Mk)r5S zzO(eb38;`lJ6P~b$#BSnQ9u*&m`DD2O})>bTKZYPvv>ba@EgP?cckIedh6M(v|m|N zVQZxy2Bkhwu`ND4ed%6Re`*p*9lGWLGVAWuB(nQJM9DrGY=5K*5%mT31lO%+LW+DSc%_q032q*x z$1vh(JBse+_@MLDtN&v)m3To}J~JDfKVD?lZsaT5LX_?XZ!dCDPsu{Ht?VlKf)%b0 z8KJYgEuwx~qc;Hi2N^uiw^5aHgwv55#wi;JGl9VANrOUAJ?wpXqQ4)96 zZ}j-DJIs~Yo0$Y%HM$IESZ@hCk*7bA?EI?op>?byf zNKJA|0PuTs?e=y3)?K94w*#kG8uvy5K=Fmn){rCJa#_>`VtgcatNyx5b$71-cmT&s zSv&B*BCFqUyj{GKNcyU7M{I?s?rP|kGL8v*5ha`q%K#P=` zdoyJW+t=@m|9J4p#)f()|JmiyO!8Z16sPT~_u-rd=d7O8f4Q$ePkJ2xwp6g%Kfl*( zH9}kpJB+o%+d7_&Z=lN&amH8>jf)I~Z;Epm9V$$$idR6`rw^VinU zA=v>oVQ&1Q4OYma0A^Jswo1{BnDEqaCk@ww{kC?becOnR&{OpeE%hx#;{j^+Ea3pM zQ@|lyz;o0=887!qZ7MmETpZ9eYMu_cm@$^fElEFbklha5!x~OTQP|eN^!cSKhPJd` z%)!Dkg4yO3_Tr4(fQBn`!*LWjVlZu6q~lQ$WRQ;k&s}Z@AoF$o<|pZ|>6aW@>$dAd z_XF-=(!AI0BE5YKaf0!Xk2?H_3Obk{p>E6owB&%HNNwhyOR$vQ!%ddIyB~}e!o~gu z+GuOgSri7E1kWp&f9Kwf@ASJYAoT@!TuT`-?c3 z0E>(dhoO^;@WIFg9`PfK5R^N;(qsS>GPDO60v_dv`kLg2;~sdJz1#85!`C+88Tul zq}>g)D(mja<=4)s&xuJp%PC#ivnZ*0fgi@s;v?0u)951b$~R)8K?Q&$HHW{Jy;M~D z2@$yVRD&UpJr1YUiL0@~l&kD!mBi#ytDA1XqD_j1Vul|jA=_NIs;rke4IfgN*NCb8 z$j?C)z(&=NK$kEwSErXTpZlozOP%fLkPqMdS^fB98_pUt_d z2(eP4i(JVOEk^?NrY&jNSs$32oQH3eUE-b*(AtE*eFa7lqcu?9K$oSjL^||P&bN(? z16nPl<^Vr%%Y@XraChf!M8e_6yT--vgIAGtbX3B#j_;)ftioO8AMNW8&%hFX^PE3l zCO$Az%lA><=0oOnU{&1++T`X~Z%hQ=I^VwtK{m8wn%{LpSz))dS78!Apow z2rv!g9LswsEN)2sr{?$JLfxt1a;|XljO)|BuZPV+>kOjaoQVHy3J_H1E-jt^XS?gT)C^t5xnzW zE^bStaHU|@Efl3pTkvt$eun(T9reUTcly-oo%-zUhgk$6FbBaCRdV!Clym%}^GV$v zf$6BY?cq27sOZE77No)V=;e=%MdnIEAH5rYGDRvW{<;(wFON-e@c13#q;wd{`XZ#_ zZka>>C`(%I57oo8msBm7Qo5TQD-&wm{dNEKAwYXn-DX+FpZ|8UAFX<2D}6781%o?P zcX>l?O@XpF&ZBUAjH5$ng9w2s*s&^5W}4V&SIUMY1FlO-B=!TZvusP5mA&uNuWT=A zKb+xD-|_mwn|fXaG?c`s6}jB@Q>`OPsJ)D!klK-xnNX)>A5H0^M<^y=FMr z7JBWUIhH!AM?+^$vkWl2kouH=xl=E9)QQ#f(Z+TR@$LI=uK0~HWs1>i)+I8wABoqv z`t`NXW9|~v!l_sE-YSAk@@*qp?%#g7mmD*MnUZ%};Ze)GXVs`J7YyPjOAQ=#qeHRP zY5@EtNZMtX4ruzdz40x%VR`}B`sF+>BtfWQ`q_rEt7zmGU^2-drT>_)f4es8|5&>2 zc&h*Je_eZJ?=2%MBQm0UZP}8QWG7UYBC_taviFQ+WrdK?z_l`xEwfyE%U;*L_x*kQ z{C@xY<9eL;>-9S4xsIk)U-gOl1b<8bksd~lbZv`$Yo-`5$Em|EE3^oKuBuLY(s|4~ zM03u7tsD&t;@&n$v7#hAD_-YeZ-g-MocCP1<@`?`?O(BPY!y9x_pf%4h}*q8cu^Tf zE&QyHCiH8cT9g6aV?m?nSlObUq7Li4%s2GeoETbY7TvCXO!iUZ5ij)FSWiG0KiwU_ z1*RjmD_DF9rRrh=mJL@)*u{egv_Qx-4%B;X(#XIeR8S*nTCvp6Y8tote5wvImarx* zMpYEaE}H!Ivp1mHpB}$*RhE%!O5r*Xyuz&M_6FK|8UQU22tW;c-Y?S4O+8f_`q{LY zzvu<5pzY6g2s;2_2u}uOhf_f{57y0;+3ePGZ-rTDPH=>u**&dNG*zpurn9Mwhj@9U zaZq>@ES}YIzsp^`#``>0oO2D|`FZP*h*Pl?Ie|RBdaSs{cR{#~IgG_^g^Ure$w{ca zeMl%hwrGQr@Wir6(8w1t$X=PanN9cN$H_yxl-{2f!7U^%zNU)sXqV1;KlAAt{<5{+Jg<(pCE_Houm!|fI|fW|-8rq;Vr-G&fa5iF&>sQ8;+sRQAAr*f-piHa4ypP})^e<6lVec{gjovaAX zP|M8vesSfEWPN1WUMG?T+q4Cc?Sgppccglplg5m(yqVN8x?H1ncKY;d;zkUxqxeM1 z)W%R(5#8Swj=+)`&NV1~tToNX@I~F5$j)KK@}FTO7;54N);Ufxcup;Gt9V!wJ986>ioyh54fxln2hCMIaV(Xf~y~9a$HNwsgDsh zRq|%-&O-m>Pu|Tf?OeP$f7qH%HnYNCxG5f8TeEF2*-5)K_D-7xwZ9whs`%*XNS8+c#u8Ekuru z;mHATA_Ivv3p2Bd#|mP)lBzoDxw)dxTH2i#jPrJM=Sw&wsqMc@nFG(?vo$ooD-J9nOt7BqNxs9*8l z0Tot|s&dCjda3$X;>t$5UvF%i96fB&ozwpQvCbuZ7khD|Gt0SL;T6J0m)NQ{H@W%O z=XO#0F1nkL#9)}I4chu!Qaf5B2(ed+LtKQ2z(D2>b6N&01*z{IG1DXy>o&g*C(2y# zenPupq3cT{o$5W)f$IOK9q|s`MEpp2-7TDxFwmj96b)o3*Nd=I*(H;fP#-+jS4@4n z;-)(D31j#hnazhwM*bKDMR$ZI{JP42z1$+W>JvT%W;vrQesMijE6RzFM3_m+pR~V} z@TkbloWdJbwxHhvX6OQlCK23_dtJ-I)8mba={wmwyE=wUCt`Qnu`?oS!3h&jeTXUsWOlnjZDAz( z5GctXS(gSW2u&ct38F{D8VbMDalB!{)^N?oV;cXV2YHFFHDmO^e z&W^6`iu1Nsoz{Kboy7e)UG5kf{I8b-K_6Dz-{v6s@W_zrgClr`j6|(2N$}SnB`RLW zJ|_SzhBY;nz-q|V10o0~1OnO6r!xA(EFwPDk*WXuS>xo|4$bYyK5R?hUzqRae8gs; z1$#_6$!+n=9E24<3D#wc+8_5n|7iREVfRgFJaQblkYCQW4tn_klg(Slif7@XBb$ga z0DO;}E`L157_kHyq;w($Uo;3$*mFlZwWr5Iie;V9(|`m)OA=QBfYJfc!5RGb=jbEa z4G4q;1rcrJ-m0P{MYKT%mU7)$Gl2~fpM)okojPN1MoVSP=9zp%=BcI%X}B$2oruYh z^v|oz0$ssB^;;94s^9~Ex{0qkajZ7Auq;X>O_ILOH&_t6 zG7n|KYnEJz(Tpny5SIE1xn8Dzt*HPgyiJV-?6>gbcs5)WKq_`_BCw+iy#tAcI`pS_ zaxa9YrAPBg3{MZ)4_^Pu-+v$F^!n#J<5(^|AJiZ5?{tguQUbMz&cHz%p)S+0Z$!19 z^2=Sg`obp0N&sEOBU}rUhRFlx*NgM$RUe(& z0NlHyeZM7yQ=IJ%%@YQh|xr50-AkpPs z5C{>3Vo`@bHGz~=1Uja4O$g^J+YMe6K^1sy zn3*QE%ty|p*4J8wk;8;Xfd}n~gFetOcb>h2T(KWnZi72ONHaClo-*{6JG>%RZgh2= z0IVPC=I*SJjneQ$oRGV##%d4yOR2aNc$e~uG1gQyT5CtX4?ODh@NE){esLZH*zB&@ zSEFwckefgOW)`n&67~c@E+U6@(@2gXaOf75z_zZARIJ37?nLMJd3b={gUW`b?K`4p z+N9mBR5CDowg*s>$tsPqV4Y=)0uuL}Z{Z(mhAAv-cuHEmdgkhp&eE$!SkT;sSb0pS z!AgVLjmrvww;Y+(y%Eqp zWYPbgX)Ty+l=R>KCs~nQ_xY15t(4p~sCI?3Op@h2k;iD_x{ztra}hi1qpQa(iAG=L z6}iTdVBSJ59to~L#T*Nqw~rl5ODgi7zBts1`D(=55sDsv(o{ke`Q;MRXSBzKS+J@t9iMM);f%manP>3`zlk)L+JAg znC*x4^!c3nUUkeX+Le0$8<>ccUaUZ}eQ7?Xp==4uXq6#KyOoaAB!srof}RvwAOQ=$ zLZrY7&kxn8I(k7k973cTn(jeD;qine;FIx^=Df~hw{peO&vlOIJ}ed0k{EQ!pj$lL zm<-wLJNU6^n!6#EKH!-tDU%k{@FU2|wib4LXc+U7pb4sz!NqJ*NL@hJz6QV}hyPo~ zx)lc9upKu5Z@CBhGv6N3TGKQz8PKRTsyhp99!FA5rP9cQA2-odw8B@fX!(n0x;b*& z7T`xi`0#K3Z5lwLz`VLz*Sz+-NA-+_fZ%eb%-fl{ zH`zpuu$db-@iVsSxkg{U+zB|05DOaVWMkt?aiISC^ikiV0_(DT@8Q=^@4`Hod}Z|A z&N|PGnM1C|A{ogrg_spsjXjV@h_GKVU}Y|#Af>OC;ULy9eC{cqwkqwi+ddGNdzUK_ zwtI8ty{p;_LJhG~$=7E}(T%Wwl=-A%s%qDHg+gq5LuvmV5w}qgy1G@%zt6pIiG{6! z>z9t%aTUlNLc-;@zCww`d(fD6&_juoQ)WAb;bj9wV?WQw*QaozfsV44_F4*8?K9yo z5c?`O_9pAk=uL(hU8>(o$(EZ81Q07RMh@NdvPGNXY}O204#4YTs-Fgt`%uN0 zA5M#I+J1fg&qYa6=AA75(+{lqQ*LG#3_4A?JH$K4$CTzn9YHGogF)vT3fSmEOXGp0 zqWV`XE!wcKz+!^Q0^)*-z{&;s>6P-qjj4E2H9ZKZFNbIwYU!$aRRc66MW2h$TVX5E zv%@9I?XImj!S4AX$moQ?{KsIH^dDb?o$?POzJ`qp7teg|b)YJZRSbp*d@W?}>EtWV z`sWcMN>Iid5L9iC6!8W;)hmEW$^j%Cd@lIW8YB;H^OKA%Qq=QQk$i3YZE)JIIjXM+p*<>4yg?_EEB-NVhGNx#OgN=+@RtY&SPbCV7yq z-H$YFx*lVFa1=W1{$zpYm!(X2jWfT53cllnAYb;m(Eb-=3zg_LX!H9I^;w5NH`UF@ zz%%qvA~wen>=e``j11w2MCmf(V)3895MDjg?R)tb#Cwi!RTb4j;98_2F+zWsMiSM- za=%VIC0A&*G<%@X_4bz|c|q#1VB1;7Lk~{J9oZXJ@h{GrzdMGC#-Z%}%3T=8zH$U_ zoboz=d7dMqEF+4eDVQa7Ib8=-7n%a;VHe>;l4(k zJt+vOp*HS%+RXClr%lIbLn*W%(_Vs-*vuok@Ih-&oZnCTw~{ADbidGXS21}8`&IQ= z`{fg49`Xbv9y>6H(oK2-`d|Y`bvIOF?uJh->Q{5de52!$kn2rK)|X~G_BL+YHb%Q4 zQ`WRE{!C5Les^84Bsstdl{EF1{Wbfe@+w=ZZ}v^ZjSIeG*dfL|#1F)e`v4{IEqVqL zkA3K6br?o@IRlEiRC_`0$ZNhI`ynK1%-zm z)e>zq^Vsq7x?+wQbg34Fr^}fCIXu=^75mN4s5kf^AP-PQB_E@42`ZC@6#Lr6qivK_$ z97sK6AW?dfB1?KK4OQ}R$1Z1DvFJq#?6Q}&`0#2Yk^#7}?I?nicH?e9bQZ8*b2b9R z`yGn{#r@~P97GV8*9P#XDS;I6_6_bi3|CsE`o=9yPVRgo!FjI?uyR9vE)3hLec#gZ zr{B-Cd|>NI-G?r}_!Q2eTNMP24NCxZg`BKmRq~u3<^R1y>nLI^+tDq0NrxwrR93E_ zIYmI!rmWo{)V#p685EL?(@g>Guyss0Vg%GPE@MwY*%2Ivf>ROkLzt=EQz9Mi3ALOM zIZgLHZL63hG=-=hKmaQLmzPbbD40zA|K6=bum&+gg93oOuX) zH_1cus)6f#3}(M#4;r7*$Ap7aX#xgZiCvIYJf1EhG)9}Ak_*wxmHU(;Jf^Pj;GLrH z6(s1#5Pu!DTmpLjmnQ2PX3O22zT-5;RaYI`JnXn%-~ z$vp;tJn$P2j4+ti=% z$fw=&Y-At1H53C=!(wZ$??$ggEmufoEtHLM&|i+mn{r!O0*t@3KPsk)S!{ zn8CMJydnAnJI4`05sY|Q<^gTGn5CJyZ%sfSq3CwR{43V67`=B5M1R+B$Bp{r++CDp ziQL^^ICzLOq}?Cu6vTG2S}L+avX1zUd2tK7 zzw!1*?oBmKz^~l%krl!{11ePVJ^t@uK8G??U8d@%>M&?u8J6w5*K7LKlexJXO$mTr z^wHl`jlbAvu~#-rJsW&SV9t607;-1D%M^d!As~%8vjCWy7Ll9C-J3VDF9=xwC4fF6 zf2jmlWERPelAsMmkdW>v#SroCQPerpeXh8MGgKw=k$#auWt!IL!eXcXUNpL*H$1~G z@@A!k)Lnh*SG#g_CWrhqH=Zq{wraSB%r7eh=Aq*rSX?5f4M8Hpb!@dTOp2fx-z0q2~$*6PlNix-s7*nRGUTXT6O4{y9=M+83 z9SWzEH%lhmokZ1eYTx_pd6}h7%YFL)fNG zpxNl>oSf~ke^zfY1VXtH&9yAZF_95>v~f>svLy;Adgle@Dt##xQ~!p{anw8Ah6#@9v1EU!s_I|%@B0IVSDuxb6)A={bT25=vJnKxIA z%hsbJc95eMJx{f)_$g2`S>9>AIvyaCf`quuK_>Y|oHM$<-!5gp;$0azRcCLrz73oi z{`hz`QMnGaTW&m?LVD|*7@HP&4*?wH|3-^}_#)vzV@BCN`TxltHbM6=Y$hY;GGex`ofjP8@aR#Tb{i80sV5ywVI89_~4?VK!%rL|h}QP$xMzbjj}@Xs|sqiIDyW=Hcyi zhU8BY+@!~vfOen@i1HJEOa*m-kXh-9}|KKZD%R#=$p;PvE3?wCF2}=0I^JuK1izn4bomTlG)DDMxIQ{=n-Q;T!w2xwLT1D6MnafOUGr-yYS zlq!sD*Az=s$lDq3GgFk`{OdoR0(i?Y+K%0llB#v8qPqV`BZr#e*vt^bB7S?$B>3vLNefgW5#Q;UkGuu;UZ5EBJM7C4^s|y*-=j9Qq zt?Uifz8%ef(?3=EM(G@VYMarT7I^XQ2;_4PP%0VkXmU6GHg6r~9^Ax}!$2431u{Rg zA6s4XGxQoIC{ws5#QYih=?*Eg;TmMh_U)?$TG)|3-c7VD&x4(aXHCLv;o-uG4mZ=rZxlL3w+N)Y9E!fCflaCyS2W+e zs+sQT|0%!M9Wjo^EFrUSm$w|)DOlK!-m>sT4T zHAFZ11hC1SJ^{{h0ZzsfB;1-r0U{?!cE5U`P{Lh&m+TO>!xSj}` zKP^yhW3YGurzoqsk?0(P66*4FG4CcD!PSq_nH&^jt3))^*G++PzIEhpv<^-aSiS`t zJSWsyQ#L}r>X|o@=}Eeznz8d+djHBC@I|)>7Q?{@C&;Ww0Y1+ zDiu|3toIGo`(9l=>O)l(-o}RB9r{N6@#5lMjSJr~(mccxlZV&=1DF6T-$Aq%D=8#2 zY$KfFsU=6f4HxO3#t+GIX?P0Ci*hPsl}XbtaB|;=;!h$Gw!EEJX0iupqQOwL(WRh= z9cHhImzx*-AIi`9o1;x#vR3f>ryugp(c}NgzK~gdfPLoPUkV6Z5JG&va`5SuIOR`~ zM`?ovsbmlM8VXyY2cI6KE0??L4lGJ$06+3cL_Kp;WA7YCANscXj;hwKKOJ|W7Hu+A zL#NT<%+JaOa06$iyO(mgWe9Y~cI>;Xq=U`chdf8n;6;kCs8XvAMe%RcWqpY5ZraDp z;y%{w_8$=tXK2hYBS|EjLu=+czr@4jF`H@9A zgQuCj8A#e+p{A4F?3lq%ZpC+uY!)B)jE-NAk(-TiZ_Thj%ZDdnk(RgtEG@yWXm@&N zlLRuHD&)kb&<2lYSeLh$rd1N6U6cZf_?*No-;7Rv&=7Jb_q9%7wi(yVrW*-lZ@laJ zIaC$)BzF0TTOyi=sp!yhTAn^40Lno7yl{3`G?7mQ)-)AsbMF5TpL={2JBv4tyFdb? zi2an)<8TOEhMqJeg5fmps^g>F%!So|>_L=B-0y*$x)a!9}2%j==wj@UNDLyif)@>Pob2sq~z! z?e4f2B8x59^+2_YZKoRE`!#EGkHR(2%BWL_%;t|Qt<^YJv|0D_ab5xQBQREX1L{7T zwDPWEM;+lUeS%B46oD!p10^s3j9S$sghfzLq4>GqKwEB4zu*nih>x-Ms?x;Fzdu-1 z5a0c=b3Fm*V0AL)tK()mD(zrb8rvYQOLxwo*6==Ma>mEEznc6fnBO0T=fl{`mF?ik z@Z>ml0QBnAAVGI!+(8Bu9O5A^C?c1_O7s$~B>ZEgz zX3zht5J=!PKd{)MyX$2^{-H(f!)xk7Z#^UV#`eIEVjw+KFbUjAMc4zlLV}lJ@WW&j z4H2q<_JUXuA88Kd>@SCkzj`R`n)%>RT?I3q}< zJVmV^QS=)t4IRBswqmHicOxlolOjS9C@)!mQ*)RPYNUE_Ri|fw@kcacAa$Y6@}1J; z>n?B7i#$|@J2EpBM~W+tk}`OmJ#5Jhj2lrX5Bhm~(dR{*I58v7!TcqSZ;u>ai8OBU z020ANYQ3RgWA^c%6rk$vMjYK3?;-BL+Fr3erE8cpyC=9N7VY zabG$gLXTo(gxbQLJ|22MuXSvOC?jqTspzcz3)nRf?oY=Yv6KvlRqea3RYUEM)Xg?=_2y0 z9s`aYwI#4*|Iw3mnhNW+g6P`*X#{EbO_MC=!cy-c+eWUSE04x2%fKt1AJ-*EGnFrz?iO3e|`!W-i`wiDjdjEQG2X1kM+Nqy% z6Z;jQ8?-M8f((EiDA)y#LG9f>D**)@rJw|c>6zlw><-F^gW7i0TYDQmr7l58cy83? zg#NH~vq6WK4&lFKY78{bcjUJ_MZQw?5&h)2H}+M8WdGZfX(fG3Kia0OMQ5&u5f54< zf7u@t150Y0Uy%~a7En|Mip*5q(?>G4uFQ?addJvljP9wu{VCP#J!{d-aU!AXk8H=w zWoG{#@;?f3X-yXUA>rveemy-v$MLRl_%jJ~3XBy`)M|yd-%mQbgVrGc>mY&yHVR1mU*$x0o3(Hc;qah%Mqqn24&F3=wzk7*WEb?by|HZSQx9I{h! z0Ss&gj(w0i7+?`L3`-@81&LLNLx1+D<)Tvc>El~FeQ=}CcCGNjQkm;lat+uOUIe|@ z3_zw$InSy!b0lw3Gt#A)unY4n^VUOx5owy)bCw`Ge2$#(8Uu|ExTTN{Bv7WgwF{gg z*O&m6pG1&Fe(@29rr0gt!q0_n-L_r(jFhg|O)htmAEjpMf+{XWKnk~8A- zUbo$X?U)Uz-@v4SE$UJ3Vd=Yn7Ann6Rw<;=I=ILv{CldywV&GU1LNuvgF0V7I9#>j z7dh9P^|4Uy5*Q09qrju@#5^Vpv=Qb6c#?mNbuH6VD(_l9L=<}CG? zMlBp{<;q54r8dN}8m8Lc?5v3n$MRUDeW86!_6 z>lk}W5`Q6b3u2sOokJ6u_nPK?vv|z1c%c{9i%@n(say_}9^prSK<;jAu=ZVWvO=%e zp9tfTo4X)XmQN@~z)8rpAVoyb`xP^*qWynK-zclRv<%m9%qTUlTxT44-ubgAg*4(i z!hF8n3;!m}z;GjIqK6Q^C|nmPUTegRjhy%suZU#NI+DhL4~7_??;w8!4Ge-e9EiVW zjkZA`BKHHoXKS;3JLb4Ov7TdiFol0FIs>&~aGiQ+NC4`)-c@Fp4x;F?8tJGI-Hs2P zG~QO(vwY8j7K}W+t*zah@bptim>NBD3fYl#Zoj7iSOTP?VE2UCl!6FBOv8%c+N67Z z6>zc{&s?^9zq}m*5rem0oQ&~!OAm)0sR=}TsWz~}!R!;Xv}mZXMbxNMl48T8G|#B^ zi|DvTb3Oj*Qf<@fTt&xPodWVL!3{qI?t<67JVVPUXocFn3py1qySM1g7ThQeOm< z2_VNcHNwaZ4a9J_;M^h)SzCnfgozD%Z~tZBX4%XSey#Z`YB=jy;8+9MOAS)}CM)E~ zrt^cBr%y1zTf$TTDP~!_4GzEDDSBlzg4a~+W#O9PabZV!)xV$V$YzWN8!e$;W|+oN z=)pJ%d-d*^t0ULMajHVX z8X)R80M(XB0hIv{GEIedC8v4?O2;;`>|e|2QR8aZ4};?LVv zES_-}K1|S@&yuXxyg1KB=xl9qhUteN?(74(8#uNLLIMu74rPLJh%p>Tu(&9tHH731 z3h<$jAho4jY`Y?`>MT}{&PC6c``#=OJSs0Dp{ZMgI|gP!V$^D5G&@$m*-Th;$u{Z5 z@@1*@b&`RyNQT{e=Rg?ZH$a8~TN1EB+hEG6x>>)C``+VtPAS(9jnoTv234P})cvbB ze4}G!*0Qz$zztyAB7*os$WZ(ya%|cXe{={_XGYCSviXjug+0`i)~3JPFFt1~hkPJ@ zn}=Hnb#=S-HC$tIJ|$PoATCDEyAAnXQvHF>z#AfI*a{e)q%pU+1iOaGkj5%*-oXQd zPOvh2AZKn$P5?b1B23fNEJCtVj3gZsmu2Qzl%eW<{H$Ot@^Q=qY#W1>yHO{m92mlwMiHk-ijx zriSI4ejrx9-IIikN5ZE2LlQ3I=`yb1ZE?QQF!T*z30U;%i4i9u;qoP`{|2Scx_RFi zm5{o?e%-Tvh*#sg4CITY$-|Pjo+Hdd@$r+_CpP6|tj&U?T69g0q354hEv>^6I#3A{ zE;NIiyoFi<;pS)nx)bojwNPbsE7cN$JLutHQ-d1h5DmFnTuTcDtE zrmFt1=IjiU7h-?`eXn@mOqC(|rN8|WwNbkWKBQdp|=uA}?r)-svw1X4Kl z%5&SS0oo1U$hgTo$-9(M?ez;@9%_)EbJvRx3Gr=to1(%Oytv&1f!#qgu&bSMjJ`n1 zUMM529l}7}3b~aOt(ou*9jBLF4^xC6{|-MYQMRLQn5&;mW~}(NsgbB%*Fv$6(#alY zJNnk$L6@}r=w7Mx?a=H1-{S=M?42f)b@|is$sq+;CN2nlioXLOkIO)(G{6*Ua>RaY zVNA~Gs=98cVaZUBipm-evpAc2#D-4QSA2cVdO_r2c=5`f*l`kSS~E#xo%FnUV|h41 z3z3AZ;)e!=1;#|rjeGnjB-w}{zN&62@d^}UQ3t3wLCa}2>@6_oQx7m1a@=F?|%ptw4tmw zXNBKi$1eOJV%sEjrBJMF|p z?ggA|h4?B<_^zRV#^dvfdH#U8@H5fA<@Q(Dm>UR{UuhK2>3oR$11KFL0)2za6^<(M zmC_E-KhZ0?0r`I~&(J)$0ZPqkVTbvNg+#!BT2W%$ikQ|8h$+NWuQz~e+e_|DKKhvN zmO}!Cqo7YIWho%y!iDvnva~filqNr{HaCj2Z&^Pd&#6AahKkxjukcCbK8)3WpnSrU?1B7ku=ar3P+smQ^Ky_l{ft(-C9tkF$GUpE#1~e-k@~Z`322r zdAbjqU5LQ~;MB6G8InYx#BSlrDhGZ$Ku|PtKjTw{qm0O9ixcmmGl&^Ky&-7+$lFZ|s%{~5!z$;e z^Wgc;k%yNR+CV|q)ke*wEM(l>#LhjXRH+(59YK@izW@7;OK6+tl5#*`nSf+ifs7^y z2UGATf0l2cC($^*r$lba_)vh@zlrdLcX~O#ztJuSLo{eKll&^>L@^vDqR^~xQ^x4l zmHW4)b~Hpc;_mB><~T-`!vr-^Pjr zx$bB=y)-3TxW*=U&z*^n{>=s`e%p!=8AzjAMx@rtVs4N>4~*MgQeWX+i#N`Rzl%w- zJ5O#xg5PESN3Z*e8M%1p3xe!WFi9wy9nqb8iZbRoiyKD{l;sknR&oj_J@w_ys4N}R z24uUQ&pjKrLG&}@X<0iRW!@kk7J58RL*{CU4olZR?z1cIANk7Z+|E3g(J^f; zx@Ma-&343f%(rddj$YxzRA7DsE6thY-gAN$w%$(B)_BpCqn&faW_e8TavaQbrdHV9?3>sJsy-;I2u@Ds~82 z3i4q=u4FI@S~z37ap95 z)6uAZy{*|y0exBC71}M%_Wly*_okCy7OdXZaE4FnB?->nv}X1@#lA*sU|0b3CQun- zfo*lOQ+b7?$Ff|8Vi6lU1k+?6Ig(hIA{ruc0x)4dcv3zYZc&Jt6J|p7*O`SNO!bmfA7Cu4$Lky zbr>->QY*M$#rf0`Tt2jqu+lBZGB^~tgQ8%WRr_%OMDM{wl&Su$fLYLCcAOKSQDDkX zM8-h=hx#qO%8n&Vs4`>f10(tUSLh=1H8QFQ`!BD))uZ?_vdNe|h^rW``iKY|*(Z8? z4zjR$S4FAb)+LssealU|v*!deyS<=I@B^{PaPYMQ>GX!JLeU;ws(v4{Tt*KwqCSV|WcHtPK zIlu=leXBWa+9CjzKuo=#Rrk3sn7ei+$1e%W>lw*U?-?^E%3R1Pbc=T1Ut1z@587!o z8o7C!vYP$jLYPJp%d%X{W=P(jNh;M*`3K|u=OD%Pk5TcU^c-nF0@$D8ZNcW|FQFNO zSO!S!_l(J)a5%HNwn13xBbps5=H&-Z8Ye`jo;oC%5!X^ZrYnX++Z!JfJvkdDb1(jC zYJYbx|6S{+j>@Q>V>-0gZGuejiaye$IK*xLvcI)I21OfVM+CqB&Jc?D`2#c0yB=-M zV5jg%FrJz+)UNEaS)Cn-DS-44Hc9QP^II)SC<+Be%BBiIlE3x7xMwu}bCJQ=f?@B; zpWeT$_09}}swBJL!UUy4DyYTWP9c=k&W*YJ;76yF#|$@4C24Z(oO(?rUQKr|&>ysYo!d42&LG?}RTc1A+>jEbRJZus9OGbcBJ;^Op(v+Xbk~%`8}>G`tE|!T z^iL0`iHQ`%f9&~eNdB>>P!ryka>E(?FvV)<)8}b!%b0ze{%A<#;a(w&hfzVX!-{|S zg)h*Xu>Ekf32+X(eEGr%IUwQrPM)tuU!+Zq`}KuNc-7&P@h7hv=v2DJ4UXaWHmd^HFmjZBCrC58 z-*~@?90=s~h3I71i~FEt44f%sspp7Et^T$& z;%C#E;-+oIUtH6J)_mYK1nxjj5uwNRfQ7NZ;I%RdcfGRRJ{p08Sjo%tN4q@=2Za0dGdsOCaeb( z0;XB7=7~`kzm49*H$su~{`3v6;f0 zZT278=`Z`S;)bNzNAdo&n=SO>p2$NvUS~(035C3n`lpJE%;P_X=~j6Ah~l@NIk8zD z&5rwRA}e6*0I0AZMgr&6AleC>4I{4ZaGPn})X=}*@$pqud|#%X0GrRmUnaWVXE_5x ztR+@ZM$9LutbJvQEdl;F6zIizm%3letP-@Hx}rFqwRM(<1MwcIvo!G7U~n<$W8nP8 zm)!Q+YwTp2@SBZaC8m7zZr-nrLVdzmvv?wrj+!tTc;rTwp;`yBT1VYlt+uOtuQXN= z*G$kE-&QcX$htac#3sronA#L-aJrUsQKi_L7^>YF zu`eh;e#0t*2mf;1UjPDu@=3{>(HC%Pef9Fc^I}Mho`3iqq5ygUI>~%Q9ujiC5i4KV zxK-3Dst7=$0vELo5jOqo z2U#oUe@N|GHHPUuRb0vosT!279;cBO2lLDR{VEdJ8*Wl2!qnV;71g8jLQyTlv!*ykyO2Q2 zyvo-ykE~)g8V;lKNGZQ^^%Z(~-n^_3$PdvvjDXm-jHe{WG(t+1#wOeV6q1ZIfVW)f z&0ZI#rbAe@bkNxHF0hFS0|4Y4Pu$5eaOMUu%pZEGnkVRtlIdwf7Tv_M<9OE%?@aNc z)!b=bX1=p-PeJH-yd*y!Ugxv{p%10sdnX4x*4YJxc1+j=@)96xSPQVi2D1v`CTbtn<( zjgztA+50Xr61&KR^CG^FGluA%*R1n^f)|h!8bpHj<)4*S*cM(rnKsBU$xvgoXHe5X z{T(IFyjlK`EV^wSMIV0lzWB-Bmo2|hY>0*DvJ&ePw3Z8%R&>PSH(bes9zk_yv!PO} zY{w?QLxwH@^fDlMJgT>i$79ph`OeZdX-Gqk4jxWLK)}Z zo%kVn^B^rCn>5uA&0~?(nh_B?k8jI)*XmWf|DCcNv!Ypv+aoV)4hr6s24F`Zgt(4W zArSsWZTTIa(_Qiijq#Ti`ip}8wgpX+EWa!s<)O0(?yW+uSC9P~ZR+g3=9D#Kopv)#G;! z@z6K;l4KegbD{aVV7O4>jq9dg7l{Y(&9%Ot5c+=0l80VPZPBjLtM=_ze%+&9AcX|6 zp;*p!r1%SjDjwk;gAnG$psK;jDsYYgJo6Xpnlkc!@=df=+#2aufu@PtR|2{bndB$!ylNf^p%7=aqLE;Y;4azVc+y zmIm)6dcnXqgTLVjclZPHOPV^YajEJW)Ayafsa;M#Iqx6 zNqVgrTIu1`KssTuZ=S;?|RugZsz|!=Dy;-%P z8GB~VbkQV`Z)ScN6U?_fvfB%yc9Z{B$lad<_LZabq)^gpG~@Ezv@u@#iC-T7H4|WC zBy-gum9zW+u_udr7d9+HBy!~+<9wk%;!DYox8IH_H?l&v;dj}83F=6c8w{P7)4Vo+ zeyy!3`{f|vz1lAeY(G*2#K^SY5o!RF`rh=mR3Vv)fgAjD$9y-H@^SPthF_G&Br9LQ zd)ec^b?)i?9=PbHdN`phmE10Q6093a^KV{dvU4~hI;A68e$R!B)zg`tN>N5%YH@*l zwKqIrSntOE8^i!XdJB1U4AS#I&sF#t>3OFOBhzlOki_crp0OQ7Xo@bF9V|o#b#2x; z8-ITJzFhQtuPvTuV%%Na3s)duhf^-e8f0Z+GX18x5#Rn)V>eAlwBVtdmDM2zOwcDd z02SzBJbI%4zdeOJ5l+2I!=6fJdk$-FM!|_S{tmgalxtag!aKLTs`4|~C3}ZXIRR%f z3h@nd7jDv!8-A!o?NBL!Nsq}3A~trE&`*|c6umcfrEu97_Hv>@HhvDg%uMpX~?0AbL~@KWEof|2+gl}g+k%(XwK^3Fy+2= zqT*Q#wdQv1k1}NiV znbnM9)>vH4Grh`tQBqy^KbFqIE6VTd;xjNbNQk5~(nz1S!dnn+#9vabFe-GdDI-ocWko>wmh5 zYHZUrXgmYt+X!h0p(S?iYXoF`Hc{jF)nYHo`AY~eqr6Wb+(l9&CZFIB^gKkuvgh!i zdFripm-fB5QqR~mMJT`L4qLl=flG+WuLg?KTQpdK@iLv6l^Q^lmKYpP?Xx$jl|ypBuy9i}fQF{(CvcUD;v8!MP`I{ScPS+^1Xl<9I+ zt?vzGO^ntDDP+HlL5>)u@Y-wi=-DuROXji2$<4*LbfLwI2d=97*gS+EAp{AUvBTtU zO9Y6-BAuPmk*QU_D!)iO5D6q-m)$26n24klt3x-mlTp_~@jo7l9qC$&;Gl&=JCEXh z6E#mFUST>JnSY&>=jPgij5#HyC)@*I6*BCHQw*24#XMZ<<&`-^BtK0>q*aSUy~qxch58 z`MeUJzKW0?HF>4(`^yZcPC~oRuzsC;_!U;W_$SV0ce}WMiqY%!;9F);^xy3;3q0=a zYnkR~jaRmiqB&)&B6V4m=85|!XxxP1Ehrj!g1`$qqKbAOY9+GHGe!O7&uwqn%NsH~ z_k8xRa&TpsRn#Y7Yz^ta5ql$b+2#~g?j;~B9-W`1(3pBRZv|Vaq;t^0YG>5k0eX*F zI9mWk&D>yx=}r3al2; zbHRHWXvj{*VJS+gX}HbWr#sQZ#kgW)SSmjbuxmfBk=t0Tr;>|oM94sD5)lK1qO3L3 z#N&!#uDy(oNA@(TY0K^MFL}ZOCJdlNB>pasV(Ws)?nUVaQWH0w;>^*_C~%_04TVDC z!Ic730aj{Knqw5hes6Uj5Sy<4A>;2$hu_2mKlC+eL>P=t5XY|%xN9M@w}LEe%Fxs4L!0_90uY05V!0;#UjX?y3z zjs(i>HleD7s*8@f5jIr+Lpj6nj^QH{;*k)?a(N2St53GHs;n=02F)*Xvn%~LLo})> zsjxwfhXXf@n=G?9HDLCD7}hqthldo$@t?Ol-c|5VlZOS#y`xoZLry%Ss3hmUxYm;x z&S8dU;Y#$5^<|fRp7fbMiI1)F1|>Qrv}kej`@NJq zh&_BH5>8C@;ORiryB7>9Gie#pPcq(H3Lw79|FjTjFUfH6b#(tQYnKrnqBRmnO@w%m z91i_qqG+M6s;4t*bQtv*H&aTc{1(6kOU&&L{i1!BrBb-%j zO;?ZJqF%F^>!2w>@$Dw_Neaei0!KP1=D&Y_W)6X9f^J_v&7*M7nl-tKVIBb`X40@i z@%!_PW?>TT46mg>Zg|~G$@U5pO}&5|5Rgc5>r)D^dRnHj(8HC>)*q?vO{KIpmCP$w zQSMy*!seWg;QX)twINW@IHPDXK_Pf*L(ISWuMN5IDki#ALBTe(T^e7wxGezS>_xZfRK$?{cvk4ZXlu8lrDzYk<|ZBge2>U$+(58b#lJ_2+3NNgpBk zi*Cr5^CfovG3r5sRWc-TJ8}J8MEO1&Jz)uIjb0r$ZS5VC_agEy&L9v62D}K{HvzW| zzBNKcEy#oBo1qqtQ$0zoc){uMletHeG=CYz^d#EM2kX~o)?S9G-aQDW`?YvY@B+b> zyW+*oE-GjJK?;`^RsbJ~&rU#$ z)CjQe#itEt<|?-xIq(Rpt7ox;q(5AX?Nt|e*x@8J-~RoGLNn-(Z}>7gn-pOUE3H2Y zf8_Kyw*J;!?!OBC8_U5*Jgpu-wb!cn1y+cHUr7% z-KF{Q?}~Fs&u0z~j1Jrp8(70r92r^$lzV7lnX!byB})A| z&Nb|JrFZUkKAA)Z6DZ-tl~Y!6fX&p+!RmoKYkmEAIiPufF-%(BhFmh)eZ!D>5djn5yktneTRc zuknAu_2E^9yAL#MN6!Am5N2CT-eKx?%Iu#td`Fj3!Kc%`PoXer#GoR~F8~gg+)l8EpN{JO1kZq4NoOWb_B8EPYD0Z;T-J8ADluLr~(- z;iKh0N!Qo^Dg>@rf887Lq!6yLeQdo7(iBJ&&y2zFp)}ikunjfDhWrFc7Z6c9F@HVn zTQ@yU+BW-KkE4G3-MqGh*=)=}%K7YVVRqiLm^B{icRRbpwIEt`ReMu_KH?qk#c597dvRAgpL>;2a4OI+B751NSzTcH6CWpaKDZ||e^=ZB@ zX>evc`L>nG=59RA--TLCHwjet-u%kABOH*;T#LYV2%sptLdc#3oz|zayV9D>F z+L-OJSXMz_Pym9bbDfjzK80Z zs;7Oh{$9GbGJgg=mZ54e%IfP;a#Q^Mi>LfyQWmj+-)g?f8SM~2opLyn*3R`G_`qdt zC%M}HRp=m5jZEb}v%#$zr_FEQe8iP*knrC%Sg&k*%e|5GL#oiLz*TXFCNS84<;!A* zPk-K}08rs`bm4Y2;sM8Jr?RHDBcpb7IW_aBe5&6lVnP42_T>`QXX@kQLcO=|jy9Q0 zIiWX#U;(*#`bz2@K*sI9cU@TM(}pW#ql^(ICYQY>%9XWy3zu|hxV2bzjfiDCTF7rS zCed6c5>^|ARM`IQXjibh^UC$XVr>2G*b@2kI^X03W*^d1l_}$sffyFQr6XT-yX(Z2 zq{h1sD^y9VqDcp62-4@}83Vcw(7Niz9R7{h!fb2J_XFqv|-yHKE*^Px+FLs z6$RPo#;K94Pu#BiN-JSqn*6OJ#pr9&RrJadi& zXH%rOl@DPj>55>6aM}ypQC#G6Y};6Ikw~tt6xsZ161TI&Hf6o9xP>qD4Vndd=zn|X z4xi!wKSTQ}M!OXEW~{frp*=X06BLQ$y=v>B4y%JE>LD!;@bC8b)@ zg(Jx~-e40L#CAax`qOdYt|dq^=@`bJT+Pc3qTk#P{b=-DEP(Z}RCaE1R|Be+fH2lJ zVDdYD=c9%0>Bkv*$*kd|P_l>Jgdq3b{*t%=ja7WA^;h}z9%BUzuT~ch@5@+Dmk80u zU$3-Ofq`v>-BIX=c43{jB5fh(ODa*kpTg{AFX7fHB5|+mjahU{MP9^~DOk1OkA3$& z1yaKvx!1+CtV$pRv5176Gw?lx0>CWZ%vg2~BQkt>heGvLR?X2{Z#s-zXj_r|-C6er zhcfm@A3sM69I!{p&oj3A0UwfuSGv+lukFRctl19yd_VZ?xzb;pQ5Mc<4aDHw4vnAB zitOV2(J8n_EaLd-h~@fE0SG>`_nRC>S6LEcntF|XUy-n18oY2SCrNslipjUye%F)6_2wprrfq;_2z<^K$c_pvF*G{XYVXC`jJ(U7 zz7v*JA2X^$o$t}p%2)2s-SXw)_;47|0PeEk5KZaF_P7*(TO@?z(82UwQ> z(2dIqEXgag#Wz?II!wT$leWBq1)SC**4c=dm;gf6a;)m?E@qAqU@U8&s|?>KSlw`) z$=HJF%2>b9Rnm%-u7{S-;2bDOvy$MfLlYK11zbujZ|%6Srw<_doaAQeH=te7%hQ+{WwTF@akxgmP>n}02ng@dOD9e@W}WD3 zRrqF?=1}W3AK)KDCEHKt^~UPJPvD}ePsQ-}W&sxyZo@IY59iKQHoe)`EBlf!2;Ktl zCi^6-&YuEJ!w6ek+F?Ja8{b8oCuuB!*oN=++R*VTW)3Z9Aj<>tGN)m1! zB!1eZ)gbd$5PW}7(Ff3&Km)~)ec<7I1o#JzR_5ye?q^H8Q7ioYA zYcWLg{sNyVKF4$y2;By>ydo8h3WkJFO?#j= zV7Lj`1@c+Zs3}O85q3eTTji;*ljDX>fe!IZ>oioduUwAWJ8o&6s&NHH$`X!y%=lCPh`;5sEB!iJ4_tx#C-vD? zG*keGK6ZU_zg_l=$caxB{w?srxi_{e>n~jq9}&loa6A#Of~yZRfIQ7IKpPy4Lm<>! zB%S`4hIN{QfgkBY1;xlK{_auDf`8 zm`$);E$QbVq^PiL1G46G+oeDeOIZ!thk810$N1#Cq0Z0pcMwJdWNgpI`H#fJ)olU{ zZk2sOZ%2&X+;|>25O|4o#P8Vly+>U9@ zE)2UEBbq)AJQSm4&hOTm0O_R1&qF2XjuFeR7v_P3#}Sa&>aS*0yo2yp6dHw|CLP=n z(FN<(ZAMJ>{8rhtS!d7T_Y1_yWbDN3H*KzrAIE*aar0s4l31R*CnuSdKMRThdL?>T z2wwzZ5ey2cfWjPZiUhxY_@O6WcoYrnK2NJdU^V|^Gu`kuteSSVCLPyMte(4hAzZVm zB=s2w-tUiNG#3=d6gPQ7>5IBJ;){b^D`Hm``tSs+d&6FZuF`^6c}n9S|0=W-i*K$o z{2e?)PDK14Jt^GD$7DLLe9rgvNJ5YYu#WN9{;4|Az zgqsZnS+vV4&qMI|rIs4!fV0#uJ6*}X#tcN;9oZjH^}+jrOQ{)OaI^;;d3QvxWbbE# zBG(_X+d6e>=lRo7ZWM;O1UZ^saHnAG*9eX@aiBoy6RzM8$Ix>M{5LoSea8AKL;t>V z_IiQ+9(awU4ZL<`Z6AH@?g+d%&zCMlQsEPRD&nYkl1_oad-hI%h~Z->i8kd&cjUvk zh(bwQ6J5u_2MbwCS?250j zk$fQgS>*})cciVbCT^1;-o0)wReyAs==H1Bt(M{CqsNofut~Qd;w2%(J23I19A&tQ z2fRmgj2RNjCiK0qyT*1xAhA8xEG#QRw>S3u&mX$ewnEB%a3>YOdsT=eLoG4CVvQ__+ZSTdZ&gl#*7~F!} z$9yXT&kzOGnW%Szg-TSRYu>wj_dzerlHUBElrg{o6f;8j=XK3LOVCzL2Q&&^INocJ?@<&Z}FJr6vqYJzjx)@-8xl>q&ezlo36 zT3Z^68{Se}&{x28>xv+2VIBMWtf} zpKo=zeIL}WBD&xr&;DsOpzeUY11UDp3tM|NFj!WxR;NJNPh^Cg*@?--Qx%xn{9lb>zFxq^BHB5iYwNF`DY9XP`-IQHgTGS zlE)hE*aMbD5IhKyxI^qQ0ZrvoTUF#Uh;jxrCx^~+(QHP@m-?~T`grD#pFig{A9@V& zoS93=RXP_^s2(cON1Q$j{NfrIgdQJt2@(gze%Z^2t*Sw%^ zlr$yi*r<8SPy=m#HfbSzQd&bo!!8^$~L{Z)HOJ{ME* z5sxIW597E*?6fp`SNNVUsh>`2k^nqD#z4Ar%O=2pTKR+{Z`!g?I~ps%E&72g2P6av zGdaAe4@rn6p&x&j|E2cD!xf-KSMijGTPKlL^HqcU=Z`m zEkGcXX^5PgFBkZQw~jNxr^^~J;_;7~2!62v|E#w~B{M=`xGMAaw#MC68 zN{1;vR?<$^!sajHQX#|^@F8Zl2}0-Bm5yz^5qkm4HA3_WEhUJj0yC?_F}_;^HD24_ z5SJ}O{F#s5(0ms=FbpR-cvQ8+T6ENHqPF^Om*jH?6FFD|$+ z2EA7Yx`)8}!a=+Wv|=TNmM!r$Ma8TFg=UR&O(}5s>!^jDjAh?4^=&p*`9@w)EnbV1 zZ}`nXTmCcZ{voFz+iiUB15j@sz-1w>Wl`TuL^xTN<0qs-juOY|(1rG({&iVWYvW>SQKEKZc6yZ3-1M!i&(kSo*~C|o(smunv3dQwOSdY+ z^Rq(mHoSKfmpkq~`;vy+4BwYDEwjQ13LF^y_m$g4s!6Hndp^BYW4pya9eTpopW1mX zCWF-GeI$L;$oSVv7X&_HJR3q-#^z1U=~8_qw+v7Y=yydj2C5vllF5i|6?$H#w9n!v-k9j|a=r96PHoX*)TpttV%Eb#T52hNp zGOj)`H1q*)4x?Y&ZgCnv5H^z~<&u4&lW?Po_^Mq35PA4vE5`ikC_x*RN|TumQZM5UezzVmOW^VKC&(H)pRjBQrjiRd?y1BUUa=}xE!AjO6)Y`O$ z_4N~uq+qL`49%t&1Sh-4wY5L~)J-DLEx!Nez5ksdHG1IziNG|_Xw1LkxG$f;atpj| zmxaAxFWZi(U&%vE1G$E&r{_TKc?ds2jLJb|cvYXDBx#4Ijz>ai$Qo8Kw^WOlua3Zu z*p5Eb3-;>4kQaS)cYs#ci{O9)gP;U`9T$SV7pD;lI2}yqmllG}&KF5osvx>?w0VV z7@bjnyzTh0iEZdG`mVWCxqqQJ;oI5TK!DKT3bBUZ#DS7+6lem)ApJ9dtz-LgJT;DD z8lJmS*`j^$-|Tto95iNK#~(=r(~G!nN>3~;CYf?=nj2A-+_kWx$~yWaTU)cDJb9=8 ztbm7^o$&AKxDhD*BFK#Vv z$gJKu1Ii5Y_wT^;bSzl}+83fC!*as*zgr~`_vHBi+R*ivaeBW~QtKr9Qa=@V#xkCS zOR04SS8ZBb((4|#4jopSMwptsdP5Sjqju@vEVFue30&jMVs;i+!ik!ae{A6Vt0!%2 zl?c@Xc7Pm0;+lj6=@8Ap7sn!55>abYbC+9>fmDn6qFnVsapz5n?ri6wW297F9l}DyZF1s+)70apS%k~ z$O4M!2`tJMbb!yDH34Y1X4J%r{l5zB!#YHC26F-)FFD42ivSs#WNC8u_Im%Oc^A4w zB{m{Ucj_VHFK8Y9q(&CLO>iuz4AA{#1`<<=n6$}BZZWLQopMN3?Ig0<2;12b3z`Z) zg#0atd$lMZ93SrpQGM8h??(#mG!56no}5H0SE3H?AXZLoI4z@u z#@R=Z539EIocg%*j2H70WNR0kp*HoDt*cR0i`a+y><}bgG70H%pZ*(?sDNZkyooo)wWC) zHJ1GQ_PY}B0apj)DIOkzo$WuV&mJs%TX%>#0F29Z%X;PpZtxxxN$xL~wY}pksmPU@ z!G{o&BU_`Hq;g-V(~6WuNk-$fq}}XWy~LmW1BaR1d8F3RK(?XJ&XJ(pvs}`$XBs(8 zhgja>;YVMmpL#N{u@<@Ch;;jw`e1QbdJ41`GNJEG0$P`t#Y$k44SP4l95`-CRUx$1 zWL6PAA*Pv~qn4+pHqj)f3bEw3pkCkRPnVV-B|Ek_)P@fjWmVqP)CXLn=WwIM(2TsL z*HlhI>K`PX2+J2a5AVg=T}AJ|VUqYxl`%9fKETp`_fd@JY2zqLaqMF%&*E1*YtR0X z4`0J`PKx0aZ>W^cZbho@ykv}J-o&yky*{$<02M`-Jlp5z2+Rda0|u^HZ%N!Fvi4Y3 z5nGma_WvY6L>^0!?{c$$DfOWrIc?!PHba{t;fBNJyp3?4UF+?qf@JqsjdW~#_P?0< z@QhtfjNec^oM1lO4E=!P0@nVWp#yLWt~fLSR>)bK(Zgl`1Nkz6z`kC4rMnQa`j4vz3>pL+=T$)`qD>NIE!)+GH3UF3I zBR@!?g6}2MV!1(zEoa6T!5b<*CJwSm(+dz3bH;J8j}0toZSL3w)pQKZT_ci{Cl3Kt z^^U}&Bki~wYTY_TFHLk>Pj1qEy*csPrSm+|GUXxK-9-*dqXanG$gFuCf-v$4YD&Y`uSlTlAaA5Su zv}F7SJ>6$Z+HcS6*dFFXs7F8S>u*!LeLH00_&54X;AUKYp%~PaV=t&ws;|VcHfkot z`hxDm?ETos4=>$zc#i>Qj0!sNZi=DXHSVX+@5o7Z2$i*sm84Vt*m!@O_wD&g`BX>W zhLOB(EfXb&-$uS)x^4MEQu=;vh2p0#G$x%u24E@OkGTJo_)r=1VA zlws#is;?~1WWbSS0jT)LI+>v?`}GM_OJEso8O$h;RATf;Gz85w%wcgn2d@otdE$Tis;`SYHNkE?d6>p?$g2JClg3Z6x z!IiZZ)EhWw+QVHs=wr2SV&JeR<<)K6BTPI3r25W>mHD)b(g z*H`mq+Rwwa8x*bw4o>=-3V|v~y;n!nMj=ny-^Q(7%nV0*`5pOxNgpoY{7_iUY+r8e z^&5VO5Kun0fA90HAO(RRtth_fK&Uc{+89Foc@_d~s+kE*B(PsrU#sxu*@ z?-M(){b1gUP_VP@_m8QJDD0$L`!W2RcMbbz<{z^vLw_AYyz{s$I_gt)84Q|Lg)yr^ zN!X?f9hBv96V?ZFarIwp`);J_h|bWz$*D^$qX#%sAWI?={bw{z<6ch!ZwiA4z$8Sa zjKo~sjQ^{L6(4GtM} zefpKB^gs#8rjJ>&H3vt-mn~iPZxsDR))qGqUIQ+efwQJ-rUA|{QXzL$6HMZ>eBal+SbAm=~~ADa``cE8QWo* zLc|2@GUjLt=v6ps#JGJ2!%9~27We;wCe(Gao;s}_2&n$hfKX(!%*JNaCeWwcBZ~ZB z@5;^HX&wHtU7|hD5$0uwmGrY1v1()QT`)Uek9Qw5Ij*VTeG(hzqqV7H=rI78hN9LH zn}98@4)^6Z_&Na3&`zZ4FBSdo;9c%PPlbu6uo5^qz3aWM(}rYsnFr5Mswy$;vDwcQ zat%Hf5+hT_tv0_XP26Yu8UBJ7%+f5v;T7a~4cE!<>4KUoyH-mVXgN9$D+Nu@hK4NI zqwc1&>oFRP(=LuH?urCSd;t7?hLu5;Ox4xMMNRYo>N*5>Q3(D+Ba$0ZW`+G4sr7Ik zeZuWrJqh4}KqLo*Y0L5D26@G;!Dc5)JLBH$(ZHl4XSTUJq+>2;kT@Tf()=Q^99irs zXaRmC+GY9d(V?**n($$^J8tBP9u2NHc-Q6+fvH^>v}io7(|~5oWr0sz$-^BNXhk~t zaq;QY-PKY@R(->sk|m*KMSwLtp^?$bWAr;4VT@=`xjb8=U(B>Gp<0myEKfh=r0_G> z*v;p5Uq;qN@^CPwb%VHD;r901+8>9DqIX@xa?+vVK`xWY0WWJ13NL8$Dm`iN z2x&4Oyr*VkMOzBqbN4D-&p#10d2Q=QgwR*bIaEWBYV`sUIAWjCC&MYvpUEID5ZB$@ z!X#xnoHd0MvZ=7}%;-FNcLI+GHKDcu`LP}S6E%W`&mYK14?!8p!BZc^4G+n`g%;do zkLo5hhzUldphN`x^5ronc55m^8u}lyoXqN}pKU!<|8#}|Pp|UkWeT!kSfWb$Sz6_)*ri!kNhy54l={B zJN>mQ_7*<+D4ApBt;NFmpR57-BW~9_;9=tC^(b>5GFWpkg%Jvvj>B{qyv)KGw3N)n zoP5(F1oY?a%5$bA%KHcVDt=1S5?cQnB^d)?{PK)c57|=nRb>jvJm@DSqgOaqij$Z5ok2&FH0dr3!GZyc^Lw=kt`q|mX)UHHQ)XG^abGug}VK-$aG1;d1 zCX!7=SnMl{pi<#n905ntc!mBBSDVNt(ZftpD$hVZ#A?u#66K``_=guG{LdDFPotnX z_&D~P{!lSJ z`70{cD|_2^={2TR<0sps9mf7l`4m@mdD5VO>IQ(EoWxifnEo6 z3UzbozTNLU^gPZO00yRrBRk@17)jT(kwTR^iMc0g#X_Paru+79xYI17VGh&;NrQMD zoJ<|XW2ZwUTM;>_PWK<`Lm7T}$O=;J+leB9n{Q~cUCbljWD7#aLfnH-Xt=Vfs z=t}r`N4JniKpA4gG1)Slh@byQGf61CYW-WVS2s~Dnpg}^vzR^Q$xWU{iyqolhWFbf zq3Ae}IyMt3^t*`lQf3H?C`PcMlh=NhH6pN)5Ti&xj+C6+jzqA;2-bpx=n-|JyfxqA zaPnIUsg6Qt>x{@ZKl-yW&QqHlGDXgWUHj8BUxg^gFxeqp>lZmmU?xTp2@h+_34fbn zMZW}n+4dR38J{uA?1R%J4WD5J%gmRcSYg5if`_D1+lUMj@}j**19NcG4H#V^^s6AW zA`?o?@kZg% zjOHc0Dd2(+lv~xnGmk#ILn{=aa-Ofl^B!`~c?hk_D;W|5N;S!Yj|aVti}L^4P;5I| zW#HdP!H$pr(c_YG3J!ekq3yD^f)W>sAN7|w)21cVr_fsf!QMG&)^$WW!c{bdO^E1b z-j%>v8T8eK(iV*EXN*dz|7z{D3HJ?&7djj)NwlUIK8S|8D?0Tqsg*0^pAUcggRp-| z#TC+t!D%%WDpxMq8*5>P&^Is+0O-a6#{Xp-L9)olZ4A8JlSrr=spv0gTHz1uzHS-~ z`j9R^r~4^hQ9`Y9YCTy@Z(*>&h?lXO6)t$$^=gMpSenTIl%w13a)+qGqPPPb$DOgQTr&4Agm&$fxr^-TI49DjBu#tfUd>{j+xE8H`PaYs!{;7z|3Vabox>H0J!>-VohE6DabmHWHG zv@=#Q-=2GDWRr&wh*Y_hg}q~6PXcxI560hJ>^`r$n#O9OWcLxf>;r}_4R|!d1ZLY+?7zr4jh7CoFS1v^^N`@Vu}?p^Q{8PKOe1N5 z7u`zzy{buq#QVv6zQL8UU#^h{zhh&A{|1kV5lSArD>W@kwsfeFO@s95S-=upZP{Dz zBW%|ZIK5HO$_k;uD_wE&Ef0&ieNUw-KYK`*UG%O+k(H&Cv+z%RQmZ40FB(+p`v=8O zT;~nvCchnD3s15!UeyKv&CyLk_bHFlG@TlvaaVg2XMW#7gFM=N;a`Q;A*xIFh9^WG zpIY);|8^;fPjmz;1j-crSzYofr9?--VfNvi6*2o8vF8sc!i2xL=}TS&*rz{Nk1W)) zRb;VQ?RE@OC&((>av|}T$KX@-WMuN)Pw~dclc0>gFD8>4!$8Pp(-}QPa(FpBxM|C6 z;_7Co_-#xKriph?0>B;FSU*eRgNy3ZDyawISdMqjlEYvUPKEcjZ=?mzEPat|?j|;b znrAr*x|T_HEDp&#^_T4ge-N;& zM6M=Z-P>He{)xLbEeS_Px4rE>!+XTpYL-UD+d46YC?{h{uCRO|`_KT7s=@n7Qs9`s z$#NL()B8~vlm1aNQQ9da`blx*jj)u_z^kP|jI(Y3Ev#lsPql4@&mRNBH$J0Hyyu8> zzb_+O*?9O+S5<=>#Y^F}4w($wnzsSr*T3H^PUt`~rNwE?Ib6VP#5aok$tP-~Dc)F# z(We@@-(mP~?PAOavn6HMSX==(xVqzv2(0iKSZlZE0J$`<#nk_N#yiBS>%s%3R-SO1 zEq+r^0VQ%Q0gu5BZ`;elQkF`-%N2C+1%SfZ)sI6WG#Ucl?aZiZQ;RwAf}zPgb7&Vb zN<5XjpP~j#e-PgB6@6vt>{)VHo1-n}T-X0rAl#toR}*0h#SzzIeLYxAclks56Xe~C zHFov|O}S&-8Sk~oIo9@=W29dO1>RYA30@n0CX+DgCu89Dz%f#O-7%$u%$l}5eMPZt zjnuQ47}JEASD&5x-Lt*D0A-&!bZFboXUa71=ph~9Ku{y??p~?5EgKz*H4EzmpGutL ze8Du1Odx3z07SMd?LLH+$l)ZQ@MU~FT24M&O%~}6F4r6Ia@v8f1euX9$fl}{4}MVtl;v5|HX;WBU>#r(SZ;}iI-|Z-TMVg@(DWDwe<||H+PBoYfevtjDZS`sf4W%`b3D1xR0 zI%aJW715`arzLw9IJhHRV_I=EtgXxahgoQQMJ~;`laobl%bsZ{D`}B!Kna-J#ciTA zPzsaJK|CMec3=d-(}3_aJp3xzE(ZemJ?{iibTSZrG!ovN`=Pn;;Py>uXu(W+Y6I|o z!+L7!wzf^yuGS)QV5Dn3o)h-Bx{$sF4H=L(q*Psa%Z+)@JA|vcZdz^oy>yn$bq;O` z0JJ#_+Q4Vtog71x*qY87e8X--q`}(L`8tNruf$QyIAV4Guc#%;r~Jjl%sMqI=S8Tt z2p!jcn#vzjM>SE=1~Ub+w_o)u|L0=eO2j)+>3bdM33u$33j!ak zWHl!|29BTG!t+c0z%ztZjzF|g0Q|t%ItpAN#!@x0e}TFViVoq=W&LV4)oN?Lm)LV7 zO0`KlQTO`xR+4DJ-2;4Ct$d8RRmi2%xpi_&p-z7Ei<2*SilMc|PYj9upFH5&H?D4Z zwSz-#B635U5PSq6AQZ7^g8XyC{t+K>JI@WP_Zzmav9xySF9&+JJ2iwu5+ykoQ2H(# zL>#E$x>nQJ&z7b&_4Qf5JtF=9R>J&?oOFy|Vgj|gQZqju77EHN?xRsf;9DgN<%XeJ z1OUW$+z^E}q?AjO|X2OQLq#BvFN*u84_c;N|{rn9p=fl%Gjr5p_7zK15v|uz$L}3lW8= zZrN5uXLB3T{>Vx&6E$DTsSf_aus1f1{o0oE-WoUN*lKLEa3hOYs;OrtTmGKUPq^Wy zayg9_Gb@Ap5@p-bO=k(=_dl=x04mu0^U+`={9@j}GqgnxI`9S*{_!rfveZC9BRQ0S zTUgSf%`d<7aoI;BpW$acXDE>WeKdk5AQcsn9ZVjBha2$LQki!yATEc^nS17iMJ5V6 z9vM$>;U6;w^8`O8G@YuHRRR%aNlId>qFcBB_S1#^ngFHAv2cP3-ECrO{9vHb_SF6i zS5Q-1u*3Tagce(>hA`Hc7`ti;il*PZ`zF9k`th>L%iPTU_V&mT_VXQRXuRQINODFK ziz^OBib@6%ZQY(|gjj z86^&g2>SRoU5zJ=VUWM85`#SE-?ny$_)sg}T=cySo=u12{^J1u3) zq*<75;J5MR{*b|RO5;y^EyZE=f-*5h!C@f0Z0@)P^j4e(VWoPRvs7WC5E?sDUgzyf zmdBC(htW4&tqCW0V6Jk5jQo>vSq5*I7nI=kifTqA_#-@FX2+vUZGo7%T_Ijccj;5; z+1pVuh~tk|QG;Wj$%KCLgizE32%8I*14bFCR`w1jR?Hq$dDi+dEa!q{ahcn}qp8=%4AZ7zC8|$9@UR}LRUQ(eKlBq8cUV)Lr&8Gk8s6Y3d%nyT z%S;52Kc1E#Jfuq^o~JU;!ZSwRGGQ#{9k>+3`crDf=Dx41;}Yc%ZW> z6O0o1d->pTAnPk&5)lEiNkD|%e|-pv4}tej2%8y!OYm&aoI(zn6020KhK3fF%$Mc& zo-&t>C;%YXa~eqleWp`3=nm-_>q;=0+1y>PVGxhLf}YoiM7`Y7YquNGm7t&cG+Q|m zH=BAvKu_1NHCWtU(0=f1(yF0zG-~H2UD@P4B@N{rt+V12${l5N!AZ(2*dowBHo|rA znku<#@koWnX36r4gUwx=tvLC*8{WkUWtS68ZumLy2f$!hyi4M=H~Q}pQ%4Q@a^Zc;ipSHTn~gSVTkIg84*&AE zT##J0#?7?&&$C%C$$yO^l=u_hB-f8*!Hm&i(E18~BNZ(lmS{M2H__oou|s+>xL%b)tmJpy6;Mvq67%f}tE@phI* ztz*uN$GW!-mJY|)-^%7t|8z2%KHyyJFWAKH$Q}5hz!n6W-s|RDUVQ!i5Dw!pUmdH0i zKQhLeO8#TW&Mj5wli|*^ebU9>#rCc~AleP*_j?{qKLt80nrCewP$Nj*c=x&&CzmEH zFZma_8FhVb3Wvy=_VHKRq8to97aN&_^y+yVbxuHPv?ZW&I<}qs!A4!j%=n<&(K+v% zs7TcoDo+mEqIBnfG=)SpCKc_Q;8)JEm;b*$ltsX40QR92R#%ovNi?boXj*ssjvfPW zsc^dcIktPwQ5;BaCpUS*0fA`O6oVDHi-EYW5UtLWgY^~W;ay)<6~xkDN0)NUJhKx2 zx^=sl=t`s<^90$+T#Zsw;X>otR){15#FAV|{hk~77iU!4unj?`5+@236BXW|7nd+k zUZS}F)eL!O>ivrlXBvxuR>k_*DoOE2BYGbXw|~QM^yb=)XWw!e_!M?o$`{#aogXu- z=k<*K@sz#~?M4hMk04~giO;5T5nv-(E-jfMJf;rjxfTG|XIq6rpPtA%|Eg9qReB#J zBhitivI;9HF&Tc*&blDBE>+U7ov5GosN$(n^SsL~A}8C-J?|zGoBmxk;?9*-!gQHD zx};s|_9q_#1CmObb`?)hgE`>BEusO10(TL>*cgle&+$xbKxB*5cy*s`t+)l=+qh5p zS4)ACNuT$Il_^u6V)7@7akW1zVt)-!WJSFd*VJ%k0Yk;ggMeFbl$Jj(G5+bkTT}u z)F!B)n>3RNb$E5$i0&5s`P0Lg^<%yx``Y5aueJ$01j?Xd!t9R!LA2MfJgrWFCReAl zvZto`-n|X_xuKt9Z&XvVP!Y%;>sEZ@+I%zUw}p{)BI-Sb&6vZ#?6;ItLr8HYxK{`e zxeZom1Bur!rIRBI-V}QIIei3Pl6@l(to&)B@~H@Xu}Y!=EzEla0{q>S#s>E6+b)fj zjk2ujNw>BCkEN?%h~oXaOLv!qG)Q+N-6h@9-5@QsOGtw#jdXX1Af3|PCDPpu`;Nc= z`vrD(=FGiwpL@?eXGmd_Au#qP*rXy9ZgU;^A%|Jsno>qY>Yn)b5jjdzPN&$9_v1Y! zSF>qqhH4$Tyf8V@Rp34<-ZGa--MeSgvmU2gH4{szz~Cp~*Iz!1Q=;TiqF?u`aDm4@ zGaQL=5n)R{BIC6jxT|u!L#NE`X>ZLRcLfj1VG zsW691Je|#U30s~&jepo=?yCIN@22xW>{ofJ@clDv+-)QQ($ZG#v*HAj(VpM5s0wu1T;KcqaJ9xW@)6Qh7m;W0 z!hTx+{y0o=yVwm?=@fpkd2D}f2Fk@wAP=CMu7;{W#PP^bWeG4jN`8LXveqg{xhcaY zdl-yFj~^-P+}(EbXYMS1gBvhwV8$$d*Zvo){!xrEMr8z{lL2wsHstaiZ=zYHDU&U* z=ph&S-wNI~2)0RLxDC*ZF^p(+5-ALdiA173F)M|5k#9$~^W0~>xZI?*9pzYtb@%~y z+5F36GCw^BaKQs<@iAyv2x77yguuz^+5IMapEM^?O?hS?XV80Uc_8IC65ZqXO7DPC zWqnRGFc@g6Zu2*G=JPnVjUHI;CMLcj5Yz7w>rn2=fA0ora*Z6|8=}bwU`3HARM?vX zD}Xv21_!8yGU*`-^^^WAjAfd#Ov-J4fnD;mkNs|(5e&o8d&8p~y-~y!ochY8E-Hhu z^sFDn`x6`bJ=p7RmM6q5AnwJwb4=v-#3L~Jf82ODjR*9eptD+p`7B=iEG{$%=gTUj zz47jZw8*c|rS}{tBYYJU9OsuHSXvF~0A#<_L_)%2ilVi0)R2x4ilJ`J2ia@(6U|q5 zuDWqTw6bhT>Y<`~HF>O!owpisZ9uw)Y6Ak6l=3nmb+F>Z?i`Oo6prV|Jd(RG`is{~ z35|64iLG=74wXd1K%;Rw4 zgpX499BZR#vukA>cJCTj0;UZw`C;RCN97U4o6qy17MXF0>`OxcK*pUGI-@fZ=#<)U zWO2FS=-c11+&8(S4EQa7!gr-(oezL^6^2fi%NgKt^<52k!+qESm=JJe-amgb8F|<8 zyk3XXVaafI7$niD9z+v}^#YZ9k-h<%3NI!KJ>oc~$jGZT;#>4e&d4(w$wRhxyxM^h zhf1y3aAi2(R~cRGAn$d2(2Dy6jE>|j;DqnB_~usamF9)`i{wG(>8zd+TAs7eocQv< z&hF+v8#mV<0bE|y=Y;&VnfMUDd^U}?gt3-KPCEwOgimRZa!iNXhP~vAuxER~@G)Z@ zGTE$#w#P`iciwF{SEOY(t6|m0=e*i4j z{?&4D6cR&iDu7L)O(~uWlPGFG603^1I>eQ_$TK;L=jp(|^!a;0HWb>yI3IxmkB<`m zW)%UQO!+rBW7dSj8R^4?DRWe~uF7+ju=Py-{BpIVT{gifHfNXr-T~|^YBrfM$Cn_K zm)QFFmM<=PSC2!Gpdg+A#+j7L%fr^llSlRklgp0!%r&tWF{pFZH+ggzF1Sw|1(2`Q z_4FURClW<)*1@WWXe2wDf6JJPFqqZ|(lfaczh50_qQ0Io3oEYwlq96+CjGsS7E9?S zpuPuN{Gj&z<}uoMmU}U#xs!WK(9e(=AlG*S>gX;nb0t9bw{1l%%7Mk_5pN-oj%huG zZ>rs(7g_!yE@yR!P0dbpNE{x%c;_xK^Z{`D?Y1|5nutj9Ck#(ZCuyKbRqBMqjLp z>_=I%2z;F4Fk`4+Nhcv644@*mm%_(HFYCT&4aIY`wJOum-;)oj(DS3ZDsI18Px~*1 zz#-&7E$5@DW;&RL_phhGh(LL=BiEgtQ;_+Kcai@QkR22T7JY#DxkiGIr2Ww}+dFhZ zXo_H&3JKF$fg{jy@(=OzpzB#m?xq&`fgT$wj;D!+LG3!xBRj)l?aA0Lf%8|Kih*Hm zA1k)duUlYv`r{JA@EV_Iw zrYth-`uEQ%O@-I$j~AVj{1=4#71S(kp%aS0<6F&=OczI|L`^-xup^FBFh<-iUy^t{ zyi_SLKh+56nnJ5Z_*!oB^~@BH-~8TL2lJ(R`}}GD;fe}5KCCD2L{jia&$~VsH)<$- znEJ1lCoA^7SGO0pm*r=-WYNm>yGq%kPWcDm{Cap>W<3*%S+}DSrsS?<9vcoG=a-V; zNx+Ub8>f?z+n#WPPpz7NhglK$jL}watBLTO_EQa!39E%BofpPbt@KOXcx}!5U5y(Y9Y1M1qT(pi};E7FO)$++>fx{bFcZ(cXt#I2qZtF zodCpcwP4A>Ejv*dY!ZqV!6uU+tV7`GH%p*W70dncbcn}IUh<*PdJXG+Mr;wy{d+F# z1ZpphPSc+!fmr_TQo^tcnQs92AXj7pGJs)-=}< zKl~QLkyOp>#pNHicmH;D;?=c&PQceh6?nxJDpg6~P{G|ezwxnh`@<8$tmR=I zYTru=l=(r+C}v24_KL``8K*`ziwnKbV~3}Y&_a9%7WKad1aB?uid$s(iZqu!sdYfa zf?rK8I-|C-frl|CIZH{4|3wu*3n{q~nQ4uMrvKCODcz$0ww5=0a+f=wma5byh} zGa5djD?4`gfV?IhNX?u#Iey)ziR*V z@hR7WO;l-J6S*8G3Kij~3L^tXXt}mXU$OLp-7fawf<%#CpKruZ zL8G^(N}P;eb+*@f{C~9s0S;Ai6N}p>dVMQgB8DjYRjVZl_Fe-@z7r++FIbhGhJkyX zLUzyBR!Njp$va=iQq>GJ!I30i_fgu$Sl-ukLG)UmcX|*C4#1djXc367IAluYV-rmG5`v{)-`CNfJf; zw=iiWhofz2tJR5IR4f8#MWece24$fga31=MiR}!vDTYED?cu@OhFvu@LXPlZshfCF zqj4e_1L>$?b=sb>rnn-NbW&IL1(;;PcYl7U^-8dxZlZ4De_`sA8>))5Pjt;|tRO?^ zu%_NPWPDi}$345LK5`i)c@=BEZsgWl;{Q5{M;P|$+T!UXTdDr(4{SPyf?g1ni+g+HLduw z5%|L|O!y8%`|!pLAQFnf#EL(~(sjY;33Eq!tKC!2b$qBEzJ_{>Y}#k5rj15xJtb6X z%txM*6dLr0S}9@Xuk2#`oFJI?$mq|QfqhV>HG59>8>WNf>SiW|cJf%@%L3^Cf#4V< z6olP0U2TWb-Z>Rjpk@;Bv+&gZv>~?x)>y5*pI%;&2$>ogU=e0x!8@7d^em7}w(?Yo z87OXC5?La*^CZdsj%2v*_qT1<+C2A0aS1_kVY8^>Mo!!Jc=~fuRdsK9~lw6}F)1;Ojmi zQ4XX>bS(Qwmlp8t{lbgM4H-P2Yt*i2VABk4a!{VPGv+~YYqMEBo!Z=R`~2rSXHzoP zy}(HK&%3g*yQ(jpLK~lo7)Fd`{x%{c0BY}0hgQpE5DYkG&=SuSqT`Rq=}Yo^pNa9n z&0}?th%6>XayBtBK$#*Hl^A}`7iPN8g3%hWrHXPvPu$Jj|hXC6J>yUp37xltfXus9~x-w zcSTB!H6ecqH0PnGk4KV8AKfy`_L<*V6vW@CNq;JrlL)p7Q93`E8&zkv*YkI|5g@r8 z1^I*I3QEXK(3`r0k0N?A;U>xTt%oG6eg)jnoF$pWptbwvWpGUbO2Gi35d`;6LgB~< z(q)5`M&yF=9zF4fPGv|P;!akOSs}fjG`B*`MXVxc2DSGag22eoCOT1qb8wIMq zVaE6zNEL!0BXV2jQr^2b&4#(k@Z}a9-36m;(GjIJRLc+QFa6)hmEYjA5BH_rMa48PW=D8%9s@KziM%9Og#>>o_=#U z3_1!Le;pA!Q@*kX?r!>s0I`d1kTzq0y35p!ykbee#h_@DhaQ#*LRL%H(xu8#GY{)P zjCnyTTi?NM@R~c<`He^KBz3^mZs6$w>*YiDpS~Iz*1cf7l`O*SwO={V(L~zgZ3@A` zla1v3$(C;))h0hi#N=tqKM8k2Uoum0Eod^kbRwIFX+ektW8T3^Qi~8tX6gJ#GN#$Y zFroeA`Buupx8QMq3y9v!IKtf)dYhF@<6tSpP=4$2Qg8M<{!~L&%v`bvDel-}M8NY^ zT6YeWyEzEBml92FE7&n-Mvpe#)J+bJ{A`;qavmu<{Z@ld+Rddip#l!daGoMmj1B@) z?W2&)XIH21@s2!?5d~$p!@a5N-1(=h&)$9MYY6s!%w${(f<^z5+yNkRDk85$3aHBs z32eDwD57uPuvdyG{PChJ$SjKD5Uwvon9UVYwhw~7q(`ggf+#5wzT>iB({&%qTT&Q| z(fYlaSGaBufHHf!t0@l558AuvEnYwoZB2DazZz^v_q(DmRsRsHP(d{YbMemre4~{q zIwJcr%Bu9ly-sQ9o@hfHxuF4_rWNzQdlVB##zjPKuksA1%RphNEnTqmY+I!P^+B3} za?iz=g`EuYt4*^PW13LwGw4AMJPeGaM^kHG_j=rZddB^x^iwpvU*m?!ONlnOYU3z` zvecl@=<*E-N->EEq4zk&JX@^L;2)GZ?-KvWKY{9xsLiaZ&is#9E@_<{Hq=9y*B140 z{pn)Be?N)~Gm00fvAD9dNM;`#sEFkfQJKfJJCtFQfVQZyZZfz zLyDk_ho!u-)%nZ5Zgr4f6;jr;V5+e*<$XviD`;L9EXKBb7{z*a#7TJg0pg;L&-Qyo z9Y3OJxA^*M%^>5*xh?B;C)+@_wlC2Waa7Pi4EnfL_HlUZA42=ca3X+q85XOuu{@)Y zJwgo13xZ5>L(_#)PDx_~DqkX>XVO>DcjZ1J#;a-bSdy6viL{7uVRx`&;SXJ=oFU_E z0c^#(V>iO*@Ru%lp@{=6iP6FlK}ts1O~b0NTXcobUqMxmD5j_)g4Ku1%l*eMPzGo! zbWp1yiq}?iFu4s1J)7p{YLwuA!+@IJU3NcO!LJdB@!{QDpQw{$4SF9T6C_zN#$3CXY6 z?(rn>Sk!9iX0^P8z$EJR(wqQZJ-Or?QE%PM(2w>dbMq0t8>WKR9E%b$lx5{VWBwh8 zs`Rj269Pp1=j%TahNC`csOhu)cn|AP-VloGLK)W8fFTU$##bhCXY!${3A7{zwW8<51~sioW97QQmWm#HB!l) z1F9%`EFAj@gSS~&PO;~gQZKJu)uR`~3)j=+pT2@`_kw_mxMl`HvNlgVmFwbDv1EFu zLOLp?W1-rWxi(<58g1c4Yin1N&>FpTct`uonY;Kz#+y31M@nQ!e^ z%;i=fnBA^Ru0z)L#r`!3CO##~Op$ly>k3qC5Z}Iu;J~sT9iS|c zxrVb#D?#t`T(xx(;xgRoOKtxVd}k#0sAjlhGW7oTFOqlN|FRq$y2S4zV1>~nf-%ah zurzub$a0NJ68e-oJIRr+aM4Wi1`P2~Xj!@!Hlc%j&OJJ?gu!Q>OyJBr56X|xOZ=3G z+;ywLpun8{x(0*z94$~_SKA^W%zl6G`lPqbA|Wr^Z&~*&8>nMA&<>FIESjVD~MS0daLdQX{?>f3b&G# zDXn^enN*Msn_UWhqD9}5b8AKvB@^@TH*3StsHr10XCfI|f@ve>mEro)`yB7LR+xnK z`ZTvTbCveVzfhQr98|P_+>uQ!cM>)_YAE;Yye_W>`dy-%Z^dCI$v&c^f6VPdX7E|Y z4IX6`4c`4SnoHZ2S;T9@mSf4_I9kZ1u>!<; zlp7@WN?xTuT3ObOUrIfouimaXWpMa_UJa)B8{+*Avx#(g%n?f-L~kBK*}oI7rp2>f z%E%4W$+tBW5_ID3UHWPjCWx;|wh{F{!!I@ufc%MY_C7k{&5LvZ-no+zliabmbD4&+ zu62HQTywz*7Vu^_YN_o*`oD@((wZMIgPldsQDDN=_N_anEd}T)R7H>5Hj4VlkK_sS z6)h$)l!{C-b-bxzWv%?+$Es~S5_7649|Q>Q+75y*t_7(BD#bmXJ;{>26bs_cZn+BJw^0G$sFUyM`u}s||v}Pr;z;8tbA?KSrs{Q$cp9=qQ zI3_;sKZ-?r>iYiKO>E+l3bi7N3&*p*A`ora7~s<{*cB>i3e%gv1U)P~ea|Z8EQY`& zxg2vs5 ze6RzlE`A!+7!A2I;cH8@&0rmcOLaqqYRZ;cXaK?%%cHRmkytA9?f!5$%SpUS&}CIt zFfcH|cRmf(+Smt!#F6O|VrEO7Lh%F+a(oEN^od|lm=J=VIMw3Tq{@BA7O_8=qZY3+ zW)@s1yoj(=yg1TVAJdZV!i>4_xkO&FLJG=tJ^CV9G2G^@HG1hT;(qoqngGqJ)kcwG zA7n%f#!^G4*!JG35_jC*ton5y}#=` zPp*%q=*=?a2_%q^=%ArnfUhMu@7K&P$-HhnZXnqmI<)?E9D>lCwWWd4*%%{Jg@9kD zQczjT6@dBt#Xq{&r*lw@1b(Vm%-oAtxNH_Trm_+{zT zXaJ$T)g(IfOg-L%iZJ{AZ_rdpSj7Bm(;1V&GV?!#wn4ak5{gGE1TA_IjB93xM$r!l zR4NU%kdPc3o*SYMaeTKT;qaGCvKvl3aEf7rd~*YnlZ}MauB;VcCSAHNB`UFGk$tnc zk|r0}Dz{`%lF21lkDXw~Csyj=8s-8w!Ch%tPfsDXs}tkA66uZrfly(h<2TkHVT0tdn@eqq&hRL z!@g^Qz{SlaWmm4cFn2-$TT1drX`RveM2a?5Yw$`?Ev8dTw9*gMccTyvKV%RkeROL2 z=bmD5KPLLW=5cS|RvttY-$ZP#Nw($rmY5E&(D4q?k52!H&>$G7BtLKTqaMQ}mKl;( zu+T9FLo}%HN^|QjI^e`V^?jn@cd11TX6QYE2wG#4>BVZ89>nW>#2-#pBT$jflME0` zVoM>|n8k1I-y(k2VW~_c+W(zb6wbfDGObykhi^mu51~U491dV9fUWi3G(7DDu!R~~ z!V|0Dsdf884pa(BuLw$@?NWqcPw4CV&e^oSX(;E&VH0ePjA}>$x_r~GQ59*FCAAn~ z``tWObSH)agvNs}qJDUbu)p6=lM!Ym+2XQ1hEVHRxT#X%X~e~OAc}+P#(tn~oLm&% z8r*v8tZ-%z8@SUADLh#@0>sl7L6P{pwhSXQVy|ZXkFWyoG`D8AX>$|G(Q6;6It!Z_ z)D)FhDETzUg7d~})yzwGVfJ=XjO%Yoj972bI~Q3<2XC(tPa9cvHK5L^1Jw-bliGS0 z1u9?Ju_mcgR7a_Bxc<7z2W8|FGOJq}*d% zGwM)`;Fp|7xY&tM0#62$nM=SX87qc%xE*fQiA{Jfr}J zAIB7lfF@2xq<%ySgl{!J5{5u_gl^gNGslgY6W7K|o?<;eT%#R_$;w{;T6qe$XG3lK zaVQwG;CMUouJx~Hg{S0=rN!a!7_G4OQX1u@>e6KvAAJdU5UhEhG|_OFqx z=%LADvo6uOqDTy1+GE&1yqC4Q;nEaPX1|q$ccv^#p}$G9#IafC21oLEe2A@9 zD{YQ{3BP(x?GO4E!uK*k;jA_=lQ_e=a$`=iz&<{J??U_#Z3tArcV>+3eVPSnD8?5>mNe+o7J8F`74ap@T&IP)6mxS@Xr~Km4TX9 z5z{xNVQ1ki7}uK=`SAi(MI545_(e;6s9^K z!EC*yOM~E&2wm~xuVR--+ZPkpt@XnAv3LklnY4RTui5-0O!fqZRE2pUkhqQ*-)%_4 z&gaRza%qrVj9N@wI7#*~8BL}YMwQ|6PV?vp*pDq@7I|5h7{V1Y|JBsb;h1GWY0W~7 z{6Hm}iJiF*N9n?Wu2z^PH~WZ&nVUw}98N=nC4lZ9LZ@IjIe{SuQaf>b2FACxJAG)3 zNbD8eN*H1#xcfrNpv#jh7idz z*CfX*Le)={7(5A;Ax=r-?T!T1+on9Xr^q%oeQJN#=uKp@jWZd__P=lov`=t#MIQ?= zOk&@qFzeKJDx!AZSh+8;#5&4qi_dW)i_gtPWrUe*{~QCu{dIYUfn90$ zNcPe??cuz;VeO7@p?}Q>;W)egZb#gY8{-ic&NZ9fuSi64DN>;CyH!aqt^8td@>h`{z*wY@!0N+-uy63F6#g(1gzP`905_b90tTC4iv=S5c83= z5blRYg!dKAoXE5UqaguIMq&AW0SN0h2AQZ2Z`Fydg~_W?ZI&z$^k11H2dM-8?Upto zr!w><0v61m2+hj&u)J?ZmS$5~cOK^q{-tyJ$;{aoTl&^NC6bo9J)Y=AV5EP2hqn`& zCVClMTefDPFJ|Yj`L&+M5NaZ=S82d8khd@EJF=8Iw8t2?C!m14&B7#6WmfCYhY)hz@$>^#0>lMLBS$Cj+Sf89cu0huT z2zFd!#QwmR_`B*g#2_u{0{Lu1X_1C%`w1-W_wI{uF0vRHe#+!kQcASyoT>ACWd8L# zwHe~lT-c0pwFjcYOd`6*^Eq`8ap&5jT61mjxLoS$px$UgN%l9qudb21U!TG{p!m=q z%cBkoHH#&Cv8Y;0wB~Pl#YG7yqj#e%+$0Qza-TC!!&;(V|6p`*e|HHgg-6WR_-(Y{ ziPdR$2RX$;3lMQ}jeG@%KE2^$a~mx{ZWK&YI1}ibJk`|^!7>z0QCZ%hF#p2Z6c6Ur zOG1HwDvfrZH1!clzt#v4SA6;Ub&U*Em2J@79rg=->rfWbuo9+STfiPuL`XTbW)Zh$ zgj$0_d;>e-1iz`aY>AfUTWm0#EYt2-YX6}lzx+ST>Azsud_gt46YUsXn{*MgL-x_< zJt~!U6^Za1YsT=>KyHmwc86Z-4-PI*L9aW(lF~g|vDETS)+82mP}45w%hrl?_fFeC zVoM9u5MOIn^#=DQq?T`4(h`Zk= zG2zJ%9mH)0#1MiR)vcp2cKF4s|1fcmg1c{w%p`8KA)RV>2&lCHneZmPtguF9*|>-) z5>XM7)msowcD~c*mB$2Q4`{uY7e1Y})iT2O;4Ca^M z&H(9NqK_ZnPGPjirUzb4SQ|7AmFLO^<+A9d(f#-rLx9TZgNUMoiqNM1U|OtMUhIh0 z4VhCzH6$h*m=DF?`!mm+UIam(9B5%+AmUlj8%S%afbDQR&OC<={j_JzZaLIee*JrG zOMh)DMtH>}D&8&?al?>HQMYYiUfsA@rpF}EqMRe;p19c*Jy4b8|4PV8y%9uxv7YuR(r=5Zq{p(^HwtJJ#|4#@KN_awXpB?>gz$b~^V7loqX44Vp3UCR z(9$q`50~2usLMhh>ivkVkK}3U&{Q@DsaA}tbX+|QIlhv9zB6lw%$6X5u4jXgwfwjAtwF^Arg8X$iIR>D9XB-@2~K#~2@K>LE>jtzJPO%5 zm`&|6)+clXf(Y2xZnV$h^-IxnwjbKb=gV@V9PGsna&==u^yjfu&aJzY72J7E`q;ATM@wfITmmxo7>6fIs-YH#zKe#Webxu7$=XBKd-&1?= z()#C4?SZo1KJ(xq#S;^O zs_LDEWkTWg5Mn$QKM$T)USwza6-o5pYdv?aKcC(-L*eUMhULRnM5RoiPaAE!zlroA z)Pgop+4Jd*;?>C!?L`#s(`cpDTS5C0Xl28Hs}I156-i*+0n6@L53!8ZOsY9X`HrRn zs1!m|>2JQoz9tYiuo_t?6nQGQwwqE?;#Z0$FB|=J#culT3}v>vwY^<7J91O;O@HTY z?@e2u#2hkl2PVUv@Te$k8NBidH8B2E_*c!|u*4#-T}pm)C6C>IZ_872)mdOsnTnGQ z1+a07;ex^P!Ag88w}JjBVr*?9l5QN-jBWUu$T>FkNpc**JDanL+gpt#F>$J>xN0qt z3w1$%vX0$)3fdNXAWYNwg^_Vg!Vh#ar$!^?GB&BAu`oI4GpagQTmL%fR;eVT5lF61{Ua=PBz7_tdK9ye65F@tZFhqmam?gpf!SJkH4rDT)GSna9IUkXo>$gK1 zjI}mF8K>^pWAiJ}mt?>x(Jt9rSV<1PAPm+1nGdh)%yP=cq;pK+6~orh9!=^XG~6AO z2Z{IVsE@-(Kp$}3JwJgpCw0yl!|rh(U#7IV=-)T^C)qR9meIKT&nmfW-(t1}utQ)+Ohwl#dvf`^ix0IJ zunHzEUyRgAV&%AbSJ%!Aro?3I6dCuXekbAoL+Bg~Culb?qr#$LS11Uahm_GOQD`c7 zRJ%Xt*ff5Ld<8iyXk7Y2p;d?ND9FJ-65f$YCuj|D%~NH{Rp>6wnsMFc`ccOUe!PfR z<@hr3tExwi)aVl>P9Pn8%!S5vBAz-nTi9EK&BdlM+%EfYWwY7$G(jR&e`I@(Bq!mh zO?@uhsZU^%q(@%JcaTHO#lxbOC?g4&Ak%G{l$E~vE=$F|0jq=wO#@pR4_(UKqdm_L zlm6DK~O3Lps2=C9fK?duJMpgR)pDOnVoBFtBYc0|}{EU6CimWxfpk$dF&?D;P zy$Ob4kQsNS<_hoZ@9r63vR0H8^Cj57&IvxQZsK%dyQv;F!NvHCj;HY(`IDmou&&zY zkm1&FiecV2Y#h&B7%tt2*FhR14Zp2$VY%UId{WyAw3G=M;OtGvznMZ`2+N@{I!c}9 z7~#sLOa1dxTrg2T)uXv`4!mP$+mQZVeLQtrH^r+ALU&uaETF@2Dhn4ij@Zo-*uj=* z{w-QX`kcQiSjmNeEatcU7{s>F`+=TWZ!0ga2db^*Z zqEQJFo4nmvlogRkMfS9wmI!@`c0yfbsagD{LR~fVP3VIaf*Ijkt|hN79##A29ZUWZ zhm*cR?RnK8lsCeBV&fPak_6uJ5iY7k=_5QJ37ZYWAtDn>(dpyg_H?q$dB47VtG*Y! zR=_RzTG?+=ZIalz0zEjyL{O?Tsa{aGRg9ROw<(L1ODzkdtwteTUEqeJBWpp~x&m>l z`P`$m>3wd^^3u0O{_VfX*nUkE8lq95K5m%mJuVezB@<}ja4q3}m*q4^(kD9{JgC?c z#W!&c$nI9;UQ@!uey8!9F$$R$f2GzzHP|QX|Ad}s9J#QjacYsFq9rttV>_<`qx>W@ znP;5$t=jDL)qP6rGCkw3_w0K7VO)B0A74y{+GAGSHDY&-xGOw$z@L^+dBYWtI^4Wa z=!Og?5kZ^+jb#GlkSNsOdNRmIk}%f(IaKB=ahzWj!uQ=xjU~y=CWTcw^mN`FUdJQl zx(v((?Lsp?l`(cRPN!)ODFbCqV|9t((p@x`J}>%_ zUYgu+gN-h9BBx!~-SZbo5VTu^_8zAsDI>k7>IErhf-Lc?U7n@xq)PaHA&qF&z+@xB zQwzG9y401hm*@XY4?~*7ZyrW=(2irNh-Med3Z0bB+s79Q1%H7kwRn8K@0FVQWDA^H zxFekB8xY~+3Om~jRTxm7bQlocdCJcBu(9-aJ)HNF$#e%?2fF@}I~Xsh39C9Ctedx|TA^`3)aCKql8p1GT5cs6{oyYm3r*vLxiLL3;0Wf9t~u7U6`gaE3~mcXdp3BIFg|3kYuv*AcfGhKy< zYj1bO&uDe=k7BwbHm^h@dGj(?3y8_D+@{dO*7QmHz@gIc7yC?23XH zzrr7zgH`S+^qpsv@uzJ1oV$u8dtIL5X%dc>Bt38V7;SOAh5$U#t-H5Cd zK<{UN{AUSl=(Obo+q4AC8{POGmPUy9o*=%i{NrG{^KFGze~oHYOV{TZh~=$p_?tO= z@UN&lSg*@0cJ@68-iij~!>8$LEiaboZVtghPTj&MuH3lk3@LGVta z*A-^_$A_HP8&gIjUb-!K@4sjLT?Cv=1t08&%RI;lzL~hf%ao21P}` zl7tUg(e-Uq5mbAk&P_73$5hWlZ6-3QNq`-u5fMg{Q85K#v+~-Fd{0dKmh?-OS)&lEk?I zAyxkScwA{ctF)X%hDb}G(w~8|OTg#ooTJC3>Q4zgL*tTq6-safz6EO;wy(uNP(Adu zwTp=I4IBzC6sj++Jeir2*QXYWhcxW3rGcm!^Wh8^Jf&D$UWt8|onzg~2}cmnbyVK! ztG$wf)kpWtfGi?bNtsc8*~*pR6cNopKR{a%HGLj3$XP+UrjS=dBO;UmeNhR>^F#qp z=2m(&O<4+FKLj)VlKtU*SYY9JWk@Y?&V%B2*ocN{iYBEc4-r_Jv0Bilk6Zb4vG*$g z&799ljY4@O79p%(SF&#&6EDGhv_1F&#PH!CLcoX>kw(seUH#mwVCd2A@IBgS8t@sy zf`sE)dZx0P`h&5*%S^(vs;AB!7280aPm60(9T{TcZj# z>J12fgaG@C7@5KTYIUhNtHb@%Y}Hgq%}Kv`2t~m;Ffq2wz%40E$Oh<_kE}{^DNl;2h+{2H<+cKO+ys!-H8ZdolB}x{teu+n*)K8CO_Lxb3DhtT34A0Z#G~+Ox1RhW!pzHUBNYJM zpMg~Sf=yfToqp5C?GG6x$&kO!ql^Gk}zn)XfdcxKvbVFVeDcJDG$;m3Ah8lk=@Tm!Uj~)oF%@sz|>fo z03}>u(o{3Bi3%#&@$y2>8>Z9{z(Ydwkz;=+3s8AKJIyJHJ%@&|y5bOEz`TiVZ)#Fk zwnC4!n=)!8NuIX;@w==3TwMzTW`fVM%U3iE`+a5+73xygum>F9U<5rX8b-n7=b55e zI0`F} z6)OH!Jstcff08J4zh)XuD2X#TI2zFu@c4p%M8@ zpQ}z;9@T*ZsC`+j5j(Yeox#upe<9IAgBls$fuwFmLGL0WS?jwz#z#cRxTj~XSY;6O zBsvTR!go?9zi20pBLCx?*SE!;r0+}05;`B7|F6Bb3W_W0qJ$eu8g~K&5+u0025sEk zgS!O?E{z8W5S%pb(pZp&009yp1a}PqA~*pOG!1m$>3rW*&D8%i4>NE7eSqq!=H9Bi z*z2sb&)#cCXWb-*ezNjzfpRO-vV1qd^$xwB1C+>SeG6sOege#M0adxG%mh~S7c zvVG&Vjv(NBip_w=J>y85ch0AF&o9SmzSUE=<=k(4y@=EJ5<8h`fmq!7+a5^rK&*pg z7v7uIKKc(KOt~B>`=}?M^sFPqZR6jDRiTg#gOFla;ZH#6zEl%h+S@& zSLlt%P}4D)R}pDo9{yoDHCR_bQkwBHB8%qr-x^5oXF+P0yI){l?W+-QW)aU%a&0%J*TXO{h; zkUb1l&1t;IOK@N%tD{Y%?xKj13X8?!{Xm_#w4!wMV?9iQS-v9HchfCmdQG2@g3sVS zg`*;J88^n?p8TWT0ppwp?7WDB3)hAL>%h#~1T-7eCR&S>;sy8!iGnhDAW~azEFzY<8PS zaEXvN99L+Y`i&rW&0IC+l%u+_KY0;Og2gnxAvgb#OYq4oK?;??hgFLSjYk4Tm#eQL z$ji0-k1I(A+7n2&SOrZ_g*OsguC{SUD$0hjh@4^iDsaEBH$xK!<^H+?bWimwHXb-= zN6(OG=>JcIuvtev1*Cr44Z9ONAIcFX!5(4?8nK|Sx5Zu-{q05+M*ZCafRrDTAqI9I z>M|R=Ox0OOiY5%A2I9*SxLe3Vz!{-;f|Va0uujP1{CwPrpV&|8=Rfe3>FX&O=@h38 zbt?bH&^5}2R|p%6Vg#>XAFqtu;gZupgxUTeJayA-FdT}$X;ty0QUC7oM~l@>D`u9` zJVd*7CozZof41;na zK?HaGC?R`G8*J#>z8)&a0wzXpKOAs?2b@A)Pe@3Tx{EMJ-T9Bc98xJr7*BoVUW0q8 zpA!IA`kx3mgq+PEM$ouYzllsdV|@MS#o2Vt(*BvzbUm=m_^G!rWG zngIGT$^@E5gqWlMn)$(KP-|ZicCU<^(y&qF33vX+%1tS-QE$RxC(QN$idaAG{6xWA zf$h#{AL|KIrak4t4`@^3RY{=Y_vIKCiY*^eS5UUiS5T@i4kZcOiiy)jOmng{y^PCW zj0@Ps@>9bqb=#(rRWsjRc6x_*uRLQ$;slD$eVwIM#LRpU)A@zc$1kK?m`ZYm0#fL} zR?YcC`iCQZ1Wv1r9S@=LG(J{ZU109v0C2qk>p(5Ch36k9*G-3h{;qG>uSP@5qY|K2#S1I>Ux`#AfMCR zo}NHe%Z@GPFVVgbnyTN^G-EVH+HINv-pI9Yq5;Ry(F>_t=o&gAWHis^6||Q!{y)W7 z`yd<=R<$FHma}~_Mr^+$NBB*Lt+qM~%T?5oE0OBY(AjLIOUwlk_LD`hc$^)}Cka*% zvnD=xa4dZKKwP^gC@MJ!0sqiU7?%&D&J1Mbo?@6g`woosy{%55k= z(Yd+)$Ki$%ct7y0QKBHNZT;)c)J+q=8PAHQf_} z^=kjJ`3N-@X(`a_u%^N(|+W>VLgl8zzNs+1E7pWehVw zGN>diYS%@FbE-T1a0{I>rPnRv_Sv!G(F--Z+p?av47XN=LGtIPY#;}vB)ypEDp*^J zoqKsNDV~4LW7A9ut90dE9Kp#NYMNv8z`=3>^p;}*60jr8Iu*!G*K)2TQ7d(O`*i=f zJ^5nU>*mxHxsqNeC6(~19`T|w$>`LG>bYO)lMEXlEy56S3o@?mGKQG#4mCE1e+Zou zWAAw>r~DToKMX?JVy#5nxGQ5poh)>@)b?mr6&BXE(8bn~DM5x;ZBALYTsyY_G9u@$ zXL2Q7otjS7Us?Sljd+r>ix6EFb8(Ua`ITMM-n8el7L6(s-^W3QMq{Fh>U-S7hs*^m zWk0PsNm5Cs{mm;_yvMBkyYb>YO)rQTohqtN9@T-Bx3F#=k?qCC1QE*I^!B<{kcs~m ze$7NJx+8-F)@|K0evI%vw=>i514WB#sNka}u1u?Jd;=T5a*^aM9~vKHgPbXQZ7h=RyvpHLzu>bsy5bSq|%I-DR*0|Rfg_h zUJn=X_2R$=xm)|`4z=>ccUH0Wib>8!UQf-n1W;<~Xd?3nl}fX1C5r$*vJ@Ro1A&!a zQw|3(?WR*nHPKK#&sM?=Nb?7YMt6ZS@QgV4qd#LWWI0#)Ng9$x7t7oKL+C1c2+M1z z%|Ye2OVb;Dea?RTugZ+I9fykkoy=nj1;}aF3SNyS5v-kFWYqY;S<6j#R(YBZnTvmK zmpcWRRm7g)5yc1o(Z3q6m=3==H($?K+_l*bwuO3FQ%0$hw;vu-wMqn9dY@Oi%;F^* z2t%TWL3Avv{Gg?IB`%6DfnY|BWJ_w*Leui-=?dAnKq%04(Q>p|U}T6A?V+zbR8ihw z$jiwx-5UwuX?_uLPaTFjZ=-GRZw;8Y9k6IEShWoago zmG|tX!WKDG{#FC$S;bDYv5g4K36}Hb1MM>cx5a?oP|!X0I7rZ=T8TzxWR*R{hF`_Xm$TwzxEb5GGdhSwtM2I+=;RW5InhvS{>%xFxhmER`4SvtVJ zhegUU#sMK6WK2~|9`>LttP;zHOZMPgeZsPLI+O=m04T6RkXb$U2|laa zF|7HKkIQ;>5t(T#8Im6{MkY5+XFak7E-=0Nz%_i#WzE3jG$`}H!6&LUcdc>F-z~qn z)cMv0iQZ3>|tLuV{k`0VpY?46S7^j=Yl{M&L;TZa_I|rzdd}js^2)( zz(7*D&#ggn!kdH0|3P?yozGoGI` z6{*i`y^~<}Dsoz=b|S6>shH?a`&?%BzgQVd5YwkgpOij)`V${y99IvaIXXpd_cJ0x zQtM@#=ctn=iHrKgU+X9Q)IT=lA0KX)7VhRX^RPvE-a@yQYIwv0>*o^TDbiI;FO#2u z$js@ZU_>8m#aM){=&;1;l-Ar0vKw=Kq7VKY?%n#Za!oQOr(ddX?hl z01G2oQuE-EsbE770H=Dp%dfc0bps_0GvI zfOH1%Eo1k?QW!5i`8S^1dqA6=-_5$&Jbc_E( zDb61gqV$-n>^x4!d^}6`RcK2g{~^j}X~+5WaR2&XK!tzooiJ^z8Fz(da9fF%=;(z^ z6ZHvce~qz6i>jwd$(FBAOEDWlE2Qh;;b(;y4K~T45%8J=Be>y8U7Cd~5F0l}4wS~= zyidn6`1?&L?PP^{YL>Ek`w*9g;DA)6s5Xm6F=~B$GJ@L|e8o_??C=XD!Z=R^+s2KH9b9^pduz%OtB%xX9R;hS$jn9Ww1y%pJ_Op|)O;#fKGBE^bU zE8sCJTT^pmfe|9yBmA_s{%*Xtw-1`AdTroijUPPt=!^dM#R z*XzE((a`P8-iy)~U3Le#jS*BO3t^Cu{zulo=dj_pW4UiNKvZ@)a*410A#_eK_{&R~ z+g|6)CN0DP!qu-G+Dd?*EHM_=i9v|{FBPUPJ|~T`4n@u?xh6iyk7=)$_63y6OQ>OSvV1NVby&W{22l;>5*B&Wv{XA}_X@~?K6c8gy}LQnpK5P0y;TbaN? z=eJGMI|l`>eu9Hmk}-_h4iL9jVJi4r(s2c#`=SgR>#8kH~!oTJ|HNlXWY0Cn6qpI74m4OI2DNEM^Aw#V zu^qHUM$#-Ob+Cq?dKol`9IEu%qFOM%e3uKlw(hW{dP<1m+%@8TAM=kHX-z(_+FIWhRQM&T<05l8aW1(>JyEW4GMi^|^29;5Nhm3+ zC@N*LHrV~kHS{jeWabFxEaJyx&#NMzwBn?kJ1`!ky1(18j^;ls2R{4ct=xts z_S9yP!1JgR9;W)!_znBup3K_HqukW1>9A*LQd?W@ z>lR>7Y&kvZ$AeTB2**1LB(n~41 zLg&nc?@gj8Yd^tQ3psnd8NP2P^W;YTEO**y6i9fZhQ&dqBV!5hKl_ zCQ<#0x~gGiHH*~ys`qyCS%mYEe(3hocS`tOGMYjP$vGKI%{i%%3AVWXvO?T=o{9i4 zg#v>&g@PrU=)s4k>IwgDna<$at_j(*rwlhJw0u_Ydnpd>h^f^5?;QanSxkE&1~}9V zb%@ffyZ5)ZC$7P_LUfG0zIYZSOZ1j?Q&ZY(E>5{j1V4oM+~ZuPYHIGBs16qEUpj<0 z4mAxR^f0-96i?HmZl?{sr0~M`IpdoY4V$0D#A~LT$Tn2NkmTp`64`gXn1Yt4aQ8mn zP}(sLfA)&kX0VGj_LLU2m%7Y^CC22wm0kzj6;;x7!$>FRM&TwUkDmX;Q0kDG*I;I) z+FKXC5Cu{9E3Lj(0!}=MF(q*pqOt zqLUUso+z@wDSph3N-OxYv?A5uG%{tQUuVXfCbW)GEms&<-)GggR4;F=-zQJ4B=}5v zUCu}weA}xEY)q!2gBFSvhG&PC?zxVfBc+U6#H;$GV9H$CN#@oayI&4CBfAUm;fN;4eRB-%T zk2vqcVeQ+yxfim4A*%C+w=eR+W)4s_3G5rY*>OD-q!6 zy>-%g^A92Igmy4EP41(+c)9u<`(OHrsio{<*_m4_fNKCgA+VJiD{UDd`J zJ?E{8f8N$65`tx|M$a(;6u}}wPtQyQnuJ~ELKAZK%cecS$_Af4R`JRtX2q$4w2}xi z`vjTQCz``5Nb`)>`Z}c3-opUf0o|O5dGuBAbbf`9ZXWaO-*{CgQ?9Qzsh>S7$u(UZ zUD_5`MoXHDON;xs4r`-m8ZM8T)1Owa+2hlTF0-&G@mM6%+S5j}yweCK0}a=~@Ij#E zf~orG1+LMqg~<(~h4m|_H?&e7-PyBZ3vEO+nZ`HmUq99M=RFjR8-MAlxRaSX&R+2a z9#q)5QR=i}d%L6M#HFrE@RZ_D0l~cCv>^Q6)IA5UOa_CxcXF!gNonr|@tH%#%Wy6} zIw#+CmyPX~ytcsT&|fV;;fi(7QO_~=RK*+1cTYC*Mq~$Va)vYK48Ihy&ek0Uu~Zts zg7l8Wy9y;*w7WX%8 zN^%ip@7FOwfHm+XKBkJ7gE0sx{BfAY{)6v_te&*MtUdrT)NR>fn(Oi3yY5SNuk^vE zL<osvyd*#Tvs%v-d zudTlg$s+ztFa1H-eO+Y96z#nqE{Phk-Z&zbd-s}ifn_gsf1FY|6Kp{*{t#b-LLH(s z2rFZBCzW$AxUo57-For9_~lb7p=V zVj#-ZKYrXwvKzlL<|kfmK3ntG?bkIt(?mcs<8yd@Ze>Ej=X>+-oYR$L4m&yL*$kfA zqUO2`l|2VF&2)>>`Q|6GH(dA{%QdLd-%gS+x$8vFWrE^$dw<)32!=#!90k3%SKmdp zi=P&T_8sbN@S!&bZo*hB7z@@n9e9NMxHf_-G7&F~0=iu!Iao4Md8d~v%Qdo9s}ape z_zL}$i*VhO9`HwH!%U-iA_Xl|f>b0}X@c3@DOGzm1Fl6CL`_aLS@gyD9(^4<5^D1_ z3Z-}0@(gn5T0KxLm+vcV3FK-9w$tf<_RlyRrcFszg8Ra9HN$$zbC=dO>pft_1A8Z1 zOXJ}N@JrxGb3rv1f3|!|A^zPPq;smI*3|chp7|Ug>^CL7=2#aO?`Ph4T6RP}yWMPV z>F?86*R6F9g9AK|kdTW7DR@S3$)EhC+SZJ7Il(*`M~38x(I&Y;Qw|x9nVW(4*KD2> zyFZC7!A><7eqO=29)0EFa!67(gA{+E52|EsPgFNz&UtG2}DfR+jL% z&-^-cR|HqH0e(5VvWLFjzsNb3m);m13EehMHYd*#Eg1hi_zA)-{)h}e&yI)$FS(Gs zu!APaSvvKDp{|*--nwxAYuhc%Iqm|0Hn!~HUuzy!^5g%(=pC0ay+<+OifgCJV=(^f zT&#JD*&wU5KizZDv9KjU)#!ar)dXHg<66;_)h^duh`IqwgGTm!V(z6xhX!2`$P~6E zGD(w&?lZ#}H2}BJtG<;y4(&akq1MSCTW!uG&YUg>bT$h$;zoE$e14b-E~bNH(k zBOEpxM9=%ZHActZ#}GmwkXRH0VS;w!oG=K#p0rPp_CG0wE8+!CZzXa}!J&Oxoe~Bi zLIeWLo-FY(M7$g{SG#&)LrgSw*%J0_6Vvo+3tU^!} z+Iv-KtG1=BKlQRaoqV}+5V06~A{UgUpOqqTwWO9-k@7^`LuQ4F68lG+m}Olyt8wZ? zpkN~xzJ2d9R{DAVLR6FK`mNan7qm3Wc1f$al$H0%vLg!+rThx>@)37cIjmhzV5(R8RbKDBY268E`PDywu$TzG)ss!ElK0df?D;mV z-`)Z!f%!DmuA}As(o4_o&KKQZr>9MvoDdtu_)JE^MH5z{>(czHsJ=dmyX#Z&1ET}1&!!?J_czI9QnCplct}<-3nH%@)7CKZ zh=%RgpZ6TNh4sL@@?Y}Ia35seAw%TB3j1TBWh3Mx3KQnqQ^_#v^q*RlB84=l)6(0Y zS0`kB9x@h2iY8+9DoLA}4)N#Wt-N4uCMjd-dIg1X{CXKa-58<3buB49U$cg*!-4B9 zbaTt`1nFpdD={gAb^K|zL!(mq)W#}|WU%SztX0_^5r_RYN| z7cv-?zF5YHC6Q%h;>AsZYb*4BbEkFvAYxXM1Q95?UGh?1z&_;LeZsqzYc); z)2?9MPNmEZ^=c)UFGIQ$e6q%=z0ki`8zQvT|7#t(S8RE@)nB~iaLrb&cP*_foMWEl z-K^7iZ!({U66>6>?wB4UaKyOiqdDi{H_|Nw{}8&yqonm#jKy(%YnN81j@hshDz*~V zU=T{}{7#2eyV|mT3#{dBZ8ZVtjVg=G-{}G-X(BDznM3JB#l-jF+Xvjfq^U+dFIJ{H z$6EG~52CK8_h3z4-->G4Gv^!Bjp3u<)zo#WDju~8)%ch;Sq9Ew$=EpouWwI|b@LqI z*Piad?Hlu3K$qGDu%CT=CJZO2Xn2*UEMQVZTPq^cxc{s0&6Q>>sO5#TZD;9*+yon2 zc8h0G{HcCxfvyE^Pw;GmPFcf#R z(sg9Cl>ngiUvr4CaYG>C$qi%p?)0oh_fn}~C9>l|9kzR0z(#n^%yE;8r<(7YZQ8_R zM1v>A-Oqc|+8!79>MWj|I+pmFmmqAM91wW>{xXGXrJ8VyvetS%Ugren&}4343A$~& z-#npV;GA1)DK@#wY)|B3=I<)0Qm&%eGPkKbiV(PzshW;F==lYh?ZI{}m)0441P%Q{ zYN+&!>z0W7VH!u{Fc20ICkV%a>9CH$;~zqoFYn<{}J-;kzN?tpst<@kn5~Sf5CdNP;_2~(2d=)ex>+#+C+15aI zV)!x#wd~I{89UvWTxI4fz0S;JR#tJZk8VlY@Bif1VHe_9^orS6+7Mrwv}`Wj4FH>f z4&P}H9ARs9%;WlEowxD%AyFJlCZi%xZiS{wyqop6Vw0V?Hsh3*`3+H5lZZVq5i$*~8iZ)F zrXqXF{jYDM#m6i6Ct^XEsZgN*Ae5X9_8QcvaQ^M6lce!)J7j>kH-gy?#fjTL!H8{; znHWORa)}S!>w&()%(lc_YZp*Gh$mb^Xy20AI6Yfzb(i}s5BzE0+L!Ignycnb^rlt& zm&R`7$)?IR*JpBzT2D{nwtADYC)(no^5kSr$sd@=Dju>rVG|~o+F3OPyy$Fn>4SNs zTcI0(xB2Iyw!hZM>o2RL^=~UA8@XLl(+XfxcXGtQFJQ}dbAi%~cR6qE=eImrkNO=V zLSl;7g@UoEWME;IeY(_~%Xo_`=M}^yu+VUPcnF|dT5LRaoMuMTkw`i^E;+=SQ}Dg; zn%PbA?W9v@&Yb$E^)Mg@5CG&i_NK-Y>You$6NpLBy^8#}Rh3ck_>*rFkaS!?3nV*#0~I9#K@hBA~`$i6e*@1C<* zt^Fx2!<^s49T?ei<{nJYeY#ISYJ7}mNX_VkJ;_LKMV12L04F`jI;1GZ)2vAO7LB!0 z2J*CeYVW=hX;~K-{2$Ml-_aBYUP>CudTo|Eb=DZAK;YL(TAA=*EV{G&2}UVAnCmQt zZtWh0R^(RThYO|uz)Bsir;5dHV~hv$*!UV;lCR5BEWTgZxI1pLhGMLKPirP;GAE4c zYwJ^43{>uc{PA&_=gHC~ITgz7N9~?-k!Ijy#o9IBQ%zP@5UY>apuUB#SFT960O9D( zo);H7GIQ4|Vcm1WT&JGy-c-ZJ4tzA_u=*x1kL!iGu$2h=QvTdjN4AahKQe4@RKsji zRdpYjda)>cu;>6)A+Xawfa#vl&GPho`QdbFuoVT^SV6CC0d(>T5Oj9wZ$rB$;GATf zcj%upX=(CU8D_nsV%o+6-#Cr}P@&^eg zS>oc5nS=0Ho8Eahb%|YFZ{2R)Vvd}9pcRqC9dOKKzhEO05vip$m}Zcp1Ni){-O%{3 zDpO$FY(mDw;bu#_r^KdlpjKCXXjRH?x1xsXB9(B?`tw$ilz#W*1ZQ)BgjhU55Uw4E z9c~c9!Kez+vJ!c)PEw`zBcxLtXTBfLM zhrH9FAR8>A=7;F;E}MUXI{{{(r(puy{Y_h34Ow0lLH1wWU@!#$iK}0emRu#bj|u3> ziQGJ#lI)i`>6kJUuGJVD+3y=tGPCd1DX8`wi%+Hl+o~#2gDB@}<5a*qIbwMCLsRA= zUS^e-uzQXU1iP33Tmwk~D@K#WihS_Y(6mlyZo2ARIX&H~T>(&x@&_jq^=q~bT;rcB zYFWD*Z;E#3V|9dWz*(_8pTtT6!vmTuOX`nMUB_K6vX#QCA!|=EtHyZ!*&oJvS&=H* zyZ>g%A;x>p5f(az{(@P0pa6PnE(+LemlfHeohZnksBOAZ#@%j~zogE8R=K7u&@Pcf zmtigMj_kZGc{qR>wRH7%r|&qXhhInM+LWQ}T-}s;7OKElm1RnruKSAP$m;36uEz;v zuoiQ2k{XOp{6B>LzNVz{Rvc5&`R#ICC-ZL|T57$AlO{LjE6yx9M~~d|wNSPRH*NUU zb=VYm-HYKl%wfcImq456-ROKVix^ckb!LgCbveHE(ks=NYl62_HCj2}b9ay^*iodZ zs%=EX{5ws*;XirCI#`a@(=UHSOs5DFNs6u0C`JFlp;BZM_RE+PK4e&4H)tAw86EiQ z)vQO|0LE9f?AbM09ep+uF7;K;CXac1t73ncH!v&kff${Dq6%7f~DtD_#H`gxu!f(1xst<3Wo=-6uzYE~jtFhtN=&x6f zV{HxX+N|YtOPhY8TsS3p&|bb#|IVgbpNmZ!;KnD-XKM0_1~MSVxcv4zr(1aoQS7B5 zvo1a_#b{DA2sCeDkMe}cpi6y$4QZn=6oA@~JVbJ7r{z&1$xpyjJbvVXNh1lYUyRoc z*+Rid(~s{aFyrGjFR#wS4#rab-|X-`$}VQIxJjMBp3=A{>X@*gYL+2rFgTF~0%0|+ zv{9dSZiN3=DNte-SJ19&n=@aXl&JeYp-MZU5+;W1#F^bN>yYohyiaEj%C@Hy04lkF zEgsaVnFjMoyhpc;CGE%PL3_KRtOEizB@rW5ek}mVziowHY7Df|^T2tKhqF+bbi6g7?_y}_iPxlF>2ji3jx(3OsbkF>$*HcJ6> zgg2Q7Qq0?wA=ZYr3F_X*{5Lx@MnS&qg)f8beTAxx9aeuyRFY}L4-H$_)!lj;dsgpHWYjiRZcOWrRl)VfTZh$edyM5>sx-avbN2!Y zh4ud;L~-ghsE^sP+D^UE6m_{GYHh#InpQIQx|3;pu6<2|Lmvd9zvQ0y(r1ajMGc&G z0hfnBgKsymnHj5^^g#b-md$i>Eh!A1y9x=2Kl1Qgfp5$qW{2B3NFG z?qgv$x;H$eZ>7_7xGUt6st>EXMoxEm!rOGxOjx@&TDA zR~wD+qZe$)>pdMCEql)zy53aPhfGO{j=zEz%8{v7@-?d~4Mr=eTijExQ{BkpV0ZeD zmivRX0QOcK{fR-yyH4jH%k8w{S72B!SiCG6qZB|bY9?lpdDX0n&zejw|CS>Cfe%)9 zMt35W2pzJHz}%So3Uss+1dv9|RK-D4iUfe0e?q|TPfzRxQ19}!8RlSw8h^!;+}B7^ z*c;0Xt`cW4)um2U!bQXh6hGoLnPAUd{>Wd%i&dRvMERvLbE2_c03iEl zFO}c4rCSLcR?l(D@Lvr5!J^pp zR@%qp6s&aWY%qya!ZE}@gg&N;m*rsgLk-X{dGzK0#v&uq)O2%33z2-P`$PYIb*E(` z#4b&9Rv$4hMJ{y{N^^j=-3Eq^&$&Ws58ON-8#KBE*@fY~tN84(+;%P?>n3772x)Ag zt_|6FbEgi`uP9cKf65W8Dc)nS)phK9WD5m+k8d6vXio7XGIo(Rihay@eBZk>!W42c zI#qEbxoa9O`d!aTk$G=dOTu~&0`KT}sJCGw23cfO43^UMU6c$Eh^}TKD28lai1yyc z_I-LTZu`$k#9_<1Fg?q~qjvPh;fm4vC8po21$7v7;Pw7Tgssdu5*&0d?#u4`5(2Z) zs{r%N!lM-<0gQncAcMT3%zEzVQ?ssZHg!nL(oppB>(!H1|14SYS;3d4WCfoxA&)l%_ zAMM<43JTNhY^EHuJP3HJMzd^2QU&*Xv|%3qgxWjKm|ZTA(ENdS(1(8ronuja_f~Q% z*ZFPNRHrTKbwyO)e!mifP^@^lC?4uYc~Inqo!# za9yP?a!8lqN;!)Wb&q>;P@OwKI~uf}Bq1Vq_ZN5;6&Z$c_-kbs>NcZaI(p>%pb9Q* z5E=OLg7Uo6fN%kK+3CB#YU-lU^F5s*(l-y=Y@X#s^?lhW^~F4K6O&IH_~U-pjT~Bd zSw5EHqV5n7P=3HSiSkq`*@gZ2S<0cc0E>XOa5~n?XT6_nayKz3XXicO?#j@2`{~av zYZ5C>P6;ul$86$!msCdEq6aQn3@UX(@*k* z(}zxlE;0_A$(>&NHiy<-_q<+*4K=QLWGy&g+jS@GF6)uTFAm%Bmvcs#+@sLVHkDK) z2-+sb$7qL#-ezW7(8GG*q<`5K^TK8)PAi^vDYfxAAs(~P>DUFpto$o1HVjOzmgtLv zFVL%N?_8E;Iv!a+WViR6p|He_ZzTFNT=xc?j>QSe0L8r`D^~c2(C?UY3JlBb==^ro zsUs7eydrdO!jHwUT(me-^ejJD24<=b^_4E_z6nn+5Beq-z;tb_tgtLwlX#WaKXAG5 z!~KNM=~zTS&srvulz~h4V_@Ls`sg-wFYQaCNmb{JKe0!fTeEwo=CId?jx>c2NvWXc z$(r?Ua8M+*X!qSpb#HfH{{|Y_0-$?eEIsp$ICvaZ^me!=groX~g`3!?EbGzk3uexj z6y&}6dcyvidd2c%@;xmgp;cd&(h9U}EdofI8byfk&ehVJYPSXDU*|q3=EpDhbH+wg zjO)x}KQ)1$*7ta9w)7)zwk{h0Kxd!hEBau>TaY13i&MBHM^DjLe;d2FX5*)kltKxX&ge2Yc z?ouEOK#d(9M)N&kVg1d$!2ob@gQ?VssCjv{$xyW&$Wy{y134tvZ>CK>4*T34A(!Je z0H797o_;e~wbop42P%Izh7%KT#D$aBll^Ec>?rpvfYt)c>%$;Of^>htfS` znf8Q`HiWvVu#|B{4qa?c?Ta=TBjZWx67;0diZ~Q1`>m2otaF&=#Fo=EDL0YH+OFJ> zj)Q|c*ROmp-jnHO$GuzHh~v9Rg>J*EFG*|tlXj^ z!;gTvu3Qo!*dM#>mb{>nila|*E~dkN6unHv8q{z-{#_Un9iWu4@)O@Q#PDRix|UMc zzuEo`4di3%Z!aY-NE_R#tU5T0Kv|!6G`&knN8vv#cN{~BmiAT6UJdm@W7V0<8oiHe!dqBdGuxQ zz50s_^rkOHZDA(b2$(p9@15NpZuM1)ojul4VR#=Bw#@T|W&C!Yt9UO3Kj~eRt3NR|1G|9<)zrbBw`4T*yO4o*GEf&#}N&Y2Y_od09N=5Wrj#O%4 z%Q_GhQ;wqospt?Loj}coOc3fq<(Vz8XZuWzL{KcJzEZJTI3t8aRNOr$UK~P3YpwJ< z^PD@3rR&vZsC;+W^f7CD*RS^CjGxzmdrfNJ?>jE}DZ;fCbyP(7rKI>p z;QzO;e=&54Mak#&aUY}QFbL^j)*)gs1U3$=FJnkq+P;t zhgAOlz~USeZBjEo3cAm%j?3=4q&;S(Ox3h2u`6*Ql(Omg@VZuQ0qrE5Kih#U)Np%Z z;zat;w!Ea;J=K}7=b_p;y{R(omNMOe@>Am7Ac~NTkeF}3L&h07U;L=giP<5i0wuP_ z&2j%feE0un@AV%-IizPQULW>ZBtFMc&+$J1PBrLk literal 0 HcmV?d00001 diff --git a/example/package.json b/example/package.json index 9bfa8345f..07e4b3503 100644 --- a/example/package.json +++ b/example/package.json @@ -65,11 +65,10 @@ ] }, "dependencies": { - "agora-electron-sdk": "4.2.0-dev.8", + "agora-electron-sdk": "4.2.0-dev.13", "antd": "^4.20.3", "download": "^8.0.0", "ffi-napi": "^4.0.3", - "history": "^5.0.0", "react": "^18.1.0", "react-color": "^2.19.3", "react-dom": "^18.1.0", @@ -89,6 +88,7 @@ "@types/react-color": "^3.0.6", "@types/react-dom": "^18.0.3", "@types/react-router-dom": "^5.1.6", + "@types/ref-napi": "^3.0.7", "electron": "18.2.3", "electron-builder": "^23.1.0", "electron-webpack": "^2.8.2", diff --git a/example/src/main/index.js b/example/src/main/index.js index 696359900..3497489ba 100644 --- a/example/src/main/index.js +++ b/example/src/main/index.js @@ -1,16 +1,11 @@ import path from 'path'; import { format as formatUrl } from 'url'; -import { BrowserWindow, app, systemPreferences } from 'electron'; +import { BrowserWindow, app, ipcMain, systemPreferences } from 'electron'; const isDevelopment = process.env.NODE_ENV !== 'production'; app.allowRendererProcessReuse = false; -if (systemPreferences.askForMediaAccess) { - systemPreferences.askForMediaAccess('camera'); - systemPreferences.askForMediaAccess('microphone'); -} - // global reference to mainWindow (necessary to prevent window from being garbage collected) let mainWindow; @@ -46,6 +41,17 @@ function createMainWindow() { mainWindow = null; }); + window.webContents.once('did-finish-load', async () => { + ipcMain.handle('IPC_REQUEST_PERMISSION_HANDLER', async (event, arg) => { + if ( + systemPreferences.getMediaAccessStatus(arg.type) === 'not-determined' + ) { + console.log('main process request handler:' + JSON.stringify(arg)); + return await systemPreferences.askForMediaAccess(arg.type); + } + }); + }); + window.webContents.on('devtools-opened', () => { window.focus(); setImmediate(() => { diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index e10324141..ad4af32e2 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -10,7 +10,6 @@ import { } from 'agora-electron-sdk'; import React, { Component, ReactElement, ReactNode } from 'react'; -import RtcSurfaceView from './RtcSurfaceView'; import { AgoraButton, AgoraCard, @@ -20,6 +19,7 @@ import { AgoraText, AgoraTextInput, AgoraView, + RtcSurfaceView, } from './ui'; export interface BaseComponentState { @@ -210,7 +210,10 @@ export abstract class BaseComponent< protected renderUser(user: VideoCanvas): ReactElement { const { enableVideo } = this.state; return ( - + {enableVideo ? ( <> Click view to mirror diff --git a/example/src/renderer/components/RtcSurfaceView/index.tsx b/example/src/renderer/components/RtcSurfaceView/index.tsx index b3b7a549d..e4ea0e7d3 100644 --- a/example/src/renderer/components/RtcSurfaceView/index.tsx +++ b/example/src/renderer/components/RtcSurfaceView/index.tsx @@ -23,7 +23,7 @@ interface State { uniqueId: number; } -class RtcSurfaceView extends Component { +export class RtcSurfaceView extends Component { constructor(props: Props) { super(props); this.state = { @@ -133,5 +133,3 @@ class RtcSurfaceView extends Component { ); } } - -export default RtcSurfaceView; diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index e3afd84f5..a2c082652 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -25,6 +25,8 @@ import React, { useEffect, useState } from 'react'; import css from './public.scss'; +export { RtcSurfaceView } from '../RtcSurfaceView'; + export const AgoraView = ( props: React.DetailedHTMLProps< React.HTMLAttributes, @@ -322,4 +324,8 @@ export const AgoraStyle = { width: 120, height: 120, }, + fullSize: { + display: 'flex', + flex: 1, + }, }; diff --git a/example/src/renderer/components/ui/public.scss b/example/src/renderer/components/ui/public.scss index dd6c8897d..8ade10b3c 100644 --- a/example/src/renderer/components/ui/public.scss +++ b/example/src/renderer/components/ui/public.scss @@ -42,8 +42,3 @@ } } } - -.fullSize { - display: flex; - flex: 1; -} diff --git a/example/src/renderer/components/ui/public.scss.d.ts b/example/src/renderer/components/ui/public.scss.d.ts index 6c72352ca..e4db5bd30 100644 --- a/example/src/renderer/components/ui/public.scss.d.ts +++ b/example/src/renderer/components/ui/public.scss.d.ts @@ -2,7 +2,6 @@ declare namespace PublicScssNamespace { export interface IPublicScss { card: string; content: string; - fullSize: string; require: string; rightBar: string; rightBarBig: string; diff --git a/example/src/renderer/config/agora.config.ts b/example/src/renderer/config/agora.config.ts index 267d53ea8..b03672a69 100644 --- a/example/src/renderer/config/agora.config.ts +++ b/example/src/renderer/config/agora.config.ts @@ -15,8 +15,7 @@ const config = { token: '', channelId: 'testdcg', uid: 0, - pluginPath: '', - SDKLogPath: '', + logFilePath: '', }; export default config; diff --git a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx index e3faedc78..913292740 100644 --- a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx +++ b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx @@ -19,8 +19,8 @@ import { AgoraTextInput, } from '../../../components/ui'; import Config from '../../../config/agora.config'; - import { getResourcePath } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { filePath: string; @@ -44,7 +44,7 @@ export default class AudioMixing uid: Config.uid, joinChannelSuccess: false, remoteUsers: [], - filePath: getResourcePath('audioeffect.mp3'), + filePath: getResourcePath('effect.mp3'), loopback: false, cycle: -1, startPos: 0, @@ -65,12 +65,15 @@ export default class AudioMixing this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); } diff --git a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx index 9e241481b..3a54ddc83 100644 --- a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx +++ b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx @@ -22,6 +22,7 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { intervalInMS: number; @@ -42,7 +43,7 @@ export default class AudioSpectrum uid: Config.uid, joinChannelSuccess: false, remoteUsers: [], - intervalInMS: 100, + intervalInMS: 500, enableAudioSpectrumMonitor: false, audioSpectrumData: [], }; @@ -60,12 +61,15 @@ export default class AudioSpectrum this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); diff --git a/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx b/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx index c016ca410..8ba3d5183 100644 --- a/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx +++ b/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx @@ -5,7 +5,6 @@ import { LighteningContrastLevel, createAgoraRtcEngine, } from 'agora-electron-sdk'; - import React from 'react'; import { @@ -20,6 +19,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { lighteningContrastLevel: LighteningContrastLevel; @@ -65,12 +65,15 @@ export default class BeautyEffect this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + this.engine?.enableExtension( 'agora_video_filters_clear_vision', 'clear_vision', diff --git a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx index e14b828ac..4f5defb76 100644 --- a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx +++ b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx @@ -15,6 +15,7 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraText, AgoraTextInput } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { destChannelNames: string[]; @@ -54,12 +55,15 @@ export default class ChannelMediaRelay this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx index 6195ed240..20275cb3c 100644 --- a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx +++ b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx @@ -23,6 +23,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { modules: ContentInspectModule[]; @@ -64,12 +65,15 @@ export default class ContentInspect this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx index 1dba65797..5fe6f864e 100644 --- a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx @@ -26,6 +26,7 @@ import { AgoraSwitch, } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { playbackDevices?: AudioDeviceInfo[]; @@ -79,12 +80,15 @@ export default class DeviceManager this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx index fbb347b4a..e3f6b2add 100644 --- a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx +++ b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx @@ -30,6 +30,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { url: string; @@ -86,12 +87,15 @@ export default class DirectCdnStreaming this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); @@ -266,7 +270,7 @@ export default class DirectCdnStreaming { if (isNaN(+text)) return; this.setState({ @@ -277,7 +281,7 @@ export default class DirectCdnStreaming placeholder={`width (defaults: ${this.createState().width})`} /> { if (isNaN(+text)) return; this.setState({ diff --git a/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx b/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx index 9c1009552..442fc4329 100644 --- a/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx +++ b/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx @@ -21,6 +21,7 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { imageBuffer: string; @@ -59,12 +60,15 @@ export default class EncodedVideoFrame this.engine = createAgoraRtcEngine() as IRtcEngineEx; this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/Encryption/Encryption.tsx b/example/src/renderer/examples/advanced/Encryption/Encryption.tsx index e7be3c158..72f4d7bcc 100644 --- a/example/src/renderer/examples/advanced/Encryption/Encryption.tsx +++ b/example/src/renderer/examples/advanced/Encryption/Encryption.tsx @@ -22,6 +22,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { encryptionMode: EncryptionMode; @@ -63,12 +64,15 @@ export default class Encryption this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/Extension/Extension.tsx b/example/src/renderer/examples/advanced/Extension/Extension.tsx index c6cbd872a..00ab66fd8 100644 --- a/example/src/renderer/examples/advanced/Extension/Extension.tsx +++ b/example/src/renderer/examples/advanced/Extension/Extension.tsx @@ -12,6 +12,7 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { path: string; @@ -53,12 +54,15 @@ export default class Extension this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx index 0fc9233a7..3cdae9cbc 100644 --- a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -17,15 +17,16 @@ import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraCard, AgoraList, AgoraText, AgoraTextInput, + RtcSurfaceView, } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { channelId2: string; @@ -72,12 +73,15 @@ export default class JoinMultipleChannel this.engine = createAgoraRtcEngine() as IRtcEngineEx; this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx index a4c01e3bb..2da91b16e 100644 --- a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx +++ b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx @@ -21,6 +21,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { arrayToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { range: number; @@ -65,7 +66,7 @@ export default class LocalSpatialAudioEngine this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, // ⚠️ Must use AudioScenarioGameStreaming on this case @@ -73,6 +74,9 @@ export default class LocalSpatialAudioEngine }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); @@ -211,7 +215,7 @@ export default class LocalSpatialAudioEngine {position.map((value, index) => ( { if (isNaN(+text)) return; position[index] = +text; @@ -229,7 +233,7 @@ export default class LocalSpatialAudioEngine {axisForward.map((value, index) => ( { if (isNaN(+text)) return; axisForward[index] = +text; @@ -247,7 +251,7 @@ export default class LocalSpatialAudioEngine {axisRight.map((value, index) => ( { if (isNaN(+text)) return; axisRight[index] = +text; @@ -265,7 +269,7 @@ export default class LocalSpatialAudioEngine {axisUp.map((value, index) => ( { if (isNaN(+text)) return; axisUp[index] = +text; diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index e8e954f29..2f9367b38 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -7,6 +7,7 @@ import createAgoraRtcEngine, { LocalTranscoderConfiguration, MediaPlayerError, MediaPlayerState, + RenderModeType, RtcConnection, RtcStats, ScreenCaptureSourceInfo, @@ -21,18 +22,19 @@ import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraDivider, AgoraDropdown, AgoraImage, AgoraTextInput, + RtcSurfaceView, } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { getResourcePath } from '../../../utils'; -import { rgbImageBufferToBase64 } from '../../../utils/base64'; +import { thumbImageBufferToBase64 } from '../../../utils/base64'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { videoDevices?: VideoDeviceInfo[]; @@ -70,7 +72,7 @@ export default class LocalVideoTranscoder startScreenCapture: false, url: 'https://agora-adc-artifacts.oss-cn-beijing.aliyuncs.com/video/meta_live_mpk.mov', open: false, - imageUrl: getResourcePath('png.png'), + imageUrl: getResourcePath('agora-logo.png'), startLocalVideoTranscoder: false, VideoInputStreams: [], }; @@ -89,11 +91,14 @@ export default class LocalVideoTranscoder this.engine.registerEventHandler(this); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera', 'screen']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); @@ -261,6 +266,7 @@ export default class LocalVideoTranscoder const config = this._generateLocalTranscoderConfiguration(); this.engine?.startLocalVideoTranscoder(config); + this.engine?.startPreview(VideoSourceType.VideoSourceTranscoded); this.setState({ startLocalVideoTranscoder: true }); }; @@ -434,6 +440,7 @@ export default class LocalVideoTranscoder <> {startLocalVideoTranscoder ? this.renderUser({ + renderMode: RenderModeType.RenderModeFit, uid: 0, sourceType: VideoSourceType.VideoSourceTranscoded, }) @@ -502,7 +509,7 @@ export default class LocalVideoTranscoder /> {targetSource ? ( ) : undefined} { const { channelId, uid } = this.state; - this.recorder = this.engine?.createLocalMediaRecorder({ + this.recorder = this.engine?.createMediaRecorder({ channelId, - localUid: uid, + uid, }); this.recorder?.setMediaRecorderObserver(this); }; diff --git a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx index ea85b95d7..ce975a386 100644 --- a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx +++ b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx @@ -89,7 +89,7 @@ export default class MusicContentCenter this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, }); } diff --git a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx index c70fe482e..a97a1cab4 100644 --- a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx +++ b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx @@ -19,6 +19,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { getResourcePath } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { soundId: number; @@ -47,7 +48,7 @@ export default class PlayEffect joinChannelSuccess: false, remoteUsers: [], soundId: 0, - filePath: getResourcePath('audioeffect.mp3'), + filePath: getResourcePath('effect.mp3'), loopCount: 1, pitch: 1.0, pan: 0, @@ -71,12 +72,15 @@ export default class PlayEffect this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); } diff --git a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx index e6f50c06a..52973ee7c 100644 --- a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx +++ b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx @@ -21,8 +21,9 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; -const pluginVersion = 'v4.2.0'; +const pluginVersion = 'v4.2.0-dev.8'; let pluginName = 'VideoObserverPlugin'; let postfix = `_${process.arch}`; if (process.platform === 'darwin') { @@ -80,12 +81,15 @@ export default class ProcessVideoRawData this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); @@ -129,7 +133,7 @@ export default class ProcessVideoRawData const dllPath = path.resolve(os.tmpdir(), pluginName); if (!fs.existsSync(dllPath)) { console.log(`start downloading plugin ${url} to ${dllPath}`); - await download(url, os.tmpdir()); + await download(encodeURI(url), os.tmpdir()); console.log(`download success`); } diff --git a/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx b/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx index 5097593b3..4365ed53f 100644 --- a/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx +++ b/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx @@ -19,7 +19,8 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraDropdown, AgoraImage } from '../../../components/ui'; import Config from '../../../config/agora.config'; -import { rgbImageBufferToBase64 } from '../../../utils/base64'; +import { thumbImageBufferToBase64 } from '../../../utils/base64'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { sources?: ScreenCaptureSourceInfo[]; @@ -60,12 +61,15 @@ export default class PushVideoFrame this.engine = createAgoraRtcEngine() as IRtcEngineEx; this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); @@ -187,7 +191,7 @@ export default class PushVideoFrame /> {targetSource ? ( ) : undefined} diff --git a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx index 6aa9362df..cc00de81a 100644 --- a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx +++ b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx @@ -33,6 +33,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { url: string; @@ -112,12 +113,15 @@ export default class RTMPStreaming this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); @@ -366,7 +370,7 @@ export default class RTMPStreaming { if (isNaN(+text)) return; this.setState({ @@ -377,7 +381,7 @@ export default class RTMPStreaming placeholder={`width (defaults: ${this.createState().width})`} /> { if (isNaN(+text)) return; this.setState({ diff --git a/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx b/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx index 2496c39ee..2d196b4ec 100644 --- a/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx +++ b/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx @@ -22,6 +22,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { getResourcePath } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { sound1: string; @@ -64,12 +65,15 @@ export default class RhythmPlayer this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); } diff --git a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx index 2bee527b3..b136c4ea4 100644 --- a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx @@ -21,7 +21,6 @@ import { BaseComponent, BaseVideoComponentState, } from '../../../components/BaseComponent'; -import RtcSurfaceView from '../../../components/RtcSurfaceView'; import { AgoraButton, AgoraDivider, @@ -31,10 +30,11 @@ import { AgoraSwitch, AgoraTextInput, AgoraView, + RtcSurfaceView, } from '../../../components/ui'; import Config from '../../../config/agora.config'; - -import { rgbImageBufferToBase64 } from '../../../utils/base64'; +import { thumbImageBufferToBase64 } from '../../../utils/base64'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { token2: string; @@ -103,12 +103,15 @@ export default class ScreenShare this.engine = createAgoraRtcEngine() as IRtcEngineEx; this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera', 'screen']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); @@ -436,7 +439,7 @@ export default class ScreenShare /> {targetSource ? ( ) : undefined} { if (isNaN(+text)) return; this.setState({ @@ -188,7 +192,7 @@ export default class VideoEncoderConfiguration placeholder={`width (defaults: ${this.createState().width})`} /> { if (isNaN(+text)) return; this.setState({ diff --git a/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx index ffb0c32c4..ca6401f4e 100644 --- a/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx +++ b/example/src/renderer/examples/advanced/VirtualBackground/VirtualBackground.tsx @@ -20,6 +20,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems, getResourcePath } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState { background_source_type: BackgroundSourceType; @@ -45,7 +46,7 @@ export default class VirtualBackground startPreview: false, background_source_type: BackgroundSourceType.BackgroundColor, color: 0xffffff, - source: getResourcePath('png.png'), + source: getResourcePath('agora-logo.png'), blur_degree: BackgroundBlurDegree.BlurDegreeMedium, enableVirtualBackground: false, }; @@ -63,12 +64,15 @@ export default class VirtualBackground this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + this.engine?.enableExtension( 'agora_video_filters_segmentation', 'portrait_segmentation', diff --git a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx index 42809a3f9..6720a2877 100644 --- a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx +++ b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx @@ -23,6 +23,7 @@ import { } from '../../../components/ui'; import Config from '../../../config/agora.config'; import { enumToItems } from '../../../utils'; +import { askMediaAccess } from '../../../utils/permissions'; import { AudioEffectPresetParam1Limit, @@ -83,12 +84,15 @@ export default class VoiceChanger this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); } diff --git a/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx index 48c33b16f..7fe3c739c 100644 --- a/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx +++ b/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx @@ -19,6 +19,7 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraDivider, AgoraSlider } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { enableLocalAudio: boolean; @@ -59,12 +60,15 @@ export default class JoinChannelAudio this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); } diff --git a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx index 7314bbe62..280fb4418 100644 --- a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx @@ -19,6 +19,7 @@ import { BaseVideoComponentState, } from '../../../components/BaseComponent'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseVideoComponentState {} @@ -51,12 +52,15 @@ export default class JoinChannelVideo this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone and camera permission + await askMediaAccess(['microphone', 'camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel this.engine.enableVideo(); diff --git a/example/src/renderer/examples/basic/StringUid/StringUid.tsx b/example/src/renderer/examples/basic/StringUid/StringUid.tsx index 95d412d60..ba8d2aa6d 100644 --- a/example/src/renderer/examples/basic/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/basic/StringUid/StringUid.tsx @@ -16,6 +16,7 @@ import { } from '../../../components/BaseComponent'; import { AgoraButton, AgoraTextInput } from '../../../components/ui'; import Config from '../../../config/agora.config'; +import { askMediaAccess } from '../../../utils/permissions'; interface State extends BaseAudioComponentState { userAccount: string; @@ -50,12 +51,15 @@ export default class StringUid this.engine = createAgoraRtcEngine(); this.engine.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); this.engine.registerEventHandler(this); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case this.engine.enableAudio(); } diff --git a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx index 82b940750..f59455889 100644 --- a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx +++ b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx @@ -29,9 +29,8 @@ const onFinish = (values: any) => { config.channelId = values.channelId; config.token = values.token; config.uid = +values.uid; - config.pluginPath = values.pluginPath; - config.SDKLogPath = values.SDKLogPath; + config.logFilePath = values.SDKLogPath; config.enableSDKLogging = values.enableSDKDebugLogging; config.enableSDKDebugLogging = values.enableSDKLogging; @@ -109,24 +108,12 @@ const AuthInfoScreen = () => { > - - - (false); + const { channelId, setChannelId, token, uid, joinChannelSuccess, engine } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(enableVideo); + + const [filePath, setFilePath] = useState( + getResourcePath('effect.mp3') + ); + const [loopback, setLoopback] = useState(false); + const [cycle, setCycle] = useState(-1); + const [startPos, setStartPos] = useState(0); + const [startAudioMixing, setStartAudioMixing] = useState(false); + const [pauseAudioMixing, setPauseAudioMixing] = useState(false); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3-1: startAudioMixing + */ + const _startAudioMixing = () => { + if (!filePath) { + log.error('filePath is invalid'); + return; + } + if (cycle < -1) { + log.error('cycle is invalid'); + return; + } + if (startPos < 0) { + log.error('startPos is invalid'); + return; + } + + engine.current.startAudioMixing(filePath, loopback, cycle, startPos); + }; + + /** + * Step 3-2 (Optional): pauseAudioMixing + */ + const _pauseAudioMixing = () => { + engine.current.pauseAudioMixing(); + }; + + /** + * Step 3-3 (Optional): resumeAudioMixing + */ + const resumeAudioMixing = () => { + engine.current.resumeAudioMixing(); + }; + + /** + * Step 3-4 (Optional): getAudioMixingCurrentPosition + */ + const getAudioMixingCurrentPosition = () => { + const position = engine.current.getAudioMixingCurrentPosition(); + const duration = engine.current.getAudioMixingDuration(); + log.debug( + 'getAudioMixingCurrentPosition', + 'position', + position, + 'duration', + duration + ); + }; + + /** + * Step 3-5: stopAudioMixing + */ + const stopAudioMixing = () => { + engine.current.stopAudioMixing(); + }; + + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + engine.current.addListener( + 'onAudioMixingStateChanged', + (state: AudioMixingStateType, reason: AudioMixingReasonType) => { + log.info('onAudioMixingStateChanged', 'state', state, 'reason', reason); + switch (state) { + case AudioMixingStateType.AudioMixingStatePlaying: + setStartAudioMixing(true); + setPauseAudioMixing(false); + break; + case AudioMixingStateType.AudioMixingStatePaused: + setPauseAudioMixing(true); + break; + case AudioMixingStateType.AudioMixingStateStopped: + case AudioMixingStateType.AudioMixingStateFailed: + setStartAudioMixing(false); + break; + } + } + ); + + engine.current.addListener('onAudioMixingFinished', () => { + log.info('AudioMixingFinished'); + }); + + engine.current.addListener('onAudioRoutingChanged', (routing: number) => { + log.info('onAudioRoutingChanged', 'routing', routing); + }); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine]); + + return ( + ( + + )} + renderAction={renderAction} + /> + ); + + function renderConfiguration(): ReactNode { + return ( + <> + { + setFilePath(text); + }} + placeholder={'filePath'} + value={filePath} + /> + { + setLoopback(value); + }} + /> + + { + if (isNaN(+text)) return; + setCycle(text === '' ? cycle : +text); + }} + numberKeyboard={true} + placeholder={`cycle (defaults: ${cycle})`} + /> + { + if (isNaN(+text)) return; + setStartPos(text === '' ? startPos : +text); + }} + numberKeyboard={true} + placeholder={`startPos (defaults: ${startPos})`} + /> + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + + + ); + } +} diff --git a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx index e10d42d3d..a5b884b17 100644 --- a/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/hook/DeviceManager/DeviceManager.tsx @@ -20,9 +20,10 @@ import * as log from '../../../utils/log'; import { BaseComponent } from '../components/BaseComponent'; import BaseRenderChannel from '../components/BaseRenderChannel'; import BaseRenderUsers from '../components/BaseRenderUsers'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import useInitRtcEngine from '../hooks/useInitRtcEngine'; export default function DeviceManager() { + const [enableVideo] = useState(true); const { channelId, setChannelId, @@ -36,7 +37,7 @@ export default function DeviceManager() { /** * Step 1: initRtcEngine */ - useInitRtcEngine(true); + useInitRtcEngine(enableVideo); const [playbackDevices, setPlaybackDevices] = useState([]); const [playbackDeviceId, setPlaybackDeviceId] = useState< @@ -267,7 +268,7 @@ export default function DeviceManager() { )} renderUsers={() => ( (false); const { channelId, setChannelId, @@ -27,7 +28,7 @@ export default function JoinChannelAudio() { /** * Step 1: initRtcEngine */ - useInitRtcEngine(false); + useInitRtcEngine(enableVideo); const [enableLocalAudio, setEnableLocalAudio] = useState(true); const [muteLocalAudioStream, setMuteLocalAudioStream] = useState(false); @@ -187,7 +188,7 @@ export default function JoinChannelAudio() { )} renderUsers={() => ( diff --git a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx index 893b8fa0b..62cb7b0c6 100644 --- a/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/hook/JoinChannelVideo/JoinChannelVideo.tsx @@ -4,15 +4,16 @@ import { LocalVideoStreamState, VideoSourceType, } from 'agora-electron-sdk'; -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import * as log from '../../../utils/log'; import { BaseComponent } from '../components/BaseComponent'; import BaseRenderChannel from '../components/BaseRenderChannel'; import BaseRenderUsers from '../components/BaseRenderUsers'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import useInitRtcEngine from '../hooks/useInitRtcEngine'; export default function JoinChannelVideo() { + const [enableVideo] = useState(true); const { channelId, setChannelId, @@ -26,7 +27,7 @@ export default function JoinChannelVideo() { /** * Step 1: initRtcEngine */ - useInitRtcEngine(true); + useInitRtcEngine(enableVideo); /** * Step 2: joinChannel @@ -115,7 +116,7 @@ export default function JoinChannelVideo() { )} renderUsers={() => ( (true); const { channelId, setChannelId, @@ -42,7 +43,7 @@ export default function JoinMultipleChannel() { /** * Step 1: initRtcEngine */ - useInitRtcEngine(true); + useInitRtcEngine(enableVideo); const [channelId2, setChannelId2] = useState(''); const [token2] = useState(''); diff --git a/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx new file mode 100644 index 000000000..49080de42 --- /dev/null +++ b/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx @@ -0,0 +1,562 @@ +import { + ClientRoleType, + LocalVideoStreamError, + LocalVideoStreamState, + RenderModeType, + RtcConnection, + RtcStats, + ScreenCaptureSourceInfo, + ScreenCaptureSourceType, + UserOfflineReasonType, + VideoSourceType, +} from 'agora-electron-sdk'; +import React, { ReactNode, useCallback, useEffect, useState } from 'react'; + +import { SketchPicker } from 'react-color'; + +import { + AgoraButton, + AgoraDivider, + AgoraDropdown, + AgoraImage, + AgoraSlider, + AgoraSwitch, + AgoraTextInput, + AgoraView, + RtcSurfaceView, +} from '../../../components/ui'; +import { thumbImageBufferToBase64 } from '../../../utils/base64'; +import * as log from '../../../utils/log'; +import { askMediaAccess } from '../../../utils/permissions'; +import { BaseComponent } from '../components/BaseComponent'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import useInitRtcEngine from '../hooks/useInitRtcEngine'; +import useResetState from '../hooks/useResetState'; + +export default function ScreenShare() { + const [enableVideo] = useState(true); + const { + channelId, + setChannelId, + token, + uid, + joinChannelSuccess, + remoteUsers, + startPreview, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(enableVideo); + const [token2] = useState(''); + const [uid2, setUid2] = useState(0); + const [sources, setSources, resetSources] = useResetState< + ScreenCaptureSourceInfo[] + >([]); + const [targetSource, setTargetSource, resetTargetSource] = useResetState< + ScreenCaptureSourceInfo | undefined + >(undefined); + const [width, setWidth] = useState(1920); + const [height, setHeight] = useState(1080); + const [frameRate, setFrameRate] = useState(15); + const [bitrate, setBitrate] = useState(0); + const [captureMouseCursor, setCaptureMouseCursor] = useState(true); + const [windowFocus, setWindowFocus] = useState(false); + const [excludeWindowList, setExcludeWindowList] = useState([]); + const [highLightWidth, setHighLightWidth] = useState(0); + const [highLightColor, setHighLightColor] = useState(0xff8cbf26); + const [enableHighLight, setEnableHighLight] = useState(false); + const [startScreenCapture, setStartScreenCapture] = useState(false); + const [publishScreenCapture, setPublishScreenCapture] = + useState(false); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3-1: getScreenCaptureSources + */ + const getScreenCaptureSources = useCallback(() => { + const sources = engine.current.getScreenCaptureSources( + { width: 1920, height: 1080 }, + { width: 64, height: 64 }, + true + ); + setSources(sources); + setTargetSource(sources?.at(0)); + }, [engine, setSources, setTargetSource]); + + useEffect(() => { + askMediaAccess(['screen']).then(() => { + getScreenCaptureSources(); + }); + }, [engine, getScreenCaptureSources]); + + /** + * Step 3-2: startScreenCapture + */ + const _startScreenCapture = () => { + if (!targetSource) { + log.error('targetSource is invalid'); + return; + } + + if ( + targetSource.type === + ScreenCaptureSourceType.ScreencapturesourcetypeScreen + ) { + engine.current.startScreenCaptureByDisplayId( + targetSource.sourceId, + {}, + { + dimensions: { width, height }, + frameRate, + bitrate, + captureMouseCursor, + excludeWindowList, + excludeWindowCount: excludeWindowList.length, + highLightWidth, + highLightColor, + enableHighLight, + } + ); + } else { + engine.current.startScreenCaptureByWindowId( + targetSource.sourceId, + {}, + { + dimensions: { width, height }, + frameRate, + bitrate, + windowFocus, + highLightWidth, + highLightColor, + enableHighLight, + } + ); + } + setStartScreenCapture(true); + }; + + /** + * Step 3-2 (Optional): updateScreenCaptureParameters + */ + const updateScreenCaptureParameters = () => { + engine.current.updateScreenCaptureParameters({ + dimensions: { width, height }, + frameRate, + bitrate, + captureMouseCursor, + windowFocus, + excludeWindowList, + excludeWindowCount: excludeWindowList.length, + highLightWidth, + highLightColor, + enableHighLight, + }); + }; + + /** + * Step 3-4: publishScreenCapture + */ + const _publishScreenCapture = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid2 <= 0) { + log.error('uid2 is invalid'); + return; + } + + // publish screen share stream + engine.current.joinChannelEx( + token2, + { channelId, localUid: uid2 }, + { + autoSubscribeAudio: false, + autoSubscribeVideo: false, + publishMicrophoneTrack: false, + publishCameraTrack: false, + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + publishScreenTrack: true, + } + ); + }; + + /** + * Step 3-5: stopScreenCapture + */ + const stopScreenCapture = () => { + engine.current.stopScreenCapture(); + setStartScreenCapture(false); + }; + + /** + * Step 3-6: unpublishScreenCapture + */ + const unpublishScreenCapture = () => { + engine.current.leaveChannelEx({ channelId, localUid: uid2 }); + }; + + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + engine.current.addListener( + 'onJoinChannelSuccess', + (connection: RtcConnection, elapsed: number) => { + if (connection.localUid === uid2) { + log.info( + 'onJoinChannelSuccess', + 'connection', + connection, + 'elapsed', + elapsed + ); + setPublishScreenCapture(true); + return; + } + } + ); + + engine.current.addListener( + 'onLeaveChannel', + (connection: RtcConnection, stats: RtcStats) => { + log.info('onLeaveChannel', 'connection', connection, 'stats', stats); + if (connection.localUid === uid2) { + setPublishScreenCapture(false); + return; + } + resetSources(); + resetTargetSource(); + } + ); + + engine.current.addListener( + 'onUserJoined', + (connection: RtcConnection, remoteUid: number, elapsed: number) => { + if (connection.localUid === uid2 || remoteUid === uid2) { + // ⚠️ mute the streams from screen sharing + engine.current.muteRemoteAudioStream(uid2, true); + engine.current.muteRemoteVideoStream(uid2, true); + return; + } + } + ); + + engine.current.addListener( + 'onUserOffline', + ( + connection: RtcConnection, + remoteUid: number, + reason: UserOfflineReasonType + ) => { + if (connection.localUid === uid2 || remoteUid === uid2) return; + } + ); + + engine.current.addListener( + 'onLocalVideoStateChanged', + ( + source: VideoSourceType, + state: LocalVideoStreamState, + error: LocalVideoStreamError + ) => { + log.info( + 'onLocalVideoStateChanged', + 'source', + source, + 'state', + state, + 'error', + error + ); + if (source === VideoSourceType.VideoSourceScreen) { + switch (state) { + case LocalVideoStreamState.LocalVideoStreamStateStopped: + case LocalVideoStreamState.LocalVideoStreamStateFailed: + break; + case LocalVideoStreamState.LocalVideoStreamStateCapturing: + case LocalVideoStreamState.LocalVideoStreamStateEncoding: + setStartScreenCapture(true); + break; + } + } + } + ); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine, resetSources, resetTargetSource, uid2]); + + return ( + ( + + )} + renderUsers={renderUsers} + renderAction={renderAction} + /> + ); + + function renderUsers(): ReactNode { + return ( + <> + + {startScreenCapture ? ( + + ) : undefined} + + ); + } + + function renderConfiguration(): ReactNode { + return ( + <> + { + return { + value: value.sourceId!, + label: value.sourceName!, + }; + })} + value={targetSource?.sourceId} + onValueChange={(value, index) => { + setTargetSource(sources?.at(index)); + }} + /> + {targetSource ? ( + + ) : undefined} + {uid2} + { + if (isNaN(+text)) return; + setUid2(text === '' ? uid2 : +text); + }} + numberKeyboard={true} + placeholder={`uid2 (must > 0)`} + value={uid2 > 0 ? uid2.toString() : ''} + /> + + { + if (isNaN(+text)) return; + setWidth(text === '' ? width : +text); + }} + numberKeyboard={true} + placeholder={`width (defaults: ${width})`} + /> + { + if (isNaN(+text)) return; + setHeight(text === '' ? height : +text); + }} + numberKeyboard={true} + placeholder={`height (defaults: ${height})`} + /> + + { + if (isNaN(+text)) return; + setFrameRate(text === '' ? frameRate : +text); + }} + numberKeyboard={true} + placeholder={`frameRate (defaults: ${frameRate})`} + /> + { + if (isNaN(+text)) return; + setBitrate(text === '' ? bitrate : +text); + }} + numberKeyboard={true} + placeholder={`bitrate (defaults: ${bitrate})`} + /> + {targetSource?.type === + ScreenCaptureSourceType.ScreencapturesourcetypeScreen ? ( + <> + { + setCaptureMouseCursor(value); + }} + /> + + + ) : undefined} + {targetSource?.type === + ScreenCaptureSourceType.ScreencapturesourcetypeWindow ? ( + <> + { + setWindowFocus(value); + }} + /> + + + ) : undefined} + {targetSource?.type === + ScreenCaptureSourceType.ScreencapturesourcetypeScreen ? ( + <> + + value.type === + ScreenCaptureSourceType.ScreencapturesourcetypeWindow + ) + .map((value) => { + return { + value: value.sourceId!, + label: value.sourceName!, + }; + })} + value={excludeWindowList} + onValueChange={(value, index) => { + if (excludeWindowList.indexOf(+value) === -1) { + setExcludeWindowList(() => [...excludeWindowList, +value]); + } else { + setExcludeWindowList(() => + excludeWindowList.filter((v) => v !== +value) + ); + } + }} + /> + + + ) : undefined} + { + setEnableHighLight(value); + }} + /> + {enableHighLight ? ( + <> + + { + setHighLightWidth(value); + }} + /> + + { + const { a = 1, r, g, b } = color.rgb; + const argbHex = + `${((a * 255) | (1 << 8)).toString(16).slice(1)}` + + `${(r | (1 << 8)).toString(16).slice(1)}` + + `${(g | (1 << 8)).toString(16).slice(1)}` + + `${(b | (1 << 8)).toString(16).slice(1)}`; + console.log( + 'onChangeComplete', + color.hex, + `#${argbHex}`, + +`0x${argbHex}`, + color + ); + setHighLightColor(+`0x${argbHex}`); + }} + color={(function () { + const argb = highLightColor?.toString(16); + const rgba = `${argb.slice(2)}` + `${argb.slice(0, 2)}`; + console.log('argb', `#${argb}`, 'rgba', `#${rgba}`); + return `#${rgba}`; + })()} + /> + + ) : undefined} + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + + + ); + } +} diff --git a/example/src/renderer/examples/hook/StringUid/StringUid.tsx b/example/src/renderer/examples/hook/StringUid/StringUid.tsx index 1fa21d90f..6fdf265f1 100644 --- a/example/src/renderer/examples/hook/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/hook/StringUid/StringUid.tsx @@ -6,9 +6,10 @@ import * as log from '../../../utils/log'; import { BaseComponent } from '../components/BaseComponent'; import BaseRenderChannel from '../components/BaseRenderChannel'; import BaseRenderUsers from '../components/BaseRenderUsers'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import useInitRtcEngine from '../hooks/useInitRtcEngine'; export default function StringUid() { + const [enableVideo] = useState(false); const { channelId, setChannelId, @@ -21,7 +22,7 @@ export default function StringUid() { /** * Step 1: initRtcEngine */ - useInitRtcEngine(false); + useInitRtcEngine(enableVideo); const [userAccount, setUserAccount] = useState(''); @@ -101,7 +102,7 @@ export default function StringUid() { )} renderUsers={() => ( diff --git a/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx new file mode 100644 index 000000000..3e62ce8c5 --- /dev/null +++ b/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx @@ -0,0 +1,191 @@ +import os from 'os'; + +import { + ClientRoleType, + ErrorCodeType, + RtcConnection, +} from 'agora-electron-sdk'; +import React, { ReactNode, useEffect, useRef, useState } from 'react'; + +import { + AgoraButton, + AgoraDivider, + AgoraDropdown, + AgoraImage, + AgoraStyle, +} from '../../../components/ui'; +import { arrayToItems } from '../../../utils'; +import * as log from '../../../utils/log'; +import { BaseComponent } from '../components/BaseComponent'; +import BaseRenderChannel from '../components/BaseRenderChannel'; +import BaseRenderUsers from '../components/BaseRenderUsers'; +import useInitRtcEngine from '../hooks/useInitRtcEngine'; + +export default function TakeSnapshot() { + const [enableVideo] = useState(true); + const { + channelId, + setChannelId, + token, + uid, + joinChannelSuccess, + remoteUsers, + engine, + } = + /** + * Step 1: initRtcEngine + */ + useInitRtcEngine(enableVideo); + + const [targetUid, setTargetUid] = useState(0); + const [osFilePath] = useState(os.homedir()); + const timestamp = useRef(0); + const [takeSnapshot, setTakeSnapshot] = useState(false); + + /** + * Step 2: joinChannel + */ + const joinChannel = () => { + if (!channelId) { + log.error('channelId is invalid'); + return; + } + if (uid < 0) { + log.error('uid is invalid'); + return; + } + + // start joining channel + // 1. Users can only see each other after they join the + // same channel successfully using the same app id. + // 2. If app certificate is turned on at dashboard, token is needed + // when joining channel. The channel name and uid used to calculate + // the token has to match the ones used for channel join + engine.current.joinChannel(token, channelId, uid, { + // Make myself as the broadcaster to send stream to remote + clientRoleType: ClientRoleType.ClientRoleBroadcaster, + }); + }; + + /** + * Step 3: takeSnapshot + */ + const _takeSnapshot = () => { + if (!osFilePath) { + log.error('filePath is invalid'); + return; + } + timestamp.current = new Date().getTime(); + engine.current.takeSnapshot( + targetUid, + `${osFilePath}/${targetUid}-${timestamp.current}.jpg` + ); + setTakeSnapshot(false); + }; + /** + * Step 4: leaveChannel + */ + const leaveChannel = () => { + engine.current.leaveChannel(); + }; + + useEffect(() => { + engine.current.addListener( + 'onSnapshotTaken', + ( + connection: RtcConnection, + uid: number, + filePath: string, + width: number, + height: number, + errCode: number + ) => { + log.info( + 'onSnapshotTaken', + 'connection', + connection, + 'uid', + uid, + 'filePath', + filePath, + 'width', + width, + 'height', + height, + 'errCode', + errCode + ); + if ( + filePath === `${osFilePath}/${targetUid}-${timestamp.current}.jpg` + ) { + setTakeSnapshot(errCode === ErrorCodeType.ErrOk); + } + } + ); + + const engineCopy = engine.current; + return () => { + engineCopy.removeAllListeners(); + }; + }, [engine, osFilePath, targetUid]); + + return ( + ( + + )} + renderUsers={() => ( + + )} + renderAction={renderAction} + /> + ); + + function renderConfiguration(): ReactNode { + return ( + <> + { + setTargetUid(value); + }} + /> + {takeSnapshot ? ( + <> + + + + ) : undefined} + + ); + } + + function renderAction(): ReactNode { + return ( + <> + + + ); + } +} diff --git a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx index e138bc390..237ba348e 100644 --- a/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx +++ b/example/src/renderer/examples/hook/VirtualBackground/VirtualBackground.tsx @@ -16,9 +16,10 @@ import * as log from '../../../utils/log'; import { BaseComponent } from '../components/BaseComponent'; import BaseRenderChannel from '../components/BaseRenderChannel'; import BaseRenderUsers from '../components/BaseRenderUsers'; -import { useInitRtcEngine } from '../hooks/useInitRtcEngine'; +import useInitRtcEngine from '../hooks/useInitRtcEngine'; export default function VirtualBackground() { + const [enableVideo] = useState(true); const { channelId, setChannelId, @@ -32,13 +33,13 @@ export default function VirtualBackground() { /** * Step 1: initRtcEngine */ - useInitRtcEngine(true); + useInitRtcEngine(enableVideo); const [background_source_type, setBackground_source_type] = useState( BackgroundSourceType.BackgroundColor ); const [color, setColor] = useState(0xffffff); - const [source, setSource] = useState(getResourcePath('png.png')); + const [source, setSource] = useState(getResourcePath('agora-logo.png')); const [blur_degree, setBlur_degree] = useState( BackgroundBlurDegree.BlurDegreeMedium ); @@ -132,7 +133,7 @@ export default function VirtualBackground() { )} renderUsers={() => ( { const [appId] = useState(Config.appId); const [channelId, setChannelId] = useState(Config.channelId); const [token] = useState(Config.token); @@ -29,15 +30,21 @@ export function useInitRtcEngine(enableVideo: boolean) { engine.current.initialize({ appId, - logConfig: { filePath: Config.SDKLogPath }, + logConfig: { filePath: Config.logFilePath }, // Should use ChannelProfileLiveBroadcasting on most of cases channelProfile: ChannelProfileType.ChannelProfileLiveBroadcasting, }); + // Need granted the microphone permission + await askMediaAccess(['microphone']); + // Only need to enable audio on this case engine.current.enableAudio(); if (enableVideo) { + // Need granted the camera permission + await askMediaAccess(['camera']); + // Need to enable video on this case // If you only call `enableAudio`, only relay the audio stream to the target channel engine.current.enableVideo(); @@ -46,12 +53,6 @@ export function useInitRtcEngine(enableVideo: boolean) { engine.current.startPreview(); setStartPreview(true); } - - if (enableVideo) { - // Start preview before joinChannel - engine.current.startPreview(); - setStartPreview(true); - } }, [appId, enableVideo]); const onError = useCallback((err: ErrorCodeType, msg: string) => { @@ -193,4 +194,5 @@ export function useInitRtcEngine(enableVideo: boolean) { startPreview, engine, }; -} +}; +export default useInitRtcEngine; diff --git a/example/src/renderer/examples/hook/hooks/useResetState.tsx b/example/src/renderer/examples/hook/hooks/useResetState.tsx new file mode 100644 index 000000000..7e1b54859 --- /dev/null +++ b/example/src/renderer/examples/hook/hooks/useResetState.tsx @@ -0,0 +1,18 @@ +import { Dispatch, SetStateAction, useCallback } from 'react'; +import { useState } from 'react'; + +type ResetState = () => void; + +const useResetState = ( + initialState: S | (() => S) +): [S, Dispatch>, ResetState] => { + const [state, setState] = useState(initialState); + + const resetState = useCallback(() => { + setState(initialState); + }, [initialState]); + + return [state, setState, resetState]; +}; + +export default useResetState; diff --git a/example/src/renderer/examples/hook/index.ts b/example/src/renderer/examples/hook/index.ts index 0a5c65335..11ce2ba3d 100644 --- a/example/src/renderer/examples/hook/index.ts +++ b/example/src/renderer/examples/hook/index.ts @@ -1,8 +1,11 @@ +import AudioMixing from './AudioMixing/AudioMixing'; import DeviceManager from './DeviceManager/DeviceManager'; import JoinChannelAudio from './JoinChannelAudio/JoinChannelAudio'; import JoinChannelVideo from './JoinChannelVideo/JoinChannelVideo'; import JoinMultipleChannel from './JoinMultipleChannel/JoinMultipleChannel'; +import ScreenShare from './ScreenShare/ScreenShare'; import StringUid from './StringUid/StringUid'; +import TakeSnapshot from './TakeSnapshot/TakeSnapshot'; import VirtualBackground from './VirtualBackground/VirtualBackground'; const Hooks = { @@ -32,6 +35,18 @@ const Hooks = { name: 'VirtualBackgroundHooks', component: VirtualBackground, }, + { + name: 'AudioMixingHooks', + component: AudioMixing, + }, + { + name: 'TakeSnapshotHooks', + component: TakeSnapshot, + }, + { + name: 'ScreenShareHooks', + component: ScreenShare, + }, ], }; export default Hooks; diff --git a/example/src/renderer/utils/base64.ts b/example/src/renderer/utils/base64.ts index 4ea1be88d..84d040c56 100644 --- a/example/src/renderer/utils/base64.ts +++ b/example/src/renderer/utils/base64.ts @@ -1,3 +1,5 @@ +import { ThumbImageBuffer } from 'agora-electron-sdk'; + export default (input: any) => { const keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; @@ -29,7 +31,7 @@ export default (input: any) => { return output; }; -export const rgbImageBufferToBase64 = (target: any) => { +export const thumbImageBufferToBase64 = (target?: ThumbImageBuffer) => { if (!target) { return ''; } @@ -38,18 +40,26 @@ export const rgbImageBufferToBase64 = (target: any) => { const ctx = canvas.getContext('2d'); if (!ctx) return ''; - const width = (canvas.width = target.width); - const height = (canvas.height = target.height); + const width = (canvas.width = target.width!); + const height = (canvas.height = target.height!); const rowBytes = width * 4; for (let row = 0; row < height; row++) { const srow = row; const imageData = ctx.createImageData(width, 1); const start = srow * width * 4; - for (let i = 0; i < rowBytes; i++) { - imageData.data[i] = target.buffer[start + i]; + if (process.platform === 'win32') { + for (let i = 0; i < rowBytes; i += 4) { + imageData.data[i] = target.buffer![start + i + 2]!; + imageData.data[i + 1] = target.buffer![start + i + 1]!; + imageData.data[i + 2] = target.buffer![start + i]!; + imageData.data[i + 3] = target.buffer![start + i + 3]!; + } + } else { + for (let i = 0; i < rowBytes; ++i) { + imageData.data[i] = target.buffer![start + i]!; + } } - ctx.putImageData(imageData, 0, row); } diff --git a/example/src/renderer/utils/permissions.ts b/example/src/renderer/utils/permissions.ts new file mode 100644 index 000000000..20ed1227c --- /dev/null +++ b/example/src/renderer/utils/permissions.ts @@ -0,0 +1,43 @@ +import { ipcRenderer } from 'electron'; + +export type mediaType = 'microphone' | 'camera' | 'screen'; +export interface AskMediaAccessReturn { + result: boolean; + mediaType: mediaType; +} + +/** + * request media permission MACOS ONLY + * If an access request was denied and later is changed through the System Preferences pane, a restart of the app will be required for the new permissions to take effect. + * If access has already been requested and denied, it must be changed through the preference pane; + * this fun will not call and the promise will resolve with the existing access status. + * @param mediaTypes + * @returns AskMediaAccessReturn[] + */ +export const askMediaAccess = async ( + mediaTypes: mediaType[] +): Promise => { + let results: AskMediaAccessReturn[] = []; + if (process.platform === 'darwin') { + for (const mediaType of mediaTypes) { + let result: boolean = false; + await ipcRenderer + .invoke('IPC_REQUEST_PERMISSION_HANDLER', { + type: mediaType, + }) + .then((res: boolean) => { + result = res; + }) + .catch((error) => { + result = error; + }) + .finally(() => { + results.push({ + mediaType, + result, + }); + }); + } + } + return results; +}; diff --git a/example/yarn.lock b/example/yarn.lock index df42ae554..145f018b2 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -4,38 +4,38 @@ "7zip-bin@~5.1.1": version "5.1.1" - resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz" + resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== "7zip@0.0.6": version "0.0.6" - resolved "https://registry.npmjs.org/7zip/-/7zip-0.0.6.tgz" + resolved "https://registry.npmjs.org/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" integrity sha512-ns8vKbKhIQm338AeWo/YdDSWil3pldwCMoyR2npoM2qDAzF8Vuko8BtDxpNt/wE15SXOh5K5WbjSLR4kTOAHLA== -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@ant-design/colors@^6.0.0": version "6.0.0" - resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz" + resolved "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== dependencies: "@ctrl/tinycolor" "^3.4.0" "@ant-design/icons-svg@^4.2.1": version "4.2.1" - resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz" + resolved "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== "@ant-design/icons@^4.7.0": - version "4.7.0" - resolved "https://registry.npmjs.org/@ant-design/icons/-/icons-4.7.0.tgz" - integrity sha512-aoB4Z7JA431rt6d4u+8xcNPPCrdufSRMUOpxa1ab6mz1JCQZOEVolj2WVs/tDFmN62zzK30mNelEsprLYsSF3g== + version "4.8.0" + resolved "https://registry.npmjs.org/@ant-design/icons/-/icons-4.8.0.tgz#3084e2bb494cac3dad6c0392f77c1efc90ee1fa4" + integrity sha512-T89P2jG2vM7OJ0IfGx2+9FC5sQjtTzRSz+mCHTXkFn/ELZc2YpfStmYHmqzq2Jx55J0F7+O6i5/ZKFSVNWCKNg== dependencies: "@ant-design/colors" "^6.0.0" "@ant-design/icons-svg" "^4.2.1" @@ -45,7 +45,7 @@ "@ant-design/react-slick@~0.29.1": version "0.29.2" - resolved "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.29.2.tgz" + resolved "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.29.2.tgz#53e6a7920ea3562eebb304c15a7fc2d7e619d29c" integrity sha512-kgjtKmkGHa19FW21lHnAfyyH9AAoh35pBdcJ53rHmQ3O+cfFHGHnUbj/HFrRNJ5vIts09FKJVAD8RpaC+RaWfA== dependencies: "@babel/runtime" "^7.10.4" @@ -54,97 +54,101 @@ lodash "^4.17.21" resize-observer-polyfill "^1.5.1" -"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.5.5": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz" - integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": + version "7.21.7" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" + integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== "@babel/core@^7.9.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz" - integrity sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" + integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helpers" "^7.21.5" + "@babel/parser" "^7.21.8" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" + json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz" - integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== +"@babel/generator@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" + integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== dependencies: - "@babel/types" "^7.19.0" + "@babel/types" "^7.21.5" "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb" + integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.21.5" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz" - integrity sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" + integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" + "@babel/compat-data" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz" - integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" + integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.5" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-replace-supers" "^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/helper-split-export-declaration" "^7.18.6" + semver "^6.3.0" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz" - integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" + integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" + regexpu-core "^5.3.1" + semver "^6.3.0" -"@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": +"@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: "@babel/helper-compilation-targets" "^7.17.7" @@ -154,84 +158,77 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" + integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== +"@babel/helper-member-expression-to-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" + integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.21.5" "@babel/helper-module-imports@7.0.0-beta.35": version "7.0.0-beta.35" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz#308e350e731752cdb4d0f058df1d704925c64e0a" integrity sha512-vaC1KyIZSuyWb3Lj277fX0pxivyHwuDU4xZsofqgYAbkDxNieMg2vuhzP5AgMweMY7fCQUMTi+BgPqTLjkxXFg== dependencies: "@babel/types" "7.0.0-beta.35" lodash "^4.2.0" -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" + integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": +"@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -239,132 +236,133 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz" - integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" + integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-member-expression-to-functions" "^7.21.5" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" -"@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.21.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.20.0" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== "@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" -"@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== +"@babel/helpers@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" + integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.18.10", "@babel/parser@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz" - integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw== +"@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" + integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz" - integrity sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ== +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -372,7 +370,7 @@ "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" @@ -380,23 +378,23 @@ "@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -404,61 +402,61 @@ "@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-parameters" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -466,178 +464,186 @@ "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== +"@babel/plugin-transform-arrow-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" + integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.21.5" -"@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== dependencies: "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz" - integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-compilation-targets" "^7.20.7" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== +"@babel/plugin-transform-computed-properties@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" + integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.18.13": - version "7.18.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz" - integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -645,29 +651,29 @@ "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== +"@babel/plugin-transform-for-of@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" + integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.21.5" "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: "@babel/helper-compilation-targets" "^7.18.9" @@ -676,224 +682,222 @@ "@babel/plugin-transform-literals@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== +"@babel/plugin-transform-modules-commonjs@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" + integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-simple-access" "^7.21.5" -"@babel/plugin-transform-modules-systemjs@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz" - integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz" - integrity sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-development@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: "@babel/plugin-transform-react-jsx" "^7.18.6" "@babel/plugin-transform-react-jsx@^7.18.6": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz" - integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz#bd98f3b429688243e4fa131fe1cbb2ef31ce6f38" + integrity sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.19.0" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/types" "^7.21.5" "@babel/plugin-transform-react-pure-annotations@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== +"@babel/plugin-transform-regenerator@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" + integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.21.5" + regenerator-transform "^0.15.1" "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/plugin-transform-unicode-escapes@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" + integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.21.5" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.9.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz" - integrity sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ== - dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb" + integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg== + dependencies: + "@babel/compat-data" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.19.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" "@babel/plugin-proposal-dynamic-import" "^7.18.6" "@babel/plugin-proposal-export-namespace-from" "^7.18.9" "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -903,49 +907,49 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.21.5" + "@babel/plugin-transform-async-to-generator" "^7.20.7" "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.19.0" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.13" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.21.5" + "@babel/plugin-transform-destructuring" "^7.21.3" "@babel/plugin-transform-dotall-regex" "^7.18.6" "@babel/plugin-transform-duplicate-keys" "^7.18.9" "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-for-of" "^7.21.5" "@babel/plugin-transform-function-name" "^7.18.9" "@babel/plugin-transform-literals" "^7.18.9" "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.0" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" "@babel/plugin-transform-new-target" "^7.18.6" "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-parameters" "^7.21.3" "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.21.5" "@babel/plugin-transform-reserved-words" "^7.18.6" "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-spread" "^7.20.7" "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-escapes" "^7.21.5" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - core-js-compat "^3.22.1" + "@babel/types" "^7.21.5" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" semver "^6.3.0" "@babel/preset-modules@^0.1.5": version "0.1.5" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -956,7 +960,7 @@ "@babel/preset-react@^7.16.7": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -966,69 +970,74 @@ "@babel/plugin-transform-react-jsx-development" "^7.18.6" "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/template@^7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + regenerator-runtime "^0.13.11" -"@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz" - integrity sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA== +"@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" + integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/parser" "^7.21.5" + "@babel/types" "^7.21.5" debug "^4.1.0" globals "^11.1.0" "@babel/types@7.0.0-beta.35": version "7.0.0-beta.35" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.35.tgz" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960" integrity sha512-y9XT11CozHDgjWcTdxmhSj13rJVXpa5ZXwjjOiTedjaM0ba5ItqdS02t31EhPl7HtOWxsZkYCCUNrSfrOisA6w== dependencies: esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.4.4": - version "7.19.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== +"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.4.4": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" + integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@ctrl/tinycolor@^3.4.0": - version "3.4.1" - resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz" - integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== + version "3.6.0" + resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz#53fa5fe9c34faee89469e48f91d51a3766108bc8" + integrity sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ== "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -1037,7 +1046,7 @@ "@develar/schema-utils@~2.6.5": version "2.6.5" - resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz" + resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== dependencies: ajv "^6.12.0" @@ -1045,7 +1054,7 @@ "@electron/get@^1.13.0": version "1.14.1" - resolved "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz" + resolved "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== dependencies: debug "^4.1.1" @@ -1060,9 +1069,9 @@ global-tunnel-ng "^2.7.1" "@electron/rebuild@^3.2.10": - version "3.2.10" - resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.2.10.tgz" - integrity sha512-SUBM6Mwi3yZaDFQjZzfGKpYTtOp9m60glounwX6tfGeVc/ZOl4jbquktUcyy7gYSLDWFLtKkftkY2xgMJZLQgg== + version "3.2.13" + resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c" + integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g== dependencies: "@malept/cross-spawn-promise" "^2.0.0" chalk "^4.0.0" @@ -1070,7 +1079,6 @@ detect-libc "^2.0.1" fs-extra "^10.0.0" got "^11.7.0" - lzma-native "^8.0.5" node-abi "^3.0.0" node-api-version "^0.1.4" node-gyp "^9.0.0" @@ -1081,7 +1089,7 @@ "@electron/universal@1.2.1": version "1.2.1" - resolved "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz" + resolved "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz#3c2c4ff37063a4e9ab1e6ff57db0bc619bc82339" integrity sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ== dependencies: "@malept/cross-spawn-promise" "^1.1.0" @@ -1094,71 +1102,68 @@ "@gar/promisify@^1.1.3": version "1.1.3" - resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@icons/material@^0.2.4": version "0.2.4" - resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz" + resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.15" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" "@malept/cross-spawn-promise@^1.1.0": version "1.1.1" - resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz" + resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== dependencies: cross-spawn "^7.0.1" "@malept/cross-spawn-promise@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz" + resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d" integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg== dependencies: cross-spawn "^7.0.1" "@malept/flatpak-bundler@^0.4.0": version "0.4.0" - resolved "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz" + resolved "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858" integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== dependencies: debug "^4.1.1" @@ -1168,7 +1173,7 @@ "@npmcli/fs@^2.1.0": version "2.1.2" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" @@ -1176,75 +1181,84 @@ "@npmcli/move-file@^2.0.0": version "2.0.1" - resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" rimraf "^3.0.2" "@pmmmwh/react-refresh-webpack-plugin@^0.5.6": - version "0.5.7" - resolved "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz" - integrity sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q== + version "0.5.10" + resolved "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz#2eba163b8e7dbabb4ce3609ab5e32ab63dda3ef8" + integrity sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA== dependencies: ansi-html-community "^0.0.8" common-path-prefix "^3.0.0" - core-js-pure "^3.8.1" + core-js-pure "^3.23.3" error-stack-parser "^2.0.6" find-up "^5.0.0" html-entities "^2.1.0" - loader-utils "^2.0.0" + loader-utils "^2.0.4" schema-utils "^3.0.0" source-map "^0.7.3" +"@rc-component/portal@^1.0.0-6", "@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.2": + version "1.1.1" + resolved "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.1.tgz#1a30ffe51c240b54360cba8e8bfc5d1f559325c4" + integrity sha512-m8w3dFXX0H6UkJ4wtfrSwhe2/6M08uz24HHrF8pWfAXPwA9hwCuTE5per/C86KwNLouRpwFGcr7LfpHaa1F38g== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + "@sindresorhus/is@^0.14.0": version "0.14.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@sindresorhus/is@^0.7.0": version "0.7.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@sindresorhus/is@^4.0.0": version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@szmarczak/http-timer@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== dependencies: defer-to-connect "^1.0.1" "@szmarczak/http-timer@^4.0.5": version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" "@teamsupercell/typings-for-css-modules-loader@^2.5.1": - version "2.5.1" - resolved "https://registry.npmjs.org/@teamsupercell/typings-for-css-modules-loader/-/typings-for-css-modules-loader-2.5.1.tgz" - integrity sha512-8Dz/2awNbkrFHf3IpF8YGUPniXAZW/z7OTiosO+xucIU1+jVg/cT4uyGZ7z9cmAsnExsxq4igazxwgGBXVpUgA== + version "2.5.2" + resolved "https://registry.npmjs.org/@teamsupercell/typings-for-css-modules-loader/-/typings-for-css-modules-loader-2.5.2.tgz#b29deee5ebf6dac48693a2039a3b68b5ad821c1d" + integrity sha512-3sqH2B4itcm5XgV1IHENt4NOaW7bOC1CwJr63vrdKWWyKVxNxtBM+ABVhJZYFCCVAwNy7ulA64z6HyQqw96m4A== dependencies: camelcase "^5.3.1" - loader-utils "1.2.3" + loader-utils "^1.4.2" schema-utils "^2.0.1" optionalDependencies: prettier "*" "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@types/cacheable-request@^6.0.1": version "6.0.3" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" @@ -1252,59 +1266,74 @@ "@types/node" "*" "@types/responselike" "^1.0.0" +"@types/d3-array@^3.0.3": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz#44eebe40be57476cad6a0cd6a85b0f57d54185a2" + integrity sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ== + "@types/d3-color@*": version "3.1.0" - resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz" + resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz#6594da178ded6c7c3842f3cc0ac84b156f12f2d4" integrity sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA== +"@types/d3-ease@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz#c29926f8b596f9dadaeca062a32a45365681eae0" + integrity sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA== + "@types/d3-interpolate@^3.0.1": version "3.0.1" - resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz" + resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz#e7d17fa4a5830ad56fe22ce3b4fac8541a9572dc" integrity sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw== dependencies: "@types/d3-color" "*" "@types/d3-path@*": version "3.0.0" - resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz" + resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz#939e3a784ae4f80b1fde8098b91af1776ff1312b" integrity sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg== "@types/d3-scale@^4.0.2": - version "4.0.2" - resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.2.tgz" - integrity sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA== + version "4.0.3" + resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz#7a5780e934e52b6f63ad9c24b105e33dd58102b5" + integrity sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ== dependencies: "@types/d3-time" "*" "@types/d3-shape@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.0.tgz" - integrity sha512-jYIYxFFA9vrJ8Hd4Se83YI6XF+gzDL1aC5DCsldai4XYYiVNdhtpGbA/GM6iyQ8ayhSp3a148LY34hy7A4TxZA== + version "3.1.1" + resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz#15cc497751dac31192d7aef4e67a8d2c62354b95" + integrity sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A== dependencies: "@types/d3-path" "*" -"@types/d3-time@*": +"@types/d3-time@*", "@types/d3-time@^3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz" + resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz#e1ac0f3e9e195135361fa1a1d62f795d87e6e819" integrity sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg== +"@types/d3-timer@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz#e2505f1c21ec08bda8915238e397fb71d2fc54ce" + integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g== + "@types/debug@^4.1.6": version "4.1.7" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== dependencies: "@types/ms" "*" "@types/decompress@*": version "4.2.4" - resolved "https://registry.yarnpkg.com/@types/decompress/-/decompress-4.2.4.tgz#dd2715d3ac1f566d03e6e302d1a26ffab59f8c5c" + resolved "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz#dd2715d3ac1f566d03e6e302d1a26ffab59f8c5c" integrity sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA== dependencies: "@types/node" "*" "@types/download@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@types/download/-/download-8.0.2.tgz#2ef0a8b19caec152b51a2efe2e99a6795dcf1ec2" + resolved "https://registry.npmjs.org/@types/download/-/download-8.0.2.tgz#2ef0a8b19caec152b51a2efe2e99a6795dcf1ec2" integrity sha512-z1Jbba+2mUP3LuQ6EaH9xsVElphj7eY7UMCnIQ5Jw6L4ZZOC3oizFo7MbyjUx8DRMupsZvEZZfXnTmLEPQFzQg== dependencies: "@types/decompress" "*" @@ -1313,7 +1342,7 @@ "@types/ffi-napi@^4.0.7": version "4.0.7" - resolved "https://registry.yarnpkg.com/@types/ffi-napi/-/ffi-napi-4.0.7.tgz#b3a9beeae160c74adca801ca1c9defb1ec0a1a32" + resolved "https://registry.npmjs.org/@types/ffi-napi/-/ffi-napi-4.0.7.tgz#b3a9beeae160c74adca801ca1c9defb1ec0a1a32" integrity sha512-2CvLfgxCUUSj7qVab6/uFLyVpgVd2gEV4H/TQEHHn6kZTV8iTesz9uo0bckhwzsh71atutOv8P3JmvRX2ZvpZg== dependencies: "@types/node" "*" @@ -1322,14 +1351,14 @@ "@types/fs-extra@^9.0.11": version "9.0.13" - resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== dependencies: "@types/node" "*" "@types/glob@^7.1.1": version "7.2.0" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" @@ -1337,7 +1366,7 @@ "@types/got@^9": version "9.6.12" - resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.12.tgz#fd42a6e1f5f64cd6bb422279b08c30bb5a15a56f" + resolved "https://registry.npmjs.org/@types/got/-/got-9.6.12.tgz#fd42a6e1f5f64cd6bb422279b08c30bb5a15a56f" integrity sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA== dependencies: "@types/node" "*" @@ -1346,54 +1375,54 @@ "@types/history@^4.7.11": version "4.7.11" - resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" + resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== "@types/html-minifier-terser@^5.0.0": version "5.1.2" - resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz" + resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== "@types/http-cache-semantics@*": version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/keyv@^3.1.4": version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" "@types/minimatch@*": version "5.1.2" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/ms@*": version "0.7.31" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "18.7.17" - resolved "https://registry.npmjs.org/@types/node/-/node-18.7.17.tgz" - integrity sha512-0UyfUnt02zIuqp7yC8RYtDkp/vo8bFaQ13KkSEvUAohPOAlnVNbj5Fi3fgPSuwzakS+EvvnnZ4x9y7i6ASaSPQ== + version "20.0.0" + resolved "https://registry.npmjs.org/@types/node/-/node-20.0.0.tgz#081d9afd28421be956c1a47ced1c9a0034b467e2" + integrity sha512-cD2uPTDnQQCVpmRefonO98/PPijuOnnEy5oytWJFPY1N9aJCz2wJ5kSGWO+zJoed2cY2JxQh6yBuUq4vIn61hw== "@types/node@^16.11.26": - version "16.11.58" - resolved "https://registry.npmjs.org/@types/node/-/node-16.11.58.tgz" - integrity sha512-uMVxJ111wpHzkx/vshZFb6Qni3BOMnlWLq7q9jrwej7Yw/KvjsEbpxCCxw+hLKxexFMc8YmpG8J9tnEe/rKsIg== + version "16.18.25" + resolved "https://registry.npmjs.org/@types/node/-/node-16.18.25.tgz#8863940fefa1234d3fcac7a4b7a48a6c992d67af" + integrity sha512-rUDO6s9Q/El1R1I21HG4qw/LstTHCPO/oQNAwI/4b2f9EWvMnqt4d3HJwPMawfZ3UvodB8516Yg+VAq54YM+eA== "@types/plist@^3.0.1": version "3.0.2" - resolved "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz" + resolved "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01" integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== dependencies: "@types/node" "*" @@ -1401,27 +1430,27 @@ "@types/prop-types@*": version "15.7.5" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react-color@^3.0.6": version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.6.tgz#602fed023802b2424e7cd6ff3594ccd3d5055f9a" + resolved "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.6.tgz#602fed023802b2424e7cd6ff3594ccd3d5055f9a" integrity sha512-OzPIO5AyRmLA7PlOyISlgabpYUa3En74LP8mTMa0veCA719SvYQov4WLMsHvCgXP+L+KI9yGhYnqZafVGG0P4w== dependencies: "@types/react" "*" "@types/reactcss" "*" "@types/react-dom@^18.0.3": - version "18.0.6" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz" - integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== + version "18.2.3" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.3.tgz#2fe492bb0e67047b7b43e18166d8f50d44e0525e" + integrity sha512-hxXEXWxFJXbY0LMj/T69mznqOZJXNtQMqVxIiirVAZnnpeYiD4zt+lPsgcr/cfWg2VLsxZ1y26vigG03prYB+Q== dependencies: "@types/react" "*" "@types/react-router-dom@^5.1.6": version "5.3.3" - resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" + resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== dependencies: "@types/history" "^4.7.11" @@ -1429,26 +1458,26 @@ "@types/react-router" "*" "@types/react-router@*": - version "5.1.18" - resolved "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz" - integrity sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g== + version "5.1.20" + resolved "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== dependencies: "@types/history" "^4.7.11" "@types/react" "*" "@types/react@*": - version "18.0.19" - resolved "https://registry.npmjs.org/@types/react/-/react-18.0.19.tgz" - integrity sha512-BDc3Q+4Q3zsn7k9xZrKfjWyJsSlEDMs38gD1qp2eDazLCdcPqAT+vq1ND+Z8AGel/UiwzNUk8ptpywgNQcJ1MQ== + version "18.2.5" + resolved "https://registry.npmjs.org/@types/react/-/react-18.2.5.tgz#f9403e1113b12b53f7edcdd9a900c10dd4b49a59" + integrity sha512-RuoMedzJ5AOh23Dvws13LU9jpZHIc/k90AgmK7CecAYeWmSr3553L4u5rk4sWAPBuQosfT7HmTfG4Rg5o4nGEA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" "@types/react@^16.9.44": - version "16.14.31" - resolved "https://registry.npmjs.org/@types/react/-/react-16.14.31.tgz" - integrity sha512-CD3LuBW4xIeGy6BxuNZdXBOsuP00OHFuNOq/4e2xKDq6z02XvdH9wIkuPNmz7BRQpo5ncy1zT9fz4tTDqXbjzQ== + version "16.14.40" + resolved "https://registry.npmjs.org/@types/react/-/react-16.14.40.tgz#cbf1c6249e9a96eb1badc7f32f1055e532e21c72" + integrity sha512-elQj2VQHDuJ5xuEcn5Wxh/YQFNbEuPJFRKSdyG866awDm5dmtoqsMmuAJWb/l/qd2kDkZMfOTKygVfMIdBBPKg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1456,72 +1485,77 @@ "@types/reactcss@*": version "1.2.6" - resolved "https://registry.yarnpkg.com/@types/reactcss/-/reactcss-1.2.6.tgz#133c1e7e896f2726370d1d5a26bf06a30a038bcc" + resolved "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.6.tgz#133c1e7e896f2726370d1d5a26bf06a30a038bcc" integrity sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg== dependencies: "@types/react" "*" -"@types/ref-napi@*": +"@types/ref-napi@*", "@types/ref-napi@^3.0.7": version "3.0.7" - resolved "https://registry.yarnpkg.com/@types/ref-napi/-/ref-napi-3.0.7.tgz#20adc93a7a2f9f992dfb17409fd748e6f4bf403d" + resolved "https://registry.npmjs.org/@types/ref-napi/-/ref-napi-3.0.7.tgz#20adc93a7a2f9f992dfb17409fd748e6f4bf403d" integrity sha512-CzPwr36VkezSpaJGdQX/UrczMSDsDgsWQQFEfQkS799Ft7n/s183a53lsql7RwVq+Ik4yLEgI84pRnLC0XXRlA== dependencies: "@types/node" "*" "@types/ref-struct-di@*": - version "1.1.8" - resolved "https://registry.yarnpkg.com/@types/ref-struct-di/-/ref-struct-di-1.1.8.tgz#df8cbf7b9bbbc03f476dcbe1958f92bf443f17d9" - integrity sha512-t5jwtHlEH6c3rgBRtMQTAtysROr1gWt/ZfcytolK+45dag747fUdgmZy/iQs5q41jinMnr62nxwI0Q8GkdK9TA== + version "1.1.9" + resolved "https://registry.npmjs.org/@types/ref-struct-di/-/ref-struct-di-1.1.9.tgz#cdca2cefbb8a907ac9eb9d6a7f19cfae00bfa092" + integrity sha512-B1FsB1BhG1VLx0+IqBaAPXEPH0wCOb+Glaaw/i+nRUwDKFtSqWOziGnTRw05RyrBbrDsMiM0tVWmaujrs016Sw== dependencies: "@types/ref-napi" "*" "@types/responselike@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== dependencies: "@types/node" "*" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/source-list-map@*": version "0.1.2" - resolved "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz" + resolved "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== "@types/tapable@^1", "@types/tapable@^1.0.5": version "1.0.8" - resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz" + resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/tough-cookie@*": version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== +"@types/triple-beam@^1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" + integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== + "@types/uglify-js@*": - version "3.17.0" - resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.0.tgz" - integrity sha512-3HO6rm0y+/cqvOyA8xcYLweF0TKXlAxmQASjbOi49Co51A1N4nR4bEwBgRoD9kNM+rqFGArjKr654SLp2CoGmQ== + version "3.17.1" + resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" + integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== dependencies: source-map "^0.6.1" "@types/verror@^1.10.3": version "1.10.6" - resolved "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz" + resolved "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz#3e600c62d210c5826460858f84bcbb65805460bb" integrity sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ== "@types/webpack-env@^1.15.1": version "1.18.0" - resolved "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz" + resolved "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb" integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg== "@types/webpack-sources@*": version "3.2.0" - resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz" + resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== dependencies: "@types/node" "*" @@ -1529,9 +1563,9 @@ source-map "^0.7.3" "@types/webpack@^4.41.8": - version "4.41.32" - resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz" - integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== + version "4.41.33" + resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz#16164845a5be6a306bcbe554a8e67f9cac215ffc" + integrity sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -1542,26 +1576,26 @@ "@types/yargs-parser@*": version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.1": - version "17.0.12" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.12.tgz" - integrity sha512-Nz4MPhecOFArtm81gFQvQqdV7XYCrWKx5uUt6GNHredFHn1i2mtWqXTON7EPXMtNi1qjtjEM/VCHDhcHsAMLXQ== + version "17.0.24" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" "@types/yauzl@^2.9.1": version "2.10.0" - resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: "@types/node" "*" "@webassemblyjs/ast@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== dependencies: "@webassemblyjs/helper-module-context" "1.9.0" @@ -1570,46 +1604,46 @@ "@webassemblyjs/floating-point-hex-parser@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== "@webassemblyjs/helper-api-error@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== "@webassemblyjs/helper-buffer@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" + resolved "https://registry.npmjs.org/@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.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" + resolved "https://registry.npmjs.org/@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-fsm@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" + resolved "https://registry.npmjs.org/@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.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-wasm-bytecode@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== "@webassemblyjs/helper-wasm-section@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1619,26 +1653,26 @@ "@webassemblyjs/ieee754@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" + resolved "https://registry.npmjs.org/@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.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1652,7 +1686,7 @@ "@webassemblyjs/wasm-gen@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1663,7 +1697,7 @@ "@webassemblyjs/wasm-opt@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1673,7 +1707,7 @@ "@webassemblyjs/wasm-parser@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1685,7 +1719,7 @@ "@webassemblyjs/wast-parser@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1697,7 +1731,7 @@ "@webassemblyjs/wast-printer@1.9.0": version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -1706,22 +1740,22 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== abbrev@^1.0.0: version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -1729,37 +1763,37 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: acorn@^6.4.1: version "6.4.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" + resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== agent-base@6, agent-base@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + version "4.3.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== dependencies: debug "^4.1.0" - depd "^1.1.2" + depd "^2.0.0" humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -agora-electron-sdk@4.2.0-dev.5: - version "4.2.0-dev.5" - resolved "https://registry.yarnpkg.com/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.5.tgz#bfcaba0b04a40875ab79f109cd6c7dd694db6905" - integrity sha512-DAyXlVStw1KZJCRrGoNQ+CjGPG1dGkp8MnGQPhb5oC/hGPkIKhHgnp+r1upH6SLwUW5AZEX0d1qR3eB+JROwng== +agora-electron-sdk@4.2.0-dev.13: + version "4.2.0-dev.13" + resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.13.tgz#4decb4ec94fd937c2424ff1883c855026444b978" + integrity sha512-qCPzDrTUVMNlFCQkrklB0i3h99kl4JEkXtyMxdOtU35UbasiFGp9JHvhR8PaBnBfkQXy94FlFsUhKAA/ot+dgw== dependencies: bindings "1.2.1" buffer "^6.0.3" @@ -1783,17 +1817,17 @@ agora-electron-sdk@4.2.0-dev.5: ajv-errors@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" + resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.1, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1801,75 +1835,68 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.1, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.4, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - ansi-colors@^1.0.1: version "1.1.0" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== dependencies: ansi-wrap "^0.1.0" ansi-colors@^3.0.0: version "3.2.4" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-gray@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz" + resolved "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== dependencies: ansi-wrap "0.1.0" ansi-html-community@0.0.8, ansi-html-community@^0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^4.1.0: version "4.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== antd@^4.20.3: - version "4.23.1" - resolved "https://registry.npmjs.org/antd/-/antd-4.23.1.tgz" - integrity sha512-/E8eGB+EkJSr8ZmC0ZgASriFEqWvCg81hAxcGoUerWdZtpuSItNt1UsYMTmGremEAEbDFlkksD1vbqmoZePZvA== + version "4.24.10" + resolved "https://registry.npmjs.org/antd/-/antd-4.24.10.tgz#9bf371c3b351b881c5b56049a410d5cf16f077ac" + integrity sha512-GihdwTGFW0dUaWjcvSIfejFcT63HjEp2EbYd+ojEXayldhey230KrHDJ+C53rkrkzLvymrPBfSxlLxJzyFIZsg== dependencies: "@ant-design/colors" "^6.0.0" "@ant-design/icons" "^4.7.0" @@ -1879,38 +1906,37 @@ antd@^4.20.3: classnames "^2.2.6" copy-to-clipboard "^3.2.0" lodash "^4.17.21" - memoize-one "^6.0.0" moment "^2.29.2" - rc-cascader "~3.6.0" - rc-checkbox "~2.3.0" - rc-collapse "~3.3.0" - rc-dialog "~8.9.0" - rc-drawer "~5.1.0" + rc-cascader "~3.7.0" + rc-checkbox "~3.0.0" + rc-collapse "~3.4.2" + rc-dialog "~9.0.2" + rc-drawer "~6.1.0" rc-dropdown "~4.0.0" rc-field-form "~1.27.0" - rc-image "~5.7.0" - rc-input "~0.1.2" - rc-input-number "~7.3.5" - rc-mentions "~1.9.1" - rc-menu "~9.6.3" + rc-image "~5.13.0" + rc-input "~0.1.4" + rc-input-number "~7.3.9" + rc-mentions "~1.13.1" + rc-menu "~9.8.0" rc-motion "^2.6.1" rc-notification "~4.6.0" - rc-pagination "~3.1.17" - rc-picker "~2.6.10" - rc-progress "~3.3.2" + rc-pagination "~3.2.0" + rc-picker "~2.7.0" + rc-progress "~3.4.1" rc-rate "~2.9.0" rc-resize-observer "^1.2.0" rc-segmented "~2.1.0" - rc-select "~14.1.1" + rc-select "~14.1.17" rc-slider "~10.0.0" - rc-steps "~4.1.0" + rc-steps "~5.0.0-alpha.2" rc-switch "~3.2.0" rc-table "~7.26.0" - rc-tabs "~12.1.0-alpha.1" - rc-textarea "~0.3.0" + rc-tabs "~12.5.6" + rc-textarea "~0.4.5" rc-tooltip "~5.2.0" - rc-tree "~5.6.5" - rc-tree-select "~5.4.0" + rc-tree "~5.7.0" + rc-tree-select "~5.5.0" rc-trigger "^5.2.10" rc-upload "~4.3.0" rc-util "^5.22.5" @@ -1918,29 +1944,29 @@ antd@^4.20.3: anymatch@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" anymatch@^3.0.0, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" app-builder-bin@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz" + resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== -app-builder-lib@23.3.3: - version "23.3.3" - resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.3.3.tgz" - integrity sha512-m0+M53+HYMzqKxwNQZT143K7WwXEGUy9LY31l8dJphXx2P/FQod615mVbxHyqbDCG4J5bHdWm21qZ0e2DVY6CQ== +app-builder-lib@23.6.0: + version "23.6.0" + resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz#03cade02838c077db99d86212d61c5fc1d6da1a8" + integrity sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" @@ -1948,13 +1974,13 @@ app-builder-lib@23.3.3: "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "23.3.3" - builder-util-runtime "9.0.3" + builder-util "23.6.0" + builder-util-runtime "9.1.1" chromium-pickle-js "^0.2.0" debug "^4.3.4" ejs "^3.1.7" electron-osx-sign "^0.6.0" - electron-publish "23.3.3" + electron-publish "23.6.0" form-data "^4.0.0" fs-extra "^10.1.0" hosted-git-info "^4.1.0" @@ -1971,36 +1997,36 @@ app-builder-lib@23.3.3: append-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz" + resolved "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== dependencies: buffer-equal "^1.0.0" "aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== aproba@^1.1.1: version "1.2.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== archive-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" + resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== dependencies: file-type "^4.2.0" archy@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -2008,63 +2034,71 @@ are-we-there-yet@^3.0.0: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-filter@^1.1.1: version "1.1.2" - resolved "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz" + resolved "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" integrity sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA== dependencies: make-iterator "^1.0.0" arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-map@^2.0.0, arr-map@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz" + resolved "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" integrity sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw== dependencies: make-iterator "^1.0.0" arr-union@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" + resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-flatten@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-initial@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz" + resolved "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" integrity sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw== dependencies: array-slice "^1.0.0" @@ -2072,19 +2106,19 @@ array-initial@^1.0.0: array-last@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz" + resolved "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== dependencies: is-number "^4.0.0" array-slice@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" + resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== array-sort@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz" + resolved "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== dependencies: default-compare "^1.0.0" @@ -2093,40 +2127,40 @@ array-sort@^1.0.0: array-tree-filter@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz" + resolved "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== array-union@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== array-unique@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" asar@^3.1.0: version "3.2.0" - resolved "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz" + resolved "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221" integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg== dependencies: chromium-pickle-js "^0.2.0" @@ -2138,7 +2172,7 @@ asar@^3.1.0: asn1.js@^5.2.0: version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" @@ -2148,12 +2182,12 @@ asn1.js@^5.2.0: assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/assert/-/assert-1.5.0.tgz" + resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: object-assign "^4.1.1" @@ -2161,17 +2195,17 @@ assert@^1.1.1: assign-symbols@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-done@^1.2.0, async-done@^1.2.2: version "1.3.2" - resolved "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz" + resolved "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== dependencies: end-of-stream "^1.1.0" @@ -2180,63 +2214,68 @@ async-done@^1.2.0, async-done@^1.2.2: stream-exhaust "^1.0.1" async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + version "1.0.6" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" + integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== async-exit-hook@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" + resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== async-limiter@~1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async-settle@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz" + resolved "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" integrity sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw== dependencies: async-done "^1.2.2" async-validator@^4.1.0: version "4.2.5" - resolved "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz" + resolved "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== async@^2.6.4: version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" async@^3.2.3: version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/atob/-/atob-2.1.2.tgz" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + babel-loader@^8.1.0: - version "8.2.5" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + version "8.3.0" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" loader-utils "^2.0.0" @@ -2245,45 +2284,38 @@ babel-loader@^8.1.0: babel-plugin-component@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz" + resolved "https://registry.npmjs.org/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz#9b023a23ff5c9aae0fd56c5a18b9cab8c4d45eea" integrity sha512-WUw887kJf2GH80Ng/ZMctKZ511iamHNqPhd9uKo14yzisvV7Wt1EckIrb8oq/uCz3B3PpAW7Xfl7AkTLDYT6ag== dependencies: "@babel/helper-module-imports" "7.0.0-beta.35" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.3.2: +babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz" - integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - core-js-compat "^3.21.0" + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" -babel-plugin-polyfill-regenerator@^0.4.0: +babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.3" bach@^1.0.0: version "1.2.0" - resolved "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz" + resolved "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" integrity sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg== dependencies: arr-filter "^1.1.1" @@ -2298,17 +2330,17 @@ bach@^1.0.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" @@ -2321,44 +2353,44 @@ base@^0.11.1: batch@0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== big.js@^5.2.2: version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bignumber.js@^9.0.0: version "9.1.1" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== binary-extensions@^1.0.0: version "1.13.1" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bindings@1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" integrity sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g== bindings@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" bl@^1.0.0: version "1.2.3" - resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" @@ -2366,7 +2398,7 @@ bl@^1.0.0: bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -2375,30 +2407,30 @@ bl@^4.1.0: bluebird-lst@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz" + resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== dependencies: bluebird "^3.5.5" bluebird@^3.5.0, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.0.0, bn.js@^5.1.1: version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.0: - version "1.20.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" content-type "~1.0.4" @@ -2408,14 +2440,14 @@ body-parser@1.20.0: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" + qs "6.11.0" raw-body "2.5.1" type-is "~1.6.18" unpipe "1.0.0" bonjour@^3.5.0: version "3.5.0" - resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" + resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== dependencies: array-flatten "^2.1.0" @@ -2427,31 +2459,17 @@ bonjour@^3.5.0: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== boolean@^3.0.1: version "3.2.0" - resolved "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz" + resolved "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2459,14 +2477,14 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^2.3.1, braces@^2.3.2: version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" @@ -2482,19 +2500,19 @@ braces@^2.3.1, braces@^2.3.2: braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" @@ -2506,7 +2524,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" @@ -2515,7 +2533,7 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" @@ -2525,7 +2543,7 @@ browserify-des@^1.0.0: browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: bn.js "^5.0.0" @@ -2533,7 +2551,7 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: browserify-sign@^4.0.0: version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== dependencies: bn.js "^5.1.1" @@ -2548,29 +2566,29 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" -browserslist@^4.20.2, browserslist@^4.21.3: - version "4.21.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== +browserslist@^4.21.3, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" - node-releases "^2.0.6" - update-browserslist-db "^1.0.5" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" buffer-alloc-unsafe@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== buffer-alloc@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" @@ -2578,42 +2596,42 @@ buffer-alloc@^1.2.0: buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-equal@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" + resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ== buffer-equal@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz" + resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof@^1.0.0: version "1.1.1" - resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" + resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== buffer-xor@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^4.3.0: version "4.9.2" - resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" @@ -2622,7 +2640,7 @@ buffer@^4.3.0: buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -2630,31 +2648,31 @@ buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" -builder-util-runtime@9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.0.3.tgz" - integrity sha512-SfG2wnyjpUbbdtpnqDpWwklujofC6GarGpvdWrEkg9p5AD/xJmTF2buTNaqs3qtsNBEVQDDjZz9xc2GGpVyMfA== +builder-util-runtime@9.1.1: + version "9.1.1" + resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz#2da7b34e78a64ad14ccd070d6eed4662d893bd60" + integrity sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw== dependencies: debug "^4.3.4" sax "^1.2.4" -builder-util@23.3.3: - version "23.3.3" - resolved "https://registry.npmjs.org/builder-util/-/builder-util-23.3.3.tgz" - integrity sha512-MJZlUiq2PY5hjYv9+XNaoYdsITqvLgRDoHSFg/4nzpInbNxNjLQOolL04Zsyp+hgfcbFvMC4h0KkR1CMPHLWbA== +builder-util@23.6.0: + version "23.6.0" + resolved "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz#1880ec6da7da3fd6fa19b8bd71df7f39e8d17dd9" + integrity sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.6" "@types/fs-extra" "^9.0.11" app-builder-bin "4.0.0" bluebird-lst "^1.0.9" - builder-util-runtime "9.0.3" + builder-util-runtime "9.1.1" chalk "^4.1.1" cross-spawn "^7.0.3" debug "^4.3.4" @@ -2669,22 +2687,22 @@ builder-util@23.3.3: builtin-status-codes@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== bytes@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cacache@^12.0.2: version "12.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== dependencies: bluebird "^3.5.5" @@ -2705,7 +2723,7 @@ cacache@^12.0.2: cacache@^13.0.1: version "13.0.1" - resolved "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz" + resolved "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== dependencies: chownr "^1.1.2" @@ -2729,7 +2747,7 @@ cacache@^13.0.1: cacache@^16.1.0: version "16.1.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" @@ -2753,7 +2771,7 @@ cacache@^16.1.0: cache-base@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" @@ -2768,12 +2786,12 @@ cache-base@^1.0.1: cacheable-lookup@^5.0.3: version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^2.1.1: version "2.1.4" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== dependencies: clone-response "1.0.2" @@ -2786,7 +2804,7 @@ cacheable-request@^2.1.1: cacheable-request@^6.0.0: version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== dependencies: clone-response "^1.0.2" @@ -2799,7 +2817,7 @@ cacheable-request@^6.0.0: cacheable-request@^7.0.2: version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== dependencies: clone-response "^1.0.2" @@ -2812,7 +2830,7 @@ cacheable-request@^7.0.2: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -2820,7 +2838,7 @@ call-bind@^1.0.0, call-bind@^1.0.2: camel-case@^4.1.1: version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -2828,27 +2846,22 @@ camel-case@^4.1.1: camelcase@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001370: - version "1.0.30001399" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz" - integrity sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA== +caniuse-lite@^1.0.30001449: + version "1.0.30001482" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz#8b3fad73dc35b2674a5c96df2d4f9f1c561435de" + integrity sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ== chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -2857,7 +2870,7 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -2865,7 +2878,7 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -2880,7 +2893,7 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: chokidar@^2.0.0, chokidar@^2.1.8: version "2.1.8" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" @@ -2899,37 +2912,32 @@ chokidar@^2.0.0, chokidar@^2.1.8: chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== chromium-pickle-js@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz" + resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - ci-info@^3.2.0: - version "3.4.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz" - integrity sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug== + version "3.8.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" @@ -2937,7 +2945,7 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: class-utils@^0.3.5: version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" @@ -2945,43 +2953,38 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: +classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2: version "2.3.2" - resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-css@^4.2.3: version "4.2.4" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== dependencies: source-map "~0.6.0" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + version "2.9.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -2989,7 +2992,7 @@ cli-truncate@^2.1.0: cliui@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== dependencies: string-width "^1.0.1" @@ -2998,7 +3001,7 @@ cliui@^3.2.0: cliui@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: string-width "^3.1.0" @@ -3007,59 +3010,59 @@ cliui@^5.0.0: cliui@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" clone-buffer@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" + resolved "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== clone-response@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== dependencies: mimic-response "^1.0.0" clone-response@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" clone-stats@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" + resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clone@^2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== cloneable-readable@^1.0.0: version "1.1.3" - resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" + resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== dependencies: inherits "^2.0.1" @@ -3068,12 +3071,12 @@ cloneable-readable@^1.0.0: code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== collection-map@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz" + resolved "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" integrity sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA== dependencies: arr-map "^2.0.2" @@ -3082,7 +3085,7 @@ collection-map@^1.0.0: collection-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" @@ -3090,31 +3093,31 @@ collection-visit@^1.0.0: color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0: version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -3122,12 +3125,12 @@ color-string@^1.6.0: color-support@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^3.1.3: version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -3135,12 +3138,12 @@ color@^3.1.3: colors@1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" + resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== colorspace@1.1.x: version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -3148,63 +3151,63 @@ colorspace@1.1.x: combined-stream@^1.0.6, combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@2.9.0: version "2.9.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz" + resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== dependencies: graceful-readlink ">= 1.0.0" commander@^2.20.0, commander@^2.8.1: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== common-path-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" + resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compare-version@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz" + resolved "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== component-emitter@^1.2.1: version "1.3.0" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compressible@~2.0.16: version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -3215,19 +3218,19 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" -compute-scroll-into-view@^1.0.17: - version "1.0.17" - resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz" - integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg== +compute-scroll-into-view@^1.0.20: + version "1.0.20" + resolved "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" + integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" @@ -3237,81 +3240,62 @@ concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.2: config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - connect-history-api-fallback@^1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== console-browserify@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== constants-browserify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== content-disposition@0.5.4, content-disposition@^0.5.2: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.5.0: +convert-source-map@^1.5.0, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== copy-concurrently@^1.0.0: version "1.0.5" - resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" + resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" @@ -3323,56 +3307,56 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== copy-props@^2.0.1: version "2.0.5" - resolved "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz" + resolved "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz#03cf9ae328d4ebb36f8f1d804448a6af9ee3f2d2" integrity sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw== dependencies: each-props "^1.3.2" is-plain-object "^5.0.0" copy-to-clipboard@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz" - integrity sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg== + version "3.3.3" + resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.25.1" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz" - integrity sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw== +core-js-compat@^3.25.1: + version "3.30.1" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" + integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== dependencies: - browserslist "^4.21.3" + browserslist "^4.21.5" -core-js-pure@^3.8.1: - version "3.25.1" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz" - integrity sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A== +core-js-pure@^3.23.3: + version "3.30.1" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec" + integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg== core-util-is@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== crc@^3.8.0: version "3.8.0" - resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" + resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== dependencies: buffer "^5.1.0" create-ecdh@^4.0.0: version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" @@ -3380,7 +3364,7 @@ create-ecdh@^4.0.0: create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" @@ -3391,7 +3375,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" @@ -3403,21 +3387,21 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: crocket@^0.9.11: version "0.9.11" - resolved "https://registry.npmjs.org/crocket/-/crocket-0.9.11.tgz" + resolved "https://registry.npmjs.org/crocket/-/crocket-0.9.11.tgz#288fca11ef0d3dd239b62c488265f30c8edfb0c5" integrity sha512-Ylflbm4qvJCC/G76Yp62PrSzEpYYrzTvkxGQFwgwbDj2PakNOwOns6NBs2YYS+TrPXAUq68N5fee7Gia+Z13tw== dependencies: xpipe "*" cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -3428,7 +3412,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: cross-spawn@^7.0.1, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -3437,12 +3421,12 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.3: cross-unzip@0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz" + resolved "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz#5183bc47a09559befcf98cc4657964999359372f" integrity sha512-nRJ5c+aqHz0OJVU4V1bqoaDggydfauK/Gha/H/ScBvuIjhZvl8YIpdWVzSR3vUhzCloqB1tvBdQ4V7J8qK7HzQ== crypto-browserify@^3.11.0: version "3.12.0" - resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" @@ -3457,14 +3441,9 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - css-hot-loader@^1.4.4: version "1.4.4" - resolved "https://registry.npmjs.org/css-hot-loader/-/css-hot-loader-1.4.4.tgz" + resolved "https://registry.npmjs.org/css-hot-loader/-/css-hot-loader-1.4.4.tgz#ae784932cd8b7d092f7f15702af08b3ec9436052" integrity sha512-J/qXHz+r7FOT92qMIJfxUk0LC9fecQNZVr0MswQ4FOpKLyOCBjofVMfc6R268bh/5ktkTShrweMr0wWqerC92g== dependencies: loader-utils "^1.1.0" @@ -3473,7 +3452,7 @@ css-hot-loader@^1.4.4: css-loader@^3.4.2: version "3.6.0" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== dependencies: camelcase "^5.3.1" @@ -3492,7 +3471,7 @@ css-loader@^3.4.2: css-select@^4.1.3: version "4.3.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -3503,61 +3482,66 @@ css-select@^4.1.3: css-unit-converter@^1.1.1: version "1.1.2" - resolved "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz" + resolved "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== css-what@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + version "3.1.2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== cyclist@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz" + resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== -"d3-array@2 - 3", "d3-array@2.10.0 - 3": - version "3.2.0" - resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz" - integrity sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g== +"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: + version "3.2.3" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740" + integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ== dependencies: internmap "1 - 2" "d3-color@1 - 3": version "3.1.0" - resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== +d3-ease@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + "d3-format@1 - 3": version "3.1.0" - resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" -"d3-path@1 - 3": - version "3.0.1" - resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz" - integrity sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w== +d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== d3-scale@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz" + resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== dependencies: d3-array "2.10.0 - 3" @@ -3567,97 +3551,104 @@ d3-scale@^4.0.2: d3-time-format "2 - 4" d3-shape@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz" - integrity sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ== + version "3.2.0" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== dependencies: - d3-path "1 - 3" + d3-path "^3.1.0" "d3-time-format@2 - 4": version "4.1.0" - resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" + resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== dependencies: d3-time "1 - 3" -"d3-time@1 - 3", "d3-time@2.1.1 - 3": - version "3.0.0" - resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz" - integrity sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ== +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" +d3-timer@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + d@1, d@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: es5-ext "^0.10.50" type "^1.0.1" date-fns@2.x: - version "2.29.2" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.2.tgz" - integrity sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA== + version "2.30.0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" dayjs@1.x: - version "1.11.5" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz" - integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== + version "1.11.7" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^3.1.0, debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js-light@^2.4.1: version "2.5.1" - resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" + resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + version "0.2.2" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== dependencies: file-type "^5.2.0" @@ -3666,7 +3657,7 @@ decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: decompress-tarbz2@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== dependencies: decompress-tar "^4.1.0" @@ -3677,7 +3668,7 @@ decompress-tarbz2@^4.0.0: decompress-targz@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== dependencies: decompress-tar "^4.1.1" @@ -3686,7 +3677,7 @@ decompress-targz@^4.0.0: decompress-unzip@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== dependencies: file-type "^3.8.0" @@ -3696,7 +3687,7 @@ decompress-unzip@^4.0.1: decompress@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== dependencies: decompress-tar "^4.0.0" @@ -3710,7 +3701,7 @@ decompress@^4.2.1: deep-equal@^1.0.1: version "1.1.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" @@ -3720,21 +3711,16 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - default-compare@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz" + resolved "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== dependencies: kind-of "^5.0.2" default-gateway@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== dependencies: execa "^1.0.0" @@ -3742,51 +3728,51 @@ default-gateway@^4.2.0: default-resolution@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz" + resolved "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" integrity sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ== defaults@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" defer-to-connect@^1.0.1: version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== defer-to-connect@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" @@ -3794,7 +3780,7 @@ define-property@^2.0.2: del@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz" + resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== dependencies: "@types/glob" "^7.1.1" @@ -3807,27 +3793,27 @@ del@^4.1.1: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@2.0.0: +depd@2.0.0, depd@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@^1.1.2, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== des.js@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" @@ -3835,27 +3821,27 @@ des.js@^1.0.0: destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== detect-libc@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== detect-node@^2.0.4: version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== diffie-hellman@^5.0.0: version "5.0.3" - resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" @@ -3864,7 +3850,7 @@ diffie-hellman@^5.0.0: dir-compare@^2.4.0: version "2.4.0" - resolved "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz" + resolved "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631" integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== dependencies: buffer-equal "1.0.0" @@ -3872,14 +3858,14 @@ dir-compare@^2.4.0: commander "2.9.0" minimatch "3.0.4" -dmg-builder@23.3.3: - version "23.3.3" - resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.3.3.tgz" - integrity sha512-ECwAjt+ZWyOvddrkDx1xRD6IVUCZb5SV6vSMHZd+Va3G2sUXHrnglR1cGDKRF4oYRQm8SYVrpLZKbi8npyDcAQ== +dmg-builder@23.6.0: + version "23.6.0" + resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz#d39d3871bce996f16c07d2cafe922d6ecbb2a948" + integrity sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA== dependencies: - app-builder-lib "23.3.3" - builder-util "23.3.3" - builder-util-runtime "9.0.3" + app-builder-lib "23.6.0" + builder-util "23.6.0" + builder-util-runtime "9.1.1" fs-extra "^10.0.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -3888,7 +3874,7 @@ dmg-builder@23.3.3: dmg-license@^1.0.11: version "1.0.11" - resolved "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz" + resolved "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a" integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== dependencies: "@types/plist" "^3.0.1" @@ -3902,12 +3888,12 @@ dmg-license@^1.0.11: dns-equal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^1.3.1: version "1.3.4" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== dependencies: ip "^1.1.0" @@ -3915,33 +3901,33 @@ dns-packet@^1.3.1: dns-txt@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" + resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== dependencies: buffer-indexof "^1.0.0" dom-align@^1.7.0: - version "1.12.3" - resolved "https://registry.npmjs.org/dom-align/-/dom-align-1.12.3.tgz" - integrity sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA== + version "1.12.4" + resolved "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511" + integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw== dom-converter@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" + resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" dom-helpers@^3.4.0: version "3.4.0" - resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== dependencies: "@babel/runtime" "^7.1.2" dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -3950,31 +3936,31 @@ dom-serializer@^1.0.1: domain-browser@^1.1.1: version "1.2.0" - resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^3.0.0: version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -3983,37 +3969,30 @@ domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" tslib "^2.0.3" -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - dotenv-expand@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== dotenv@^8.0.0, dotenv@^8.2.0: version "8.6.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== dotenv@^9.0.2: version "9.0.2" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== download@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" + resolved "https://registry.npmjs.org/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== dependencies: archive-type "^4.0.0" @@ -4030,12 +4009,12 @@ download@^8.0.0: duplexer3@^0.1.4: version "0.1.5" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" @@ -4045,7 +4024,7 @@ duplexify@^3.4.2, duplexify@^3.6.0: each-props@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz" + resolved "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== dependencies: is-plain-object "^2.0.1" @@ -4053,37 +4032,37 @@ each-props@^1.3.2: ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.7: - version "3.1.8" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.9" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" electron-builder@^23.1.0: - version "23.3.3" - resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-23.3.3.tgz" - integrity sha512-mFYYdhoFPKevP6y5uaaF3dusmB2OtQ/HnwwpyOePeU7QDS0SEIAUokQsHUanAiJAZcBqtY7iyLBgX18QybdFFw== + version "23.6.0" + resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz#c79050cbdce90ed96c5feb67c34e9e0a21b5331b" + integrity sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw== dependencies: "@types/yargs" "^17.0.1" - app-builder-lib "23.3.3" - builder-util "23.3.3" - builder-util-runtime "9.0.3" + app-builder-lib "23.6.0" + builder-util "23.6.0" + builder-util-runtime "9.1.1" chalk "^4.1.1" - dmg-builder "23.3.3" + dmg-builder "23.6.0" fs-extra "^10.0.0" is-ci "^3.0.0" lazy-val "^1.0.5" read-config-file "6.2.0" - update-notifier "^5.1.0" - yargs "^17.0.1" + simple-update-notifier "^1.0.7" + yargs "^17.5.1" electron-devtools-installer@^2.2.4: version "2.2.4" - resolved "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.4.tgz" + resolved "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.4.tgz#261a50337e37121d338b966f07922eb4939a8763" integrity sha512-b5kcM3hmUqn64+RUcHjjr8ZMpHS2WJ5YO0pnG9+P/RTdx46of/JrEjuciHWux6pE+On6ynWhHJF53j/EDJN0PA== dependencies: "7zip" "0.0.6" @@ -4093,7 +4072,7 @@ electron-devtools-installer@^2.2.4: electron-osx-sign@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz" + resolved "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz#9b69c191d471d9458ef5b1e4fdd52baa059f1bb8" integrity sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg== dependencies: bluebird "^3.5.0" @@ -4103,27 +4082,27 @@ electron-osx-sign@^0.6.0: minimist "^1.2.0" plist "^3.0.1" -electron-publish@23.3.3: - version "23.3.3" - resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-23.3.3.tgz" - integrity sha512-1dX17eE5xVXedTxjC+gjsP74oC0+sIHgqysp0ryTlF9+yfQUyXjBk6kcK+zhtBA2SsHMSglDtM+JPxDD/WpPTQ== +electron-publish@23.6.0: + version "23.6.0" + resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz#ac9b469e0b07752eb89357dd660e5fb10b3d1ce9" + integrity sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "23.3.3" - builder-util-runtime "9.0.3" + builder-util "23.6.0" + builder-util-runtime "9.1.1" chalk "^4.1.1" fs-extra "^10.0.0" lazy-val "^1.0.5" mime "^2.5.2" -electron-to-chromium@^1.4.202: - version "1.4.248" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.248.tgz" - integrity sha512-qShjzEYpa57NnhbW2K+g+Fl+eNoDvQ7I+2MRwWnU6Z6F0HhXekzsECCLv+y2OJUsRodjqoSfwHkIX42VUFtUzg== +electron-to-chromium@^1.4.284: + version "1.4.384" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.384.tgz#5c23b5579930dec9af2a93edafddbe991542eace" + integrity sha512-I97q0MmRAAqj53+a8vZsDkEXBZki+ehYAOPzwtQzALip52aEp2+BJqHFtTlsfjoqVZYwPpHC8wM6MbsSZQ/Eqw== electron-webpack-js@~2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/electron-webpack-js/-/electron-webpack-js-2.4.1.tgz" + resolved "https://registry.npmjs.org/electron-webpack-js/-/electron-webpack-js-2.4.1.tgz#5389cc22f34c71f6416d5ba1e043f9b0fd6130af" integrity sha512-NPbcI4nnuclkLEKmwRI8sui2GNe37NKm0pCQR6KZA7YSV3KQdH4I7wOgIZ2AkeCpyeUHrBSMGQY+VqhPD7OtMA== dependencies: "@babel/core" "^7.9.0" @@ -4134,7 +4113,7 @@ electron-webpack-js@~2.4.1: electron-webpack@^2.8.2: version "2.8.2" - resolved "https://registry.npmjs.org/electron-webpack/-/electron-webpack-2.8.2.tgz" + resolved "https://registry.npmjs.org/electron-webpack/-/electron-webpack-2.8.2.tgz#5a0357ce8f7d147e5f559294a08bb072d1092b0a" integrity sha512-rR7hxoOlZIcJf6R08mVl/4TBtFY+HW6sv4Z28TdMWETvcM4ZBIBdGNGylxF0gNwB8gkTgo8UkkDbXGX48K4Vow== dependencies: "@types/webpack-env" "^1.15.1" @@ -4169,7 +4148,7 @@ electron-webpack@^2.8.2: electron@18.2.3: version "18.2.3" - resolved "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz" + resolved "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz#36bcb8f71e41631e6b11179eeff291c8228bfd6a" integrity sha512-DJWX03hCRKTscsfXxmW4gmgFuseop+g+m4ml7NfOMfankD8uYyr2Xyi3Ui02inL9qZOlbLMeLVCu6jKCKs8p/w== dependencies: "@electron/get" "^1.13.0" @@ -4178,7 +4157,7 @@ electron@18.2.3: elliptic@^6.5.3: version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" @@ -4191,51 +4170,46 @@ elliptic@^6.5.3: emoji-regex@^7.0.1: version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" - integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== - emojis-list@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== enabled@2.0.x: version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@^1.0.2, encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encoding@^0.1.13: version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" @@ -4244,77 +4218,97 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== errno@^0.1.3, errno@~0.1.7: version "0.1.8" - resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" error-ex@^1.2.0: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: version "2.1.4" - resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" + resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: stackframe "^1.3.4" -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: - version "1.20.2" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz" - integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.21.2" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.2" + get-intrinsic "^1.2.0" get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" + is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4323,7 +4317,7 @@ es-to-primitive@^1.2.1: es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: version "0.10.62" - resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: es6-iterator "^2.0.3" @@ -4332,12 +4326,12 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: es6-error@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" + resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== es6-iterator@^2.0.1, es6-iterator@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" @@ -4346,7 +4340,7 @@ es6-iterator@^2.0.1, es6-iterator@^2.0.3: es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: d "^1.0.1" @@ -4354,7 +4348,7 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: es6-weak-map@^2.0.1: version "2.0.3" - resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" + resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== dependencies: d "1" @@ -4364,32 +4358,27 @@ es6-weak-map@^2.0.1: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-scope@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" @@ -4397,54 +4386,54 @@ eslint-scope@^4.0.3: esprima@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrecurse@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter3@^4.0.0, eventemitter3@^4.0.1: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.0.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== eventsource@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" @@ -4452,7 +4441,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: execa@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -4465,7 +4454,7 @@ execa@^1.0.0: expand-brackets@^2.1.4: version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" @@ -4478,19 +4467,19 @@ expand-brackets@^2.1.4: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" express@^4.17.1: - version "4.18.1" - resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + version "4.18.2" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.0" + body-parser "1.20.1" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.5.0" @@ -4509,7 +4498,7 @@ express@^4.17.1: parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.10.3" + qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" send "0.18.0" @@ -4522,14 +4511,14 @@ express@^4.17.1: ext-list@^2.0.0: version "2.2.2" - resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" + resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== dependencies: mime-db "^1.28.0" ext-name@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" + resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== dependencies: ext-list "^2.0.0" @@ -4537,21 +4526,21 @@ ext-name@^5.0.0: ext@^1.1.2: version "1.7.0" - resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: type "^2.7.2" extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" @@ -4559,12 +4548,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extglob@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" @@ -4578,7 +4567,7 @@ extglob@^2.0.4: extract-zip@^1.0.3: version "1.7.0" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== dependencies: concat-stream "^1.6.2" @@ -4588,7 +4577,7 @@ extract-zip@^1.0.3: extract-zip@^2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: debug "^4.1.1" @@ -4599,12 +4588,12 @@ extract-zip@^2.0.1: extsprintf@^1.2.0: version "1.4.1" - resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fancy-log@^1.3.2: version "1.3.3" - resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" + resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== dependencies: ansi-gray "^0.1.1" @@ -4614,46 +4603,46 @@ fancy-log@^1.3.2: fast-deep-equal@^3.1.1: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-equals@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz" - integrity sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w== +fast-equals@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" + integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^1.0.0: version "1.1.4" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9" integrity sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw== faye-websocket@^0.11.3, faye-websocket@^0.11.4: version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== ffi-napi@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/ffi-napi/-/ffi-napi-4.0.3.tgz" + resolved "https://registry.npmjs.org/ffi-napi/-/ffi-napi-4.0.3.tgz#27a8d42a8ea938457154895c59761fbf1a10f441" integrity sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg== dependencies: debug "^4.1.1" @@ -4665,12 +4654,12 @@ ffi-napi@^4.0.3: figgy-pudding@^3.5.1: version "3.5.2" - resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== file-loader@^6.0.0: version "6.2.0" - resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== dependencies: loader-utils "^2.0.0" @@ -4678,49 +4667,49 @@ file-loader@^6.0.0: file-type@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz#93780f3fed98b599755d846b99a1617a2ad063b8" integrity sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g== file-type@^3.8.0: version "3.9.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== file-type@^4.2.0: version "4.4.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== file-type@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== file-type@^6.1.0: version "6.2.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== filelist@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" filename-reserved-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== filenamify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz#9603eb688179f8c5d40d828626dcbb92c3a4672c" integrity sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g== dependencies: filename-reserved-regex "^2.0.0" @@ -4729,7 +4718,7 @@ filenamify@^3.0.0: fill-range@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" @@ -4739,14 +4728,14 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -4759,7 +4748,7 @@ finalhandler@1.2.0: find-cache-dir@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" @@ -4768,7 +4757,7 @@ find-cache-dir@^2.1.0: find-cache-dir@^3.3.1: version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" @@ -4777,7 +4766,7 @@ find-cache-dir@^3.3.1: find-up@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== dependencies: path-exists "^2.0.0" @@ -4785,14 +4774,14 @@ find-up@^1.0.0: find-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -4800,7 +4789,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -4808,7 +4797,7 @@ find-up@^5.0.0: findup-sync@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" integrity sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g== dependencies: detect-file "^1.0.0" @@ -4818,7 +4807,7 @@ findup-sync@^2.0.0: findup-sync@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: detect-file "^1.0.0" @@ -4828,7 +4817,7 @@ findup-sync@^3.0.0: fined@^1.0.1: version "1.2.0" - resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" + resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== dependencies: expand-tilde "^2.0.2" @@ -4839,12 +4828,12 @@ fined@^1.0.1: flagged-respawn@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" + resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" - resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: inherits "^2.0.3" @@ -4852,29 +4841,36 @@ flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: fn.name@1.x.x: version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.0.0: - version "1.15.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== for-own@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" + resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== dependencies: for-in "^1.0.1" fork-ts-checker-webpack-plugin@^4.1.2: version "4.1.6" - resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz" + resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== dependencies: "@babel/code-frame" "^7.5.5" @@ -4887,7 +4883,7 @@ fork-ts-checker-webpack-plugin@^4.1.2: form-data@^2.5.0: version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== dependencies: asynckit "^0.4.0" @@ -4896,7 +4892,7 @@ form-data@^2.5.0: form-data@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -4905,24 +4901,24 @@ form-data@^4.0.0: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fragment-cache@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.1.0, from2@^2.1.1: version "2.3.0" - resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" @@ -4930,12 +4926,12 @@ from2@^2.1.0, from2@^2.1.1: fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -4944,7 +4940,7 @@ fs-extra@^10.0.0, fs-extra@^10.1.0: fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -4953,7 +4949,7 @@ fs-extra@^8.1.0: fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -4963,14 +4959,14 @@ fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-mkdirp-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== dependencies: graceful-fs "^4.1.11" @@ -4978,7 +4974,7 @@ fs-mkdirp-stream@^1.0.0: fs-write-stream-atomic@^1.0.8: version "1.0.10" - resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" + resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" @@ -4988,12 +4984,12 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: version "1.2.13" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" @@ -5001,17 +4997,17 @@ fsevents@^1.2.7: fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -5019,14 +5015,14 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^4.0.3: version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -5040,23 +5036,23 @@ gauge@^4.0.3: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -5064,12 +5060,12 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@ get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== get-stream@^2.2.0: version "2.3.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== dependencies: object-assign "^4.0.1" @@ -5077,21 +5073,21 @@ get-stream@^2.2.0: get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.1.0, get-stream@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -5099,24 +5095,24 @@ get-symbol-description@^1.0.0: get-symbol-from-current-process-h@^1.0.1, get-symbol-from-current-process-h@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz" + resolved "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz#510af52eaef873f7028854c3377f47f7bb200265" integrity sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw== get-uv-event-loop-napi-h@^1.0.5: version "1.0.6" - resolved "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz" + resolved "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz#42b0b06b74c3ed21fbac8e7c72845fdb7a200208" integrity sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg== dependencies: get-symbol-from-current-process-h "^1.0.1" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== glob-parent@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" @@ -5124,14 +5120,14 @@ glob-parent@^3.1.0: glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-stream@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz" + resolved "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== dependencies: extend "^3.0.0" @@ -5147,7 +5143,7 @@ glob-stream@^6.1.0: glob-watcher@^5.0.3: version "5.0.5" - resolved "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz" + resolved "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== dependencies: anymatch "^2.0.0" @@ -5160,7 +5156,7 @@ glob-watcher@^5.0.3: glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -5171,9 +5167,9 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: path-is-absolute "^1.0.0" glob@^8.0.1: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5183,7 +5179,7 @@ glob@^8.0.1: global-agent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz" + resolved "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== dependencies: boolean "^3.0.1" @@ -5193,16 +5189,9 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" @@ -5211,14 +5200,14 @@ global-modules@^1.0.0: global-modules@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" @@ -5229,7 +5218,7 @@ global-prefix@^1.0.1: global-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" @@ -5238,7 +5227,7 @@ global-prefix@^3.0.0: global-tunnel-ng@^2.7.1: version "2.7.1" - resolved "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz" + resolved "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== dependencies: encodeurl "^1.0.2" @@ -5248,19 +5237,19 @@ global-tunnel-ng@^2.7.1: globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globalthis@^1.0.1: +globalthis@^1.0.1, globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" globby@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" @@ -5271,14 +5260,21 @@ globby@^6.1.0: glogg@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz" + resolved "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== dependencies: sparkles "^1.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + got@^11.7.0: version "11.8.6" - resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" @@ -5295,7 +5291,7 @@ got@^11.7.0: got@^8.3.1: version "8.3.2" - resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz" + resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" @@ -5318,7 +5314,7 @@ got@^8.3.1: got@^9.6.0: version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" + resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: "@sindresorhus/is" "^0.14.0" @@ -5334,18 +5330,18 @@ got@^9.6.0: url-parse-lax "^3.0.0" graceful-fs@^4.0.0, graceful-fs@^4.1.10, 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.2.2, graceful-fs@^4.2.6: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== "graceful-readlink@>= 1.0.0": version "1.0.1" - resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== gulp-cli@^2.2.0, gulp-cli@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz" + resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== dependencies: ansi-colors "^1.0.1" @@ -5369,7 +5365,7 @@ gulp-cli@^2.2.0, gulp-cli@^2.3.0: gulp-zip@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz" + resolved "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz#38cc1d4c61bc2ab06b452ce463cbe2adc52b935e" integrity sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw== dependencies: get-stream "^5.2.0" @@ -5380,7 +5376,7 @@ gulp-zip@^5.1.0: gulp@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz" + resolved "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== dependencies: glob-watcher "^5.0.3" @@ -5390,70 +5386,75 @@ gulp@^4.0.2: gulplog@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz" + resolved "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw== dependencies: glogg "^1.0.0" handle-thing@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbol-support-x@^1.4.1: version "1.4.2" - resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" + resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-to-string-tag-x@^1.2.0: version "1.4.1" - resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" + resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" @@ -5462,7 +5463,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" @@ -5471,32 +5472,27 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" @@ -5505,7 +5501,7 @@ hash-base@^3.0.0: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" @@ -5513,12 +5509,12 @@ hash.js@^1.0.0, hash.js@^1.0.3: he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== history@^4.9.0: version "4.10.1" - resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" + resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== dependencies: "@babel/runtime" "^7.1.2" @@ -5528,16 +5524,9 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -history@^5.0.0: - version "5.3.0" - resolved "https://registry.npmjs.org/history/-/history-5.3.0.tgz" - integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== - dependencies: - "@babel/runtime" "^7.7.6" - hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" @@ -5546,33 +5535,33 @@ hmac-drbg@^1.0.1: hoist-non-react-statics@^3.1.0: version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + resolved "https://registry.npmjs.org/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.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" hpack.js@^2.1.6: version "2.1.6" - resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" @@ -5582,17 +5571,17 @@ hpack.js@^2.1.6: html-entities@^1.3.1: version "1.4.0" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-entities@^2.1.0: version "2.3.3" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-loader@^1.1.0: version "1.3.2" - resolved "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz" + resolved "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340" integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA== dependencies: html-minifier-terser "^5.1.1" @@ -5602,7 +5591,7 @@ html-loader@^1.1.0: html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== dependencies: camel-case "^4.1.1" @@ -5615,7 +5604,7 @@ html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: html-webpack-plugin@^4.0.4: version "4.5.2" - resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== dependencies: "@types/html-minifier-terser" "^5.0.0" @@ -5630,7 +5619,7 @@ html-webpack-plugin@^4.0.4: htmlparser2@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== dependencies: domelementtype "^2.0.1" @@ -5640,7 +5629,7 @@ htmlparser2@^4.1.0: htmlparser2@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -5650,22 +5639,22 @@ htmlparser2@^6.1.0: http-cache-semantics@3.8.1: version "3.8.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -5676,7 +5665,7 @@ http-errors@2.0.0: http-errors@~1.6.2: version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" @@ -5686,12 +5675,12 @@ http-errors@~1.6.2: http-parser-js@>=0.5.1: version "0.5.8" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -5700,7 +5689,7 @@ http-proxy-agent@^5.0.0: http-proxy-middleware@0.19.1: version "0.19.1" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== dependencies: http-proxy "^1.17.0" @@ -5710,7 +5699,7 @@ http-proxy-middleware@0.19.1: http-proxy@^1.17.0: version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" @@ -5719,7 +5708,7 @@ http-proxy@^1.17.0: http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: quick-lru "^5.1.1" @@ -5727,12 +5716,12 @@ http2-wrapper@^1.0.0-beta.5.2: https-browserify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -5740,14 +5729,14 @@ https-proxy-agent@^5.0.0: humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-corefoundation@^1.1.7: version "1.1.7" - resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz" + resolved "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a" integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== dependencies: cli-truncate "^2.1.0" @@ -5755,48 +5744,43 @@ iconv-corefoundation@^1.1.7: iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== dependencies: postcss "^7.0.14" ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== iferr@^0.1.5: version "0.1.5" - resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" + resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== immutable@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + version "4.3.0" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz#eb1738f14ffb39fd068b1dbe1296117484dd34be" + integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== import-local@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" + resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: pkg-dir "^3.0.0" @@ -5804,22 +5788,22 @@ import-local@^2.0.0: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -5827,59 +5811,54 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== inherits@2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-ip@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz" + resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== dependencies: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" "internmap@1 - 2": version "2.0.3" - resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== into-stream@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== dependencies: from2 "^2.1.1" @@ -5887,37 +5866,37 @@ into-stream@^3.1.0: invert-kv@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== ip-regex@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== ip@^1.1.0, ip@^1.1.5: version "1.1.8" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== ip@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-absolute-url@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== is-absolute@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: is-relative "^1.0.0" @@ -5925,60 +5904,69 @@ is-absolute@^1.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arguments@^1.0.4: version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -5986,59 +5974,52 @@ is-boolean-object@^1.1.0: is-buffer@^1.1.5: version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.5" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.5.tgz" - integrity sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-descriptor@^0.1.0: version "0.1.6" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" @@ -6047,7 +6028,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" @@ -6056,168 +6037,145 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-natural-number@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== is-negated-glob@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-object@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== is-path-cwd@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-in-cwd@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== dependencies: is-path-inside "^2.1.0" is-path-inside@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-obj@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-regex@^1.0.4, is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -6225,138 +6183,144 @@ is-regex@^1.0.4, is-regex@^1.1.4: is-relative@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: is-unc-path "^1.0.0" is-retry-allowed@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" is-unc-path@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: unc-path-regex "^0.1.2" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== is-valid-glob@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isbinaryfile@^3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== dependencies: buffer-alloc "^1.2.0" isbinaryfile@^4.0.10: version "4.0.10" - resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isurl@^1.0.0-alpha5: version "1.0.0" - resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" + resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" @@ -6364,7 +6328,7 @@ isurl@^1.0.0-alpha5: jake@^10.8.5: version "10.8.5" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== dependencies: async "^3.2.3" @@ -6374,7 +6338,7 @@ jake@^10.8.5: jest-worker@^25.4.0: version "25.5.0" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== dependencies: merge-stream "^2.0.0" @@ -6382,12 +6346,12 @@ jest-worker@^25.4.0: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -6395,87 +6359,87 @@ js-yaml@^3.13.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-bigint@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" + resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== dependencies: bignumber.js "^9.0.0" json-buffer@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json2mq@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz" + resolved "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== dependencies: string-convert "^0.2.0" json5@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" -json5@^2.1.0, json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.1.0, json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1, jsonfile@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -6484,113 +6448,106 @@ jsonfile@^6.0.1, jsonfile@^6.1.0: just-debounce@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz" + resolved "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz#2f81a3ad4121a76bc7cb45dbf704c0d76a8e5ddf" integrity sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ== keyv@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== dependencies: json-buffer "3.0.0" keyv@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: json-buffer "3.0.0" keyv@^4.0.0: version "4.5.2" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== dependencies: json-buffer "3.0.1" killable@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz" + resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + resolved "https://registry.npmjs.org/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: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klona@^2.0.4: - version "2.0.5" - resolved "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + version "2.0.6" + resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== kuler@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== last-run@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz" + resolved "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" integrity sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ== dependencies: default-resolution "^2.0.0" es6-weak-map "^2.0.1" -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazy-val@^1.0.4, lazy-val@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" + resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== lazystream@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== dependencies: readable-stream "^2.0.5" lcid@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== dependencies: invert-kv "^1.0.0" lead@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz" + resolved "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== dependencies: flush-write-stream "^1.0.2" liftoff@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz" + resolved "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== dependencies: extend "^3.0.0" @@ -6604,7 +6561,7 @@ liftoff@^3.1.0: load-json-file@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== dependencies: graceful-fs "^4.1.2" @@ -6615,31 +6572,22 @@ load-json-file@^1.0.0: loader-runner@^2.4.0: version "2.4.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0, loader-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/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" -loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== +loader-utils@^2.0.0, loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -6647,7 +6595,7 @@ loader-utils@^2.0.0: locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" @@ -6655,144 +6603,136 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash-es@^4.17.15: version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.isequal@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.2.0: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" logform@^2.3.2, logform@^2.4.0: - version "2.4.2" - resolved "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz" - integrity sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw== + version "2.5.1" + resolved "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" + integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== dependencies: "@colors/colors" "1.5.0" + "@types/triple-beam" "^1.3.2" fecha "^4.2.0" ms "^2.1.1" safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" loglevel@^1.6.8: - version "1.8.0" - resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" - integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + version "1.8.1" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" + integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lowercase-keys@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - -lzma-native@^8.0.5: - version "8.0.6" - resolved "https://registry.npmjs.org/lzma-native/-/lzma-native-8.0.6.tgz" - integrity sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA== - dependencies: - node-addon-api "^3.1.0" - node-gyp-build "^4.2.1" - readable-stream "^3.6.0" + version "7.18.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== make-dir@^1.0.0: version "1.3.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-fetch-happen@^10.0.3: version "10.2.1" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" @@ -6814,26 +6754,26 @@ make-fetch-happen@^10.0.3: make-iterator@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" + resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== dependencies: kind-of "^6.0.2" map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" matchdep@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz" + resolved "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" integrity sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA== dependencies: findup-sync "^2.0.0" @@ -6843,19 +6783,19 @@ matchdep@^2.0.0: matcher@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" + resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== dependencies: escape-string-regexp "^4.0.0" material-colors@^1.2.1: version "1.2.6" - resolved "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz" + resolved "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== md5.js@^1.3.4: version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" @@ -6864,17 +6804,12 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - memory-fs@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" @@ -6882,7 +6817,7 @@ memory-fs@^0.4.1: memory-fs@^0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== dependencies: errno "^0.1.3" @@ -6890,27 +6825,27 @@ memory-fs@^0.5.0: merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== microevent.ts@~0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz" + resolved "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" @@ -6929,7 +6864,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: micromatch@^4.0.0: version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -6937,7 +6872,7 @@ micromatch@^4.0.0: miller-rabin@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" @@ -6945,52 +6880,44 @@ miller-rabin@^4.0.0: mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4, mime@^2.5.2: version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" - mini-css-extract-plugin@^0.9.0: version "0.9.0" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== dependencies: loader-utils "^1.1.0" @@ -7000,50 +6927,50 @@ mini-css-extract-plugin@^0.9.0: minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^2.0.3: version "2.1.2" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" @@ -7054,49 +6981,40 @@ minipass-fetch@^2.0.3: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minipass@^3.1.6: +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz" - integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== - dependencies: - yallist "^4.0.0" +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -7104,7 +7022,7 @@ minizlib@^2.1.1, minizlib@^2.1.2: mississippi@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" @@ -7120,7 +7038,7 @@ mississippi@^3.0.0: mixin-deep@^1.2.0: version "1.3.2" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" @@ -7128,24 +7046,24 @@ mixin-deep@^1.2.0: mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.6: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== moment@^2.24.0, moment@^2.29.2: version "2.29.4" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== move-concurrently@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" + resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" @@ -7157,27 +7075,27 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns-service-types@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" + resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== multicast-dns@^6.0.1: version "6.2.3" - resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== dependencies: dns-packet "^1.3.1" @@ -7185,17 +7103,17 @@ multicast-dns@^6.0.1: mute-stdout@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" + resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== nan@^2.12.1: - version "2.16.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + version "2.17.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== nanomatch@^1.2.9: version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" @@ -7212,70 +7130,70 @@ nanomatch@^1.2.9: negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== next-tick@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" node-abi@^3.0.0: - version "3.30.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz" - integrity sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw== + version "3.40.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.40.0.tgz#51d8ed44534f70ff1357dfbc3a89717b1ceac1b4" + integrity sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA== dependencies: semver "^7.3.5" node-addon-api@^1.6.3: version "1.7.2" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== -node-addon-api@^3.0.0, node-addon-api@^3.1.0: +node-addon-api@^3.0.0: version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-api-version@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz" + resolved "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080" integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g== dependencies: semver "^7.3.5" node-forge@^0.10.0: version "0.10.0" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-gyp-build@^4.2.1: - version "4.5.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + version "4.6.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== node-gyp@^9.0.0: - version "9.3.0" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz" - integrity sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q== + version "9.3.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== dependencies: env-paths "^2.2.0" glob "^7.1.4" @@ -7290,7 +7208,7 @@ node-gyp@^9.0.0: node-libs-browser@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" @@ -7319,24 +7237,24 @@ node-libs-browser@^2.2.1: node-loader@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/node-loader/-/node-loader-0.6.0.tgz" + resolved "https://registry.npmjs.org/node-loader/-/node-loader-0.6.0.tgz#c797ef51095ed5859902b157f6384f6361e05ae8" integrity sha512-WlUacqHqHWb383Mec656pJmAtg7EXBcijg1sovgy0tI4xevAzv8RqcRARTMlzm0HLXzy1Pdo/DMU19/fxoMnmA== -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== nopt@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: abbrev "^1.0.0" normalize-package-data@^2.3.2: version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -7346,19 +7264,19 @@ normalize-package-data@^2.3.2: normalize-path@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@1.9.1, normalize-url@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" integrity sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ== dependencies: object-assign "^4.0.1" @@ -7368,7 +7286,7 @@ normalize-url@1.9.1, normalize-url@^1.9.1: normalize-url@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== dependencies: prepend-http "^2.0.0" @@ -7377,24 +7295,24 @@ normalize-url@2.0.1: normalize-url@^4.1.0: version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== now-and-later@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz" + resolved "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== dependencies: once "^1.3.2" npm-conf@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" + resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== dependencies: config-chain "^1.1.11" @@ -7402,14 +7320,14 @@ npm-conf@^1.1.3: npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -7419,38 +7337,38 @@ npmlog@^6.0.0: nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.0.1: version "1.1.5" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: call-bind "^1.0.2" @@ -7458,19 +7376,19 @@ object-is@^1.0.1: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -7480,7 +7398,7 @@ object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.4: object.defaults@^1.0.0, object.defaults@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" + resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== dependencies: array-each "^1.0.1" @@ -7489,18 +7407,19 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: isobject "^3.0.0" object.getownpropertydescriptors@^2.0.3: - version "2.1.4" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + version "2.1.6" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" + integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== dependencies: - array.prototype.reduce "^1.0.4" + array.prototype.reduce "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" + define-properties "^1.2.0" + es-abstract "^1.21.2" + safe-array-concat "^1.0.0" object.map@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" + resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== dependencies: for-own "^1.0.0" @@ -7508,14 +7427,14 @@ object.map@^1.0.0: object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" object.reduce@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz" + resolved "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" integrity sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw== dependencies: for-own "^1.0.0" @@ -7523,52 +7442,52 @@ object.reduce@^1.0.0: obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onetime@^5.1.0: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" opn@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" + resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: is-wsl "^1.1.0" ora@^5.1.0: version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -7583,146 +7502,136 @@ ora@^5.1.0: ordered-read-streams@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz" + resolved "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== dependencies: readable-stream "^2.0.1" os-browserify@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== os-locale@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== dependencies: lcid "^1.0.0" p-cancelable@^0.4.0: version "0.4.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== p-cancelable@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== p-cancelable@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-event@^2.1.0: version "2.3.1" - resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" + resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== dependencies: p-timeout "^2.0.1" p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-is-promise@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-map@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" + resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-retry@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== dependencies: retry "^0.12.0" p-timeout@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== dependencies: p-finally "^1.0.0" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - pako@~1.0.5: version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" + resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: cyclist "^1.0.1" @@ -7731,7 +7640,7 @@ parallel-transform@^1.1.0: param-case@^3.0.3: version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -7739,7 +7648,7 @@ param-case@^3.0.3: parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: asn1.js "^5.2.0" @@ -7750,7 +7659,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: parse-filepath@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" + resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== dependencies: is-absolute "^1.0.0" @@ -7759,29 +7668,29 @@ parse-filepath@^1.0.1: parse-json@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: error-ex "^1.2.0" parse-node-version@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -7789,88 +7698,88 @@ pascal-case@^3.1.2: pascalcase@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-browserify@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-root-regex@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== path-root@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== dependencies: path-root-regex "^0.1.0" path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-to-regexp@^1.7.0: version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" path-type@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: graceful-fs "^4.1.2" @@ -7879,7 +7788,7 @@ path-type@^1.0.0: pbkdf2@^3.0.3: version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" @@ -7890,68 +7799,68 @@ pbkdf2@^3.0.3: pend@~1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picocolors@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0, pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pkg-dir@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" pkg-dir@^4.1.0: version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" plist@^3.0.1, plist@^3.0.4: version "3.0.6" - resolved "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz" + resolved "https://registry.npmjs.org/plist/-/plist-3.0.6.tgz#7cfb68a856a7834bca6dbfe3218eb9c7740145d3" integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA== dependencies: base64-js "^1.5.1" @@ -7959,7 +7868,7 @@ plist@^3.0.1, plist@^3.0.4: plugin-error@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz" + resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== dependencies: ansi-colors "^1.0.1" @@ -7969,7 +7878,7 @@ plugin-error@^1.0.1: portfinder@^1.0.26: version "1.0.32" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== dependencies: async "^2.6.4" @@ -7978,19 +7887,19 @@ portfinder@^1.0.26: posix-character-classes@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-modules-extract-imports@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== dependencies: postcss "^7.0.5" postcss-modules-local-by-default@^3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: icss-utils "^4.1.1" @@ -8000,7 +7909,7 @@ postcss-modules-local-by-default@^3.0.2: postcss-modules-scope@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: postcss "^7.0.6" @@ -8008,33 +7917,33 @@ postcss-modules-scope@^2.2.0: postcss-modules-values@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: icss-utils "^4.0.0" postcss "^7.0.6" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.10" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + version "6.0.12" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz#2efae5ffab3c8bfb2b7fbf0c426e3bca616c4abb" + integrity sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-value-parser@^3.3.0: version "3.3.1" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== postcss-value-parser@^4.1.0: version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.39" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: picocolors "^0.2.1" @@ -8042,22 +7951,22 @@ postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: prepend-http@^1.0.0: version "1.0.4" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== prepend-http@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier@*: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-error@^2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz" + resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== dependencies: lodash "^4.17.20" @@ -8065,32 +7974,32 @@ pretty-error@^2.1.1: pretty-hrtime@^1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" + resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/process/-/process-0.11.10.tgz" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== progress@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -8098,7 +8007,7 @@ promise-retry@^2.0.1: prop-types@^15.5.10, prop-types@^15.6.2: version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -8107,12 +8016,12 @@ prop-types@^15.5.10, prop-types@^15.6.2: proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -8120,12 +8029,12 @@ proxy-addr@~2.0.7: prr@~1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== public-encrypt@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" @@ -8137,7 +8046,7 @@ public-encrypt@^4.0.0: pump@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" @@ -8145,7 +8054,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -8153,7 +8062,7 @@ pump@^3.0.0: pumpify@^1.3.3, pumpify@^1.3.5: version "1.5.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" @@ -8162,36 +8071,29 @@ pumpify@^1.3.3, pumpify@^1.3.5: punycode@1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^1.2.4: version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -qs@6.10.3: - version "6.10.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" query-string@^4.1.0: version "4.3.4" - resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz" + resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== dependencies: object-assign "^4.1.0" @@ -8199,7 +8101,7 @@ query-string@^4.1.0: query-string@^5.0.1: version "5.1.1" - resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== dependencies: decode-uri-component "^0.2.0" @@ -8208,34 +8110,34 @@ query-string@^5.0.1: querystring-es3@^0.2.0: version "0.2.1" - resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== querystring@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" @@ -8243,12 +8145,12 @@ randomfill@^1.0.3: range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.1: version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -8257,41 +8159,41 @@ raw-body@2.5.1: unpipe "1.0.0" rc-align@^4.0.0: - version "4.0.12" - resolved "https://registry.npmjs.org/rc-align/-/rc-align-4.0.12.tgz" - integrity sha512-3DuwSJp8iC/dgHzwreOQl52soj40LchlfUHtgACOUtwGuoFIOVh6n/sCpfqCU8kO5+iz6qR0YKvjgB8iPdE3aQ== + version "4.0.15" + resolved "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz#2bbd665cf85dfd0b0244c5a752b07565e9098577" + integrity sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" dom-align "^1.7.0" - lodash "^4.17.21" - rc-util "^5.3.0" + rc-util "^5.26.0" resize-observer-polyfill "^1.5.1" -rc-cascader@~3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.6.2.tgz" - integrity sha512-sf2otpazlROTzkD3nZVfIzXmfBLiEOBTXA5wxozGXBpS902McDpvF0bdcYBu5hN+rviEAm6Mh9cLXNQ1Ty8wKQ== +rc-cascader@~3.7.0: + version "3.7.2" + resolved "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.7.2.tgz#447f2725add7953dee205d1cf59f58a8317bf5f7" + integrity sha512-5nPEM76eMyikd0NFiy1gjwiB9m+bOzjY6Lnd5bVC6Ar3XLlOpOnlCcV3oBFWLN3f7B18tAGpaAVlT2uyEDCv9w== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" classnames "^2.3.1" rc-select "~14.1.0" - rc-tree "~5.6.3" + rc-tree "~5.7.0" rc-util "^5.6.1" -rc-checkbox@~2.3.0: - version "2.3.2" - resolved "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.3.2.tgz" - integrity sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg== +rc-checkbox@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.0.0.tgz#6b426d16c7d2ed9fee219a1dfb14d2c504a45300" + integrity sha512-tOEs1+wWDUei7DuP2EsJCZfam5vxMjKTCGcZdXVgsiOcNszc41Esycbo31P0/jFwUAPmd5oPYFWkcnFUCTLZxA== dependencies: "@babel/runtime" "^7.10.1" - classnames "^2.2.1" + classnames "^2.3.2" + rc-util "^5.25.2" -rc-collapse@~3.3.0: - version "3.3.1" - resolved "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.3.1.tgz" - integrity sha512-cOJfcSe3R8vocrF8T+PgaHDrgeA1tX+lwfhwSj60NX9QVRidsILIbRNDLD6nAzmcvVC5PWiIRiR4S1OobxdhCg== +rc-collapse@~3.4.2: + version "3.4.2" + resolved "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.4.2.tgz#1310be7ad4cd0dcfc622c45f6c3b5ffdee403ad7" + integrity sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -8299,29 +8201,31 @@ rc-collapse@~3.3.0: rc-util "^5.2.1" shallowequal "^1.1.0" -rc-dialog@~8.9.0: - version "8.9.0" - resolved "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.9.0.tgz" - integrity sha512-Cp0tbJnrvPchJfnwIvOMWmJ4yjX3HWFatO6oBFD1jx8QkgsQCR0p8nUWAKdd3seLJhEC39/v56kZaEjwp9muoQ== +rc-dialog@~9.0.0, rc-dialog@~9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.0.2.tgz#aadfebdeba145f256c1fac9b9f509f893cdbb5b8" + integrity sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg== dependencies: "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-8" classnames "^2.2.6" rc-motion "^2.3.0" rc-util "^5.21.0" -rc-drawer@~5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/rc-drawer/-/rc-drawer-5.1.0.tgz" - integrity sha512-pU3Tsn99pxGdYowXehzZbdDVE+4lDXSGb7p8vA9mSmr569oc2Izh4Zw5vLKSe/Xxn2p5MSNbLVqD4tz+pK6SOw== +rc-drawer@~6.1.0: + version "6.1.5" + resolved "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.1.5.tgz#c4137b944c16b7c179d0dba6f06ebe54f9311ec8" + integrity sha512-MDRomQXFi+tvDuwsRAddJ2Oy2ayLCZ29weMzp3rJFO9UNEVLEVV7nuyx5lEgNJIdM//tE6wWQV95cTUiMVqD6w== dependencies: "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-6" classnames "^2.2.6" rc-motion "^2.6.1" rc-util "^5.21.2" rc-dropdown@~4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz" + resolved "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz#f65d9d3d89750241057db59d5a75e43cd4576b68" integrity sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g== dependencies: "@babel/runtime" "^7.18.3" @@ -8330,108 +8234,109 @@ rc-dropdown@~4.0.0: rc-util "^5.17.0" rc-field-form@~1.27.0: - version "1.27.1" - resolved "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.27.1.tgz" - integrity sha512-RShegnwFu6TH8tl2olCxn+B4Wyh5EiQH8c/7wucbkLNyue05YiH5gomUAg1vbZjp71yFKwegClctsEG5CNBWAA== + version "1.27.4" + resolved "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.27.4.tgz#53600714af5b28c226c70d34867a8c52ccd64d44" + integrity sha512-PQColQnZimGKArnOh8V2907+VzDCXcqtFvHgevDLtqWc/P7YASb/FqntSmdS8q3VND5SHX3Y1vgMIzY22/f/0Q== dependencies: "@babel/runtime" "^7.18.0" async-validator "^4.1.0" rc-util "^5.8.0" -rc-image@~5.7.0: - version "5.7.1" - resolved "https://registry.npmjs.org/rc-image/-/rc-image-5.7.1.tgz" - integrity sha512-QyMfdhoUfb5W14plqXSisaYwpdstcLYnB0MjX5ccIK2rydQM9sDPuekQWu500DDGR2dBaIF5vx9XbWkNFK17Fg== +rc-image@~5.13.0: + version "5.13.0" + resolved "https://registry.npmjs.org/rc-image/-/rc-image-5.13.0.tgz#1ed9b852a40b5eff34786ba7d2f0e9d26eeab874" + integrity sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg== dependencies: "@babel/runtime" "^7.11.2" + "@rc-component/portal" "^1.0.2" classnames "^2.2.6" - rc-dialog "~8.9.0" + rc-dialog "~9.0.0" + rc-motion "^2.6.2" rc-util "^5.0.6" -rc-input-number@~7.3.5: - version "7.3.7" - resolved "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.7.tgz" - integrity sha512-W9jDwfhJyNjg0iZX401r0GctTGX4ETURzF6SisC42GR0AkJxtaPD89eGwbTdAudUjEx0Pkn2rGmfvVGGdQACKA== +rc-input-number@~7.3.9: + version "7.3.11" + resolved "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.11.tgz#c7089705a220e1a59ba974fabf89693e00dd2442" + integrity sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" rc-util "^5.23.0" -rc-input@~0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/rc-input/-/rc-input-0.1.2.tgz" - integrity sha512-ZPmwcFspgfYpUfbSx3KnLk9gImBcLOrlQCr4oTJ4jBoIXgJLTfm26yelzRgBJewhkvD8uJbgX0sQ/yOzuOHnJg== +rc-input@~0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/rc-input/-/rc-input-0.1.4.tgz#45cb4ba209ae6cc835a2acb8629d4f8f0cb347e0" + integrity sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-util "^5.18.1" -rc-mentions@~1.9.1: - version "1.9.2" - resolved "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.9.2.tgz" - integrity sha512-uxb/lzNnEGmvraKWNGE6KXMVXvt8RQv9XW8R0Dqi3hYsyPiAZeHRCHQKdLARuk5YBhFhZ6ga55D/8XuY367g3g== +rc-mentions@~1.13.1: + version "1.13.1" + resolved "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.13.1.tgz#c884b70e1505a197f1b32a7c6b39090db6992a72" + integrity sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" - rc-menu "~9.6.0" - rc-textarea "^0.3.0" + rc-menu "~9.8.0" + rc-textarea "^0.4.0" rc-trigger "^5.0.4" rc-util "^5.22.5" -rc-menu@~9.6.0, rc-menu@~9.6.3: - version "9.6.4" - resolved "https://registry.npmjs.org/rc-menu/-/rc-menu-9.6.4.tgz" - integrity sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw== +rc-menu@~9.8.0: + version "9.8.4" + resolved "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz#58bf19d471e3c74ff4bcfdb0f02a3826ebe2553b" + integrity sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.4.3" - rc-overflow "^1.2.0" + rc-overflow "^1.2.8" rc-trigger "^5.1.2" - rc-util "^5.12.0" - shallowequal "^1.1.0" + rc-util "^5.27.0" rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/rc-motion/-/rc-motion-2.6.2.tgz" - integrity sha512-4w1FaX3dtV749P8GwfS4fYnFG4Rb9pxvCYPc/b2fw1cmlHJWNNgOFIz7ysiD+eOrzJSvnLJWlNQQncpNMXwwpg== + version "2.7.3" + resolved "https://registry.npmjs.org/rc-motion/-/rc-motion-2.7.3.tgz#126155bb3e687174fb3b92fddade2835c963b04d" + integrity sha512-2xUvo8yGHdOHeQbdI8BtBsCIrWKchEmFEIskf0nmHtJsou+meLd/JE+vnvSX2JxcBrJtXY2LuBpxAOxrbY/wMQ== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-util "^5.21.0" rc-notification@~4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/rc-notification/-/rc-notification-4.6.0.tgz" - integrity sha512-xF3MKgIoynzjQAO4lqsoraiFo3UXNYlBfpHs0VWvwF+4pimen9/H1DYLN2mfRWhHovW6gRpla73m2nmyIqAMZQ== + version "4.6.1" + resolved "https://registry.npmjs.org/rc-notification/-/rc-notification-4.6.1.tgz#068e8674f4bd7926a447eca512915d4b41b15c91" + integrity sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.2.0" rc-util "^5.20.1" -rc-overflow@^1.0.0, rc-overflow@^1.2.0: - version "1.2.8" - resolved "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.2.8.tgz" - integrity sha512-QJ0UItckWPQ37ZL1dMEBAdY1dhfTXFL9k6oTTcyydVwoUNMnMqCGqnRNA98axSr/OeDKqR6DVFyi8eA5RQI/uQ== +rc-overflow@^1.0.0, rc-overflow@^1.2.8: + version "1.3.0" + resolved "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.0.tgz#964f7db14aab611c3047788d3b8ee472732fee09" + integrity sha512-p2Qt4SWPTHAYl4oAao1THy669Fm5q8pYBDBHRaFOekCvcdcrgIx0ByXQMEkyPm8wUDX4BK6aARWecvCRc/7CTA== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-resize-observer "^1.0.0" rc-util "^5.19.2" -rc-pagination@~3.1.17: - version "3.1.17" - resolved "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.1.17.tgz" - integrity sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ== +rc-pagination@~3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.2.0.tgz#4f2fdba9fdac0f48e5c9fb1141973818138af7e1" + integrity sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" -rc-picker@~2.6.10: - version "2.6.10" - resolved "https://registry.npmjs.org/rc-picker/-/rc-picker-2.6.10.tgz" - integrity sha512-9wYtw0DFWs9FO92Qh2D76P0iojUr8ZhLOtScUeOit6ks/F+TBLrOC1uze3IOu+u9gbDAjmosNWLKbBzx/Yuv2w== +rc-picker@~2.7.0: + version "2.7.2" + resolved "https://registry.npmjs.org/rc-picker/-/rc-picker-2.7.2.tgz#bf656ca274228c84b955dfaa7705738908cb900f" + integrity sha512-KbUKgbzgWVN5L+V9xhZDKSmseHIyFneBlmuMtMrZ9fU7Oypw6D+owS5kuUicIEV08Y17oXt8dUqauMeC5IFBPg== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" @@ -8442,10 +8347,10 @@ rc-picker@~2.6.10: rc-util "^5.4.0" shallowequal "^1.1.0" -rc-progress@~3.3.2: - version "3.3.3" - resolved "https://registry.npmjs.org/rc-progress/-/rc-progress-3.3.3.tgz" - integrity sha512-MDVNVHzGanYtRy2KKraEaWeZLri2ZHWIRyaE1a9MQ2MuJ09m+Wxj5cfcaoaR6z5iRpHpA59YeUxAlpML8N4PJw== +rc-progress@~3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.1.tgz#a9ffe099e88a4fc03afb09d8603162bf0760d743" + integrity sha512-eAFDHXlk8aWpoXl0llrenPMt9qKHQXphxcVsnKs0FHC6eCSk1ebJtyaVjJUzKe0233ogiLDeEFK1Uihz3s67hw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.6" @@ -8453,7 +8358,7 @@ rc-progress@~3.3.2: rc-rate@~2.9.0: version "2.9.2" - resolved "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.2.tgz" + resolved "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.2.tgz#4a58965d1ecf91896ebae01d458b59056df0b4ea" integrity sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g== dependencies: "@babel/runtime" "^7.10.1" @@ -8461,29 +8366,29 @@ rc-rate@~2.9.0: rc-util "^5.0.1" rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.2.0.tgz" - integrity sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ== + version "1.3.1" + resolved "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz#b61b9f27048001243617b81f95e53d7d7d7a6a3d" + integrity sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg== dependencies: - "@babel/runtime" "^7.10.1" + "@babel/runtime" "^7.20.7" classnames "^2.2.1" - rc-util "^5.15.0" + rc-util "^5.27.0" resize-observer-polyfill "^1.5.1" rc-segmented@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.1.0.tgz" - integrity sha512-hUlonro+pYoZcwrH6Vm56B2ftLfQh046hrwif/VwLIw1j3zGt52p5mREBwmeVzXnSwgnagpOpfafspzs1asjGw== + version "2.1.2" + resolved "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.1.2.tgz#14c9077a1dae9c2ccb2ef5fbc5662c1c48c7ce8e" + integrity sha512-qGo1bCr83ESXpXVOCXjFe1QJlCAQXyi9KCiy8eX3rIMYlTeJr/ftySIaTnYsitL18SvWf5ZEHsfqIWoX0EMfFQ== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-motion "^2.4.4" rc-util "^5.17.0" -rc-select@~14.1.0, rc-select@~14.1.1: - version "14.1.11" - resolved "https://registry.npmjs.org/rc-select/-/rc-select-14.1.11.tgz" - integrity sha512-3UI781eaTg/V4BEc8rLk1i2BQmO+n0sOsi3RKcV2EkHu2ErjTlg/1SOixllnWTWcH02oizvdvALZ1nvZulin9A== +rc-select@~14.1.0, rc-select@~14.1.17: + version "14.1.17" + resolved "https://registry.npmjs.org/rc-select/-/rc-select-14.1.17.tgz#e623eabeaa0dd117d5a63354e6ddaaa118abc5ee" + integrity sha512-6qQhMqtoUkkboRqXKKFRR5Nu1mrnw2mC1uxIBIczg7aiJ94qCZBg4Ww8OLT9f4xdyCgbFSGh6r3yB9EBsjoHGA== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -8495,7 +8400,7 @@ rc-select@~14.1.0, rc-select@~14.1.1: rc-slider@~10.0.0: version "10.0.1" - resolved "https://registry.npmjs.org/rc-slider/-/rc-slider-10.0.1.tgz" + resolved "https://registry.npmjs.org/rc-slider/-/rc-slider-10.0.1.tgz#7058c68ff1e1aa4e7c3536e5e10128bdbccb87f9" integrity sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q== dependencies: "@babel/runtime" "^7.10.1" @@ -8503,18 +8408,18 @@ rc-slider@~10.0.0: rc-util "^5.18.1" shallowequal "^1.1.0" -rc-steps@~4.1.0: - version "4.1.4" - resolved "https://registry.npmjs.org/rc-steps/-/rc-steps-4.1.4.tgz" - integrity sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w== +rc-steps@~5.0.0-alpha.2: + version "5.0.0" + resolved "https://registry.npmjs.org/rc-steps/-/rc-steps-5.0.0.tgz#2e2403f2dd69eb3966d65f461f7e3a8ee1ef69fe" + integrity sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw== dependencies: - "@babel/runtime" "^7.10.2" + "@babel/runtime" "^7.16.7" classnames "^2.2.3" - rc-util "^5.0.1" + rc-util "^5.16.1" rc-switch@~3.2.0: version "3.2.2" - resolved "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz" + resolved "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8" integrity sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A== dependencies: "@babel/runtime" "^7.10.1" @@ -8523,7 +8428,7 @@ rc-switch@~3.2.0: rc-table@~7.26.0: version "7.26.0" - resolved "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz" + resolved "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz#9d517e7fa512e7571fdcc453eb1bf19edfac6fbc" integrity sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ== dependencies: "@babel/runtime" "^7.10.1" @@ -8532,54 +8437,54 @@ rc-table@~7.26.0: rc-util "^5.22.5" shallowequal "^1.1.0" -rc-tabs@~12.1.0-alpha.1: - version "12.1.0-alpha.1" - resolved "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.1.0-alpha.1.tgz" - integrity sha512-M+B88WEnGSuE+mR54fpgPbZLAakzxa/H6FmEetLBl5WG4I3AcwSk9amuIPC/tu0KXBl+H6Bg5ZwrrEUOBUvgzg== +rc-tabs@~12.5.6: + version "12.5.10" + resolved "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.5.10.tgz#0e41c723fac66c4f0bcad3271429fff6653b0721" + integrity sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ== dependencies: "@babel/runtime" "^7.11.2" classnames "2.x" rc-dropdown "~4.0.0" - rc-menu "~9.6.0" + rc-menu "~9.8.0" rc-motion "^2.6.2" rc-resize-observer "^1.0.0" - rc-util "^5.5.0" + rc-util "^5.16.0" -rc-textarea@^0.3.0, rc-textarea@~0.3.0: - version "0.3.7" - resolved "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.3.7.tgz" - integrity sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw== +rc-textarea@^0.4.0, rc-textarea@~0.4.5: + version "0.4.7" + resolved "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.4.7.tgz#627f662d46f99e0059d1c1ebc8db40c65339fe90" + integrity sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" rc-resize-observer "^1.0.0" - rc-util "^5.7.0" + rc-util "^5.24.4" shallowequal "^1.1.0" rc-tooltip@~5.2.0: version "5.2.2" - resolved "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.2.2.tgz" + resolved "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.2.2.tgz#e5cafa8ecebf78108936a0bcb93c150fa81ac93b" integrity sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg== dependencies: "@babel/runtime" "^7.11.2" classnames "^2.3.1" rc-trigger "^5.0.0" -rc-tree-select@~5.4.0: - version "5.4.1" - resolved "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.4.1.tgz" - integrity sha512-xhXnKP8Stu2Q7wTcjJaSzSOLd4wmFtUZOwmy1cioaWyPbpiKlYdnALXA/9U49HOaV3KFXdRHE9Yi0KYED7yOAQ== +rc-tree-select@~5.5.0: + version "5.5.5" + resolved "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.5.5.tgz#d28b3b45da1e820cd21762ba0ee93c19429bb369" + integrity sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-select "~14.1.0" - rc-tree "~5.6.1" + rc-tree "~5.7.0" rc-util "^5.16.1" -rc-tree@~5.6.1, rc-tree@~5.6.3, rc-tree@~5.6.5: - version "5.6.7" - resolved "https://registry.npmjs.org/rc-tree/-/rc-tree-5.6.7.tgz" - integrity sha512-LcvI8YciaBcPpsroi3qUR0hU3qMWAwtD/5SQuT4HcmMbVYM4281Xptav0Bq+7KUf2t1WhrqLhhtzrIlft+4tvw== +rc-tree@~5.7.0: + version "5.7.3" + resolved "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.3.tgz#5da576ba87039486d59092eb4490831690b8b3b5" + integrity sha512-Oql2S9+ZmT+mfTp5SNo1XM0QvkENjc0mPRFsHWRFSPuKird0OYMZZKmLznUJ+0aGDeFFWN42wiUZJtMFhrLgLw== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -8588,9 +8493,9 @@ rc-tree@~5.6.1, rc-tree@~5.6.3, rc-tree@~5.6.5: rc-virtual-list "^3.4.8" rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10, rc-trigger@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.1.tgz" - integrity sha512-5gaFbDkYSefZ14j2AdzucXzlWgU2ri5uEjkHvsf1ynRhdJbKxNOnw4PBZ9+FVULNGFiDzzlVF8RJnR9P/xrnKQ== + version "5.3.4" + resolved "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.4.tgz#6b4b26e32825677c837d1eb4d7085035eecf9a61" + integrity sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw== dependencies: "@babel/runtime" "^7.18.3" classnames "^2.2.6" @@ -8600,44 +8505,34 @@ rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10, rc- rc-upload@~4.3.0: version "4.3.4" - resolved "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.4.tgz" + resolved "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.4.tgz#83ff7d3867631c37adbfd72ea3d1fd7e97ca84af" integrity sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ== dependencies: "@babel/runtime" "^7.18.3" classnames "^2.2.5" rc-util "^5.2.0" -rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.12.0, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.21.2, rc-util@^5.22.5, rc-util@^5.23.0, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4: - version "5.24.2" - resolved "https://registry.npmjs.org/rc-util/-/rc-util-5.24.2.tgz" - integrity sha512-MWd0ZEV7xSwN4HM9jz9BwpnMzwCPjYJ7K90lePsrdgAkrmm8U7b4BOTIsv/84BQsaF7N3ejNkcrZ3AfEwc9HXA== +rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.21.2, rc-util@^5.22.5, rc-util@^5.23.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.26.0, rc-util@^5.27.0, rc-util@^5.4.0, rc-util@^5.6.1, rc-util@^5.8.0, rc-util@^5.9.4: + version "5.30.0" + resolved "https://registry.npmjs.org/rc-util/-/rc-util-5.30.0.tgz#76ae9019ff72a5b519ce51465cd77b2e451207e3" + integrity sha512-uaWpF/CZGyXuhQG71MWxkU+0bWkPEgqZUxEv251Cu7p3kpHDNm5+Ygu/U8ux0a/zbfGW8PsKcJL0XVBOMrlIZg== dependencies: "@babel/runtime" "^7.18.3" react-is "^16.12.0" - shallowequal "^1.1.0" rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.8: - version "3.4.8" - resolved "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.4.8.tgz" - integrity sha512-qSN+Rv4i/E7RCTvTMr1uZo7f3crJJg/5DekoCagydo9zsXrxj07zsFSxqizqW+ldGA16lwa8So/bIbV9Ofjddg== + version "3.4.13" + resolved "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.4.13.tgz#20acc934b263abcf7b7c161f50ef82281b2f7e8d" + integrity sha512-cPOVDmcNM7rH6ANotanMDilW/55XnFPw0Jh/GQYtrzZSy3AmWvCnqVNyNC/pgg3lfVmX2994dlzAhuUrd4jG7w== dependencies: + "@babel/runtime" "^7.20.0" classnames "^2.2.6" rc-resize-observer "^1.0.0" rc-util "^5.15.0" -rc@1.2.8, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-color@^2.19.3: version "2.19.3" - resolved "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz" + resolved "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" integrity sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA== dependencies: "@icons/material" "^0.2.4" @@ -8650,7 +8545,7 @@ react-color@^2.19.3: react-dom@^18.1.0: version "18.2.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" @@ -8658,66 +8553,65 @@ react-dom@^18.1.0: react-is@^16.10.2, react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-lifecycles-compat@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" + resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-refresh@^0.13.0: version "0.13.0" - resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz#cbd01a4482a177a5da8d44c9755ebb1f26d5a1c1" integrity sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg== -react-resize-detector@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz" - integrity sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw== +react-resize-detector@^8.0.4: + version "8.1.0" + resolved "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz#1c7817db8bc886e2dbd3fbe3b26ea8e56be0524a" + integrity sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w== dependencies: lodash "^4.17.21" react-router-dom@^5.2.0: - version "5.3.3" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.3.tgz" - integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== + version "5.3.4" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.3.3" + react-router "5.3.4" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.3: - version "5.3.3" - resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.3.tgz" - integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== +react-router@5.3.4: + version "5.3.4" + resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" path-to-regexp "^1.7.0" prop-types "^15.6.2" react-is "^16.6.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-smooth@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.1.tgz" - integrity sha512-Own9TA0GPPf3as4vSwFhDouVfXP15ie/wIHklhyKBH5AN6NFtdk0UpHBnonV11BtqDkAWlt40MOUc+5srmW7NA== +react-smooth@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.2.tgz#0ef24213628cb13bf4305194a050e1db4302a3a1" + integrity sha512-pgqSp1q8rAGtF1bXQE0m3CHGLNfZZh5oA5o1tsPLXRHnKtkujMIJ8Ws5nO1mTySZf1c4vgwlEk+pHi3Ln6eYLw== dependencies: - fast-equals "^2.0.0" + fast-equals "^4.0.3" react-transition-group "2.9.0" react-transition-group@2.9.0: version "2.9.0" - resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== dependencies: dom-helpers "^3.4.0" @@ -8727,21 +8621,21 @@ react-transition-group@2.9.0: react@^18.1.0: version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" reactcss@^1.2.0: version "1.2.3" - resolved "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz" + resolved "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== dependencies: lodash "^4.0.1" read-config-file@6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz" + resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz#71536072330bcd62ba814f91458b12add9fc7ade" integrity sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg== dependencies: dotenv "^9.0.2" @@ -8752,7 +8646,7 @@ read-config-file@6.2.0: read-config-file@~4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-4.0.1.tgz" + resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-4.0.1.tgz#ece5f6b1a5e6a46d0d93fdd0339f2f60ab892776" integrity sha512-5caED3uo2IAZMPcbh/9hx/O29s2430RLxtnFDdzxpH/epEpawOrQnGBHueotIXUrGPPIgdNQN+S/CIp2WmiSfw== dependencies: ajv "^6.10.1" @@ -8766,7 +8660,7 @@ read-config-file@~4.0.1: read-pkg-up@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== dependencies: find-up "^1.0.0" @@ -8774,7 +8668,7 @@ read-pkg-up@^1.0.1: read-pkg@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== dependencies: load-json-file "^1.0.0" @@ -8782,9 +8676,9 @@ read-pkg@^1.0.0: 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.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8795,9 +8689,9 @@ read-pkg@^1.0.0: util-deprecate "~1.0.1" "readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -8805,7 +8699,7 @@ read-pkg@^1.0.0: readdirp@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" @@ -8814,48 +8708,43 @@ readdirp@^2.2.1: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" recharts-scale@^0.4.4: version "0.4.5" - resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz" + resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz#0969271f14e732e642fcc5bd4ab270d6e87dd1d9" integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== dependencies: decimal.js-light "^2.4.1" recharts@^2.1.13: - version "2.1.14" - resolved "https://registry.npmjs.org/recharts/-/recharts-2.1.14.tgz" - integrity sha512-GDmDDPEmRhGb6O41OfJUKh/RFYh3QMtEdaNuXOnVtJN8wiifo41MvIHHzrjf7Vp7/yJYFsGaXnCElzM5H7SPmQ== + version "2.5.0" + resolved "https://registry.npmjs.org/recharts/-/recharts-2.5.0.tgz#34452852509099502690f9d2a72bde1d4cd65648" + integrity sha512-0EQYz3iA18r1Uq8VqGZ4dABW52AKBnio37kJgnztIqprELJXpOEsa0SzkqU1vjAhpCXCv52Dx1hiL9119xsqsQ== dependencies: - "@types/d3-interpolate" "^3.0.1" - "@types/d3-scale" "^4.0.2" - "@types/d3-shape" "^3.1.0" classnames "^2.2.5" - d3-interpolate "^3.0.1" - d3-scale "^4.0.2" - d3-shape "^3.1.0" eventemitter3 "^4.0.1" lodash "^4.17.19" react-is "^16.10.2" - react-resize-detector "^7.1.2" - react-smooth "^2.0.1" + react-resize-detector "^8.0.4" + react-smooth "^2.0.2" recharts-scale "^0.4.4" reduce-css-calc "^2.1.8" + victory-vendor "^36.6.8" rechoir@^0.6.2: version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" reduce-css-calc@^2.1.8: version "2.1.8" - resolved "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz" + resolved "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== dependencies: css-unit-converter "^1.1.1" @@ -8863,7 +8752,7 @@ reduce-css-calc@^2.1.8: "ref-napi@^2.0.1 || ^3.0.2", ref-napi@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/ref-napi/-/ref-napi-3.0.3.tgz" + resolved "https://registry.npmjs.org/ref-napi/-/ref-napi-3.0.3.tgz#e259bfc2bbafb3e169e8cd9ba49037dd00396b22" integrity sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA== dependencies: debug "^4.1.1" @@ -8873,98 +8762,79 @@ reduce-css-calc@^2.1.8: ref-struct-di@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz" + resolved "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz#5827b1d3b32372058f177547093db1fe1602dc10" integrity sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g== dependencies: debug "^3.1.0" -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + version "1.5.0" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" -regexpu-core@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz" - integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" + unicode-match-property-value-ecmascript "^2.1.0" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remove-bom-buffer@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz" + resolved "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== dependencies: is-buffer "^1.1.5" @@ -8972,7 +8842,7 @@ remove-bom-buffer@^3.0.0: remove-bom-stream@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz" + resolved "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== dependencies: remove-bom-buffer "^3.0.0" @@ -8981,12 +8851,12 @@ remove-bom-stream@^1.2.0: remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== renderkid@^2.0.4: version "2.0.7" - resolved "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz" + resolved "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== dependencies: css-select "^4.1.3" @@ -8997,22 +8867,22 @@ renderkid@^2.0.4: repeat-element@^1.1.2: version "1.1.4" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== replace-ext@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== replace-homedir@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz" + resolved "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" integrity sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg== dependencies: homedir-polyfill "^1.0.1" @@ -9021,44 +8891,44 @@ replace-homedir@^1.0.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-main-filename@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resize-observer-polyfill@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-alpn@^1.0.0: version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-cwd@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg== dependencies: resolve-from "^3.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" @@ -9066,52 +8936,52 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: resolve-from@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-options@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz" + resolved "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== dependencies: value-or-function "^3.0.0" resolve-pathname@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve-url@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.4.0: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.2" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@1.0.2, responselike@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" responselike@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -9119,31 +8989,31 @@ restore-cursor@^3.1.0: ret@~0.1.10: version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.12.0: version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" @@ -9151,7 +9021,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: roarr@^2.15.3: version "2.15.4" - resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" + resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== dependencies: boolean "^3.0.1" @@ -9163,48 +9033,67 @@ roarr@^2.15.3: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" + resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.1, safe-buffer@>=5.1.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: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" safe-stable-stringify@^2.3.1: - version "2.4.1" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.1.tgz" - integrity sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA== + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-filename@^1.6.3: version "1.6.3" - resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== dependencies: truncate-utf8-bytes "^1.0.0" sass-loader@~10.2.1: version "10.2.1" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.1.tgz" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-10.2.1.tgz#17e51df313f1a7a203889ce8ff91be362651276e" integrity sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA== dependencies: klona "^2.0.4" @@ -9214,9 +9103,9 @@ sass-loader@~10.2.1: semver "^7.3.2" sass@^1.56.2: - version "1.56.2" - resolved "https://registry.npmjs.org/sass/-/sass-1.56.2.tgz" - integrity sha512-ciEJhnyCRwzlBCB+h5cCPM6ie/6f8HrhZMQOf5vlU60Y1bI1rx5Zb0vlDZvaycHsg/MqFfF1Eq2eokAa32iw8w== + version "1.62.1" + resolved "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz#caa8d6bf098935bc92fc73fa169fb3790cacd029" + integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -9224,19 +9113,19 @@ sass@^1.56.2: sax@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== scheduler@^0.23.0: version "0.23.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" schema-utils@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: ajv "^6.1.0" @@ -9245,7 +9134,7 @@ schema-utils@^1.0.0: schema-utils@^2.0.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: "@types/json-schema" "^7.0.5" @@ -9253,86 +9142,77 @@ schema-utils@^2.0.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7 ajv-keywords "^3.5.2" schema-utils@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + version "3.1.2" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" scroll-into-view-if-needed@^2.2.25: - version "2.2.29" - resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz" - integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg== + version "2.2.31" + resolved "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" + integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== dependencies: - compute-scroll-into-view "^1.0.17" + compute-scroll-into-view "^1.0.20" seek-bzip@^1.0.5: version "1.0.6" - resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== dependencies: commander "^2.8.1" select-hose@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^1.10.8: version "1.10.14" - resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA== dependencies: node-forge "^0.10.0" semver-compare@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - semver-greatest-satisfied-range@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz" + resolved "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" integrity sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ== dependencies: sver-compat "^1.5.0" "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.5.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" -semver@^7.3.5: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== send@0.18.0: version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -9351,21 +9231,21 @@ send@0.18.0: serialize-error@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== dependencies: type-fest "^0.13.1" serialize-javascript@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== dependencies: randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" @@ -9378,7 +9258,7 @@ serve-index@^1.9.1: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -9388,12 +9268,12 @@ serve-static@1.15.0: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/set-value/-/set-value-2.0.1.tgz" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" @@ -9403,22 +9283,22 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" @@ -9426,36 +9306,36 @@ sha.js@^2.4.0, sha.js@^2.4.8: shallowequal@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shelljs@^0.8.4: version "0.8.5" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" @@ -9464,7 +9344,7 @@ shelljs@^0.8.4: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -9473,19 +9353,26 @@ side-channel@^1.0.4: signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + slice-ansi@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" @@ -9494,12 +9381,12 @@ slice-ansi@^3.0.0: smart-buffer@^4.0.2, smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== snapdragon-node@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" @@ -9508,14 +9395,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" @@ -9529,7 +9416,7 @@ snapdragon@^0.8.1: sockjs-client@^1.5.0: version "1.6.1" - resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz" + resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806" integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw== dependencies: debug "^3.2.7" @@ -9540,7 +9427,7 @@ sockjs-client@^1.5.0: sockjs@^0.3.21: version "0.3.24" - resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" @@ -9549,7 +9436,7 @@ sockjs@^0.3.21: socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -9558,7 +9445,7 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" @@ -9566,38 +9453,38 @@ socks@^2.6.2: sort-keys-length@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" + resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== dependencies: sort-keys "^1.0.0" sort-keys@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" source-list-map@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-resolve@^0.5.0: version "0.5.3" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + resolved "https://registry.npmjs.org/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" @@ -9608,7 +9495,7 @@ source-map-resolve@^0.5.0: source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@~0.5.12: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -9616,58 +9503,58 @@ source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@~0.5. source-map-url@^0.4.0: version "0.4.1" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.6: version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== sparkles@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz" + resolved "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.13" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" @@ -9679,7 +9566,7 @@ spdy-transport@^3.0.0: spdy@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" @@ -9690,31 +9577,31 @@ spdy@^4.0.2: split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + resolved "https://registry.npmjs.org/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.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^6.0.1: version "6.0.2" - resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz" + resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" ssri@^7.0.0: version "7.1.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz" + resolved "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== dependencies: figgy-pudding "^3.5.1" @@ -9722,29 +9609,29 @@ ssri@^7.0.0: ssri@^9.0.0: version "9.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== dependencies: minipass "^3.1.1" stack-trace@0.0.10, stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== stackframe@^1.3.4: version "1.3.4" - resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== stat-mode@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz" + resolved "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== static-extend@^0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" @@ -9752,17 +9639,17 @@ static-extend@^0.1.1: statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== "statuses@>= 1.4.0 < 2": version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== stream-browserify@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" + resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" @@ -9770,7 +9657,7 @@ stream-browserify@^2.0.1: stream-each@^1.1.0: version "1.2.3" - resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" + resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" @@ -9778,12 +9665,12 @@ stream-each@^1.1.0: stream-exhaust@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz" + resolved "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== stream-http@^2.7.2: version "2.8.3" - resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" + resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" @@ -9794,31 +9681,31 @@ stream-http@^2.7.2: stream-shift@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-convert@^0.2.0: version "0.2.1" - resolved "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz" + resolved "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -9827,100 +9714,104 @@ string-width@^1.0.1, string-width@^1.0.2: string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + resolved "https://registry.npmjs.org/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.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.npmjs.org/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@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + resolved "https://registry.npmjs.org/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, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: is-utf8 "^0.2.0" strip-dirs@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: is-natural-number "^4.0.1" strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strip-outer@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: escape-string-regexp "^1.0.2" style-loader@^1.1.3: version "1.3.0" - resolved "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== dependencies: loader-utils "^2.0.0" @@ -9928,7 +9819,7 @@ style-loader@^1.1.3: style-loader@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== dependencies: loader-utils "^2.0.0" @@ -9936,40 +9827,40 @@ style-loader@^2.0.0: sumchecker@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz" + resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== dependencies: debug "^4.1.0" supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== sver-compat@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz" + resolved "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" integrity sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg== dependencies: es6-iterator "^2.0.1" @@ -9977,12 +9868,12 @@ sver-compat@^1.5.0: tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar-stream@^1.5.2: version "1.6.2" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: bl "^1.0.0" @@ -9993,33 +9884,21 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" -tar@^6.0.5, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== +tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: + version "6.1.14" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.14.tgz#e87926bec1cfe7c9e783a77a79f3e81c1cfa3b66" + integrity sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^4.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^6.1.11: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" temp-file@^3.4.0: version "3.4.0" - resolved "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz" + resolved "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== dependencies: async-exit-hook "^2.0.1" @@ -10027,7 +9906,7 @@ temp-file@^3.4.0: terser-webpack-plugin@^1.4.3: version "1.4.5" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== dependencies: cacache "^12.0.2" @@ -10042,7 +9921,7 @@ terser-webpack-plugin@^1.4.3: terser-webpack-plugin@^2.3.5: version "2.3.8" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== dependencies: cacache "^13.0.1" @@ -10057,7 +9936,7 @@ terser-webpack-plugin@^2.3.5: terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: version "4.8.1" - resolved "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz" + resolved "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" @@ -10066,12 +9945,12 @@ terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: text-hex@1.0.x: version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== through2-filter@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" + resolved "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== dependencies: through2 "~2.0.0" @@ -10079,7 +9958,7 @@ through2-filter@^3.0.0: through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" @@ -10087,7 +9966,7 @@ through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: through2@^3.0.1: version "3.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== dependencies: inherits "^2.0.4" @@ -10095,63 +9974,63 @@ through2@^3.0.1: through@^2.3.8: version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== thunky@^1.0.2: version "1.1.0" - resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== time-stamp@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" + resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== timed-out@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== timers-browserify@^2.0.4: version "2.0.12" - resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" + resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" tiny-invariant@^1.0.2: - version "1.2.0" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== + version "1.3.1" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-warning@^1.0.0, tiny-warning@^1.0.3: +tiny-warning@^1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" + resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== tinycolor2@^1.4.1: - version "1.4.2" - resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== + version "1.6.0" + resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== tmp-promise@^3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" + resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== dependencies: tmp "^0.2.0" tmp@^0.2.0: version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" to-absolute-glob@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" + resolved "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== dependencies: is-absolute "^1.0.0" @@ -10159,34 +10038,34 @@ to-absolute-glob@^2.0.0: to-arraybuffer@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== to-buffer@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-readable-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== to-regex-range@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" @@ -10194,14 +10073,14 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" @@ -10211,48 +10090,48 @@ to-regex@^3.0.1, to-regex@^3.0.2: to-through@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz" + resolved "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== dependencies: through2 "^2.0.3" toggle-selection@^1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" + resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== trim-repeated@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== dependencies: escape-string-regexp "^1.0.2" triple-beam@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== truncate-utf8-bytes@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== dependencies: utf8-byte-length "^1.0.1" ts-interface-checker@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-1.0.2.tgz" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-1.0.2.tgz#63f73a098b0ed34b982df1f490c54890e8e5e0b3" integrity sha512-4IKKvhZRXhvtYF/mtu+OCfBqJKV6LczUq4kQYcpT+iSB7++R9+giWnp2ecwWMIcnG16btVOkXFnoxLSYMN1Q1g== ts-loader@^8.4.0: version "8.4.0" - resolved "https://registry.npmmirror.com/ts-loader/-/ts-loader-8.4.0.tgz#e845ea0f38d140bdc3d7d60293ca18d12ff2720f" + resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-8.4.0.tgz#e845ea0f38d140bdc3d7d60293ca18d12ff2720f" integrity sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw== dependencies: chalk "^4.1.0" @@ -10262,33 +10141,28 @@ ts-loader@^8.4.0: semver "^7.3.4" tslib@^2.0.3: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + version "2.5.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tty-browserify@0.0.0: version "0.0.0" - resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== tunnel@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz" + resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== type-fest@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -10296,34 +10170,36 @@ type-is@~1.6.18: type@^1.0.1: version "1.2.0" - resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.7.2: version "2.7.2" - resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: - is-typedarray "^1.0.0" + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.5.2: version "4.9.5" - resolved "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -10333,7 +10209,7 @@ unbox-primitive@^1.0.2: unbzip2-stream@^1.0.9: version "1.4.3" - resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" @@ -10341,17 +10217,17 @@ unbzip2-stream@^1.0.9: unc-path-regex@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== undertaker-registry@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz" + resolved "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" integrity sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw== undertaker@^1.2.1: version "1.3.0" - resolved "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz" + resolved "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18" integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg== dependencies: arr-flatten "^1.0.1" @@ -10367,30 +10243,30 @@ undertaker@^1.2.1: unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== union-value@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" @@ -10400,65 +10276,58 @@ union-value@^1.0.0: unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-filename@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== dependencies: unique-slug "^3.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unique-slug@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== dependencies: imurmurhash "^0.1.4" unique-stream@^2.0.2: version "2.3.1" - resolved "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" + resolved "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== dependencies: json-stable-stringify-without-jsonify "^1.0.1" through2-filter "^3.0.0" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - universalify@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" @@ -10466,52 +10335,32 @@ unset-value@^1.0.0: upath@^1.1.1: version "1.2.0" - resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.5: - version "1.0.8" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.8.tgz" - integrity sha512-GHg7C4M7oJSJYW/ED/5QOJ7nL/E0lwTOBGsOorA7jqHr8ExUhPfwAotIAmdSw/LWv3SMLSNpzTAgeLG9zaZKTA== +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" -update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-loader@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" + resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== dependencies: loader-utils "^2.0.0" @@ -10520,14 +10369,14 @@ url-loader@^4.0.0: url-parse-lax@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" url-parse@^1.5.10: version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -10535,12 +10384,12 @@ url-parse@^1.5.10: url-to-options@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" + resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== url@^0.11.0: version "0.11.0" - resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz" + resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" @@ -10548,22 +10397,22 @@ url@^0.11.0: use@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== utf8-byte-length@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" @@ -10571,53 +10420,53 @@ util.promisify@1.0.0: util@0.10.3: version "0.10.3" - resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== dependencies: inherits "2.0.1" util@^0.11.0: version "0.11.1" - resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz" + resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== dependencies: inherits "2.0.3" utila@~0.4: version "0.4.0" - resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^3.3.2: version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^8.3.2: version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.1.1: version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8flags@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" + resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== dependencies: homedir-polyfill "^1.0.1" validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -10625,31 +10474,51 @@ validate-npm-package-license@^3.0.1: value-equal@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" + resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== value-or-function@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz" + resolved "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@^1.10.0: version "1.10.1" - resolved "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" +victory-vendor@^36.6.8: + version "36.6.10" + resolved "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.10.tgz#e7e3646deaf0e850bc60dffdad6d7a4abee40632" + integrity sha512-7YqYGtsA4mByokBhCjk+ewwPhUfzhR1I3Da6/ZsZUv/31ceT77RKoaqrxRq5Ki+9we4uzf7+A+7aG2sfYhm7nA== + dependencies: + "@types/d3-array" "^3.0.3" + "@types/d3-ease" "^3.0.0" + "@types/d3-interpolate" "^3.0.1" + "@types/d3-scale" "^4.0.2" + "@types/d3-shape" "^3.1.0" + "@types/d3-time" "^3.0.0" + "@types/d3-timer" "^3.0.0" + d3-array "^3.1.6" + d3-ease "^3.0.1" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + d3-shape "^3.1.0" + d3-time "^3.0.0" + d3-timer "^3.0.1" + vinyl-fs@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz" + resolved "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== dependencies: fs-mkdirp-stream "^1.0.0" @@ -10672,7 +10541,7 @@ vinyl-fs@^3.0.0: vinyl-sourcemap@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz" + resolved "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== dependencies: append-buffer "^1.0.2" @@ -10685,7 +10554,7 @@ vinyl-sourcemap@^1.1.0: vinyl@^2.0.0, vinyl@^2.1.0: version "2.2.1" - resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz" + resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== dependencies: clone "^2.1.1" @@ -10697,19 +10566,19 @@ vinyl@^2.0.0, vinyl@^2.1.0: vm-browserify@^1.0.1: version "1.1.2" - resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== watchpack-chokidar2@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz" + resolved "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" watchpack@^1.7.4: version "1.7.5" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: graceful-fs "^4.1.2" @@ -10720,21 +10589,21 @@ watchpack@^1.7.4: wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" - resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webpack-cli@^3.3.11: version "3.3.12" - resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz" + resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== dependencies: chalk "^2.4.2" @@ -10751,7 +10620,7 @@ webpack-cli@^3.3.11: webpack-dev-middleware@^3.7.2: version "3.7.3" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== dependencies: memory-fs "^0.4.1" @@ -10762,7 +10631,7 @@ webpack-dev-middleware@^3.7.2: webpack-dev-server@^3.10.3: version "3.11.3" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz#8c86b9d2812bf135d3c9bce6f07b718e30f7c3d3" integrity sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA== dependencies: ansi-html-community "0.0.8" @@ -10801,7 +10670,7 @@ webpack-dev-server@^3.10.3: webpack-log@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz" + resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== dependencies: ansi-colors "^3.0.0" @@ -10809,14 +10678,14 @@ webpack-log@^2.0.0: webpack-merge@^4.2.2: version "4.2.2" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== dependencies: lodash "^4.17.15" webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" @@ -10824,7 +10693,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- webpack@^4.43.0: version "4.46.0" - resolved "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz" + resolved "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== dependencies: "@webassemblyjs/ast" "1.9.0" @@ -10853,7 +10722,7 @@ webpack@^4.43.0: websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -10862,12 +10731,12 @@ websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -10878,45 +10747,50 @@ which-boxed-primitive@^1.0.2: which-module@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" + resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - winston-transport@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== dependencies: logform "^2.3.2" @@ -10925,7 +10799,7 @@ winston-transport@^4.5.0: winston@^3.3.3: version "3.8.2" - resolved "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz" + resolved "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz#56e16b34022eb4cff2638196d9646d7430fdad50" integrity sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew== dependencies: "@colors/colors" "1.5.0" @@ -10942,21 +10816,21 @@ winston@^3.3.3: worker-farm@^1.7.0: version "1.7.0" - resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" + resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" worker-rpc@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz" + resolved "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== dependencies: microevent.ts "~0.1.1" wrap-ansi@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== dependencies: string-width "^1.0.1" @@ -10964,7 +10838,7 @@ wrap-ansi@^2.0.0: wrap-ansi@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: ansi-styles "^3.2.0" @@ -10973,7 +10847,7 @@ wrap-ansi@^5.1.0: wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -10982,7 +10856,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -10991,74 +10865,59 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - ws@^6.2.1: version "6.2.2" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" + resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: version "15.1.1" - resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== xpipe@*: version "1.0.5" - resolved "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz" + resolved "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" integrity sha512-tuqoLk8xPl0o+7ny9iPlEZuzjfy1zC5ZJtAGjDDZWmVTVBK5PJP0arMGVu3Y53zSyeYK+YonMVSUv0DJgGN/ig== xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.1: version "3.2.2" - resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz" + resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== y18n@^4.0.0: version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^13.1.2: version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" @@ -11066,20 +10925,20 @@ yargs-parser@^13.1.2: yargs-parser@^18.1.2: version "18.1.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^21.0.0: +yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-parser@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz#7ede329c1d8cdbbe209bd25cdb990e9b1ebbb394" integrity sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA== dependencies: camelcase "^3.0.0" @@ -11087,7 +10946,7 @@ yargs-parser@^5.0.1: yargs@^13.3.2: version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" @@ -11103,7 +10962,7 @@ yargs@^13.3.2: yargs@^15.3.1: version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" @@ -11118,22 +10977,22 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.0.1: - version "17.5.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== +yargs@^17.0.1, yargs@^17.5.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^21.0.0" + yargs-parser "^21.1.1" yargs@^7.1.0: version "7.1.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz#63a0a5d42143879fdbb30370741374e0641d55db" integrity sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA== dependencies: camelcase "^3.0.0" @@ -11152,7 +11011,7 @@ yargs@^7.1.0: yauzl@^2.10.0, yauzl@^2.4.2: version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" @@ -11160,22 +11019,22 @@ yauzl@^2.10.0, yauzl@^2.4.2: yazl@^2.5.1: version "2.5.1" - resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== dependencies: buffer-crc32 "~0.2.3" yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yuv-buffer@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/yuv-buffer/-/yuv-buffer-1.0.0.tgz" + resolved "https://registry.npmjs.org/yuv-buffer/-/yuv-buffer-1.0.0.tgz#09a454858d74df2bc31cd588edd70ffcb86bfc9a" integrity sha512-5r5u7g7Dbdrwao/z8c4harQIpZwaNuzXjQXtgdFxTjr5Pm2eMmxIuckkKOONEM7fkiMNkeffXs6EPNESvAVzVg== yuv-canvas@1.2.6: version "1.2.6" - resolved "https://registry.npmjs.org/yuv-canvas/-/yuv-canvas-1.2.6.tgz" + resolved "https://registry.npmjs.org/yuv-canvas/-/yuv-canvas-1.2.6.tgz#246452196fca9e581f09abed9b90c94aff6014e2" integrity sha512-luNSFyGOPIJP4L8LUSgaBwWoAdmm45lCY44jhDgyREHcjnAtnR5Poj0C821UJ2CPD5GVIlfHOeFO2PDRCl2w/A== diff --git a/package.json b/package.json index cc2876fb0..cd08e1189 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.2.0-dev.8", + "version": "4.2.0-dev.13", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -60,6 +60,7 @@ "@evilmartians/lefthook": "^1.2.2", "@release-it/conventional-changelog": "^5.0.0", "@types/json-bigint": "^1.0.1", + "@types/lodash.isequal": "^4.5.6", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "cmake-js": "6.3.2", @@ -71,6 +72,7 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", + "gulp-zip": "^5.1.0", "patch-package": "^6.5.0", "prettier": "^2.0.5", "release-it": "^15.0.0", @@ -104,126 +106,15 @@ } } }, - "eslintConfig": { - "root": true, - "env": { - "es6": true, - "node": true, - "shared-node-browser": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "sourceType": "module" - }, - "extends": [ - "plugin:prettier/recommended", - "prettier" - ], - "plugins": [ - "@typescript-eslint/eslint-plugin", - "import", - "auto-import", - "react", - "react-hooks" - ], - "settings": { - "react": { - "version": "detect" - } - }, - "globals": { - "define": false, - "obj_attrib": false, - "info": false, - "NodeJS": false, - "window": false, - "alert": false, - "document": false, - "HTMLElement": false, - "HTMLDivElement": false, - "WebGL2RenderingContext": false, - "WebGLTexture": false, - "HTMLCanvasElement": false, - "ResizeObserver": false, - "name": false, - "Element": false - }, - "rules": { - "prettier/prettier": [ - "error", - { - "quoteProps": "consistent", - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false - } - ], - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": "warn", - "auto-import/auto-import": [ - "error", - { - "rootPath": "./ts/Private" - } - ], - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "error", - "import/order": [ - "error", - { - "newlines-between": "always-and-inside-groups", - "pathGroups": [ - { - "pattern": "../internal/IrisApiEngine", - "group": "unknown" - } - ], - "alphabetize": { - "order": "asc", - "orderImportKind": "asc" - } - } - ], - "sort-imports": [ - "error", - { - "ignoreDeclarationSort": true, - "ignoreMemberSort": false - } - ] - } - }, - "eslintIgnore": [ - "node_modules/", - "build/", - "dist/", - "js/", - "types/", - "ts/Private/ti/" - ], - "prettier": { - "quoteProps": "consistent", - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false - }, "dependencies": { - "bindings": "1.2.1", "buffer": "^6.0.3", "cross-env": "^7.0.3", "download": "^8.0.0", - "extract-zip": "^2.0.1", - "fs-extra": "^9.1.0", + "fs-extra": "^11.1.1", "gulp": "^4.0.2", - "gulp-cli": "^2.3.0", - "gulp-zip": "^5.1.0", "json-bigint": "^1.0.0", - "jsonfile": "^6.1.0", "lodash.isequal": "^4.5.0", "minimist": "^1.2.5", - "rimraf": "^3.0.0", "shelljs": "^0.8.4", "ts-interface-checker": "^1.0.2", "winston": "^3.3.3", @@ -231,7 +122,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.8_DCG_Windows_Video_20230417_1118.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.8_DCG_Mac_Video_20230417_1121.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.13_DCG_Windows_Video_20230426_0712.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.13_DCG_Mac_Video_20230426_0712.zip" } } diff --git a/patches/eslint+8.39.0.patch b/patches/eslint+8.39.0.patch new file mode 100644 index 000000000..f6c14833e --- /dev/null +++ b/patches/eslint+8.39.0.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/eslint/lib/linter/linter.js b/node_modules/eslint/lib/linter/linter.js +index b49eaa1..b44831f 100644 +--- a/node_modules/eslint/lib/linter/linter.js ++++ b/node_modules/eslint/lib/linter/linter.js +@@ -44,7 +44,7 @@ const { getRuleFromConfig } = require("../config/flat-config-helpers"); + const { FlatConfigArray } = require("../config/flat-config-array"); + + const debug = require("debug")("eslint:linter"); +-const MAX_AUTOFIX_PASSES = 10; ++const MAX_AUTOFIX_PASSES = Number.MAX_VALUE; + const DEFAULT_PARSER_NAME = "espree"; + const DEFAULT_ECMA_VERSION = 5; + const commentParser = new ConfigCommentParser(); diff --git a/scripts/build.js b/scripts/build.js index 875919f3c..c736064d9 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,4 +1,4 @@ -const { exec } = require('shelljs'); +const { exec, error } = require('shelljs'); const getConfig = require('./getConfig'); const logger = require('./logger'); @@ -29,6 +29,8 @@ const build = async (cb) => { scriptStr = `npm run ${scriptStr}`; logger.info(`Will to run: ${scriptStr}`); await exec(scriptStr, { silent: false }); + const err = error(); + if (err) throw err; cb(); }; diff --git a/scripts/clean.js b/scripts/clean.js index 22245efd8..555fa84a7 100644 --- a/scripts/clean.js +++ b/scripts/clean.js @@ -2,19 +2,32 @@ const path = require('path'); const fs = require('fs-extra'); +const logger = require('./logger'); + const destIrisSDKDir = path.join(__dirname, `../iris`); const buildDir = path.resolve(__dirname, '../build'); exports.destIrisSDKDir = destIrisSDKDir; exports.buildDir = buildDir; -exports.cleanIrisDir = async () => await fs.remove(destIrisSDKDir); +exports.cleanIrisDir = async () => { + await fs.remove(destIrisSDKDir); + logger.info(`clean:${destIrisSDKDir}`); +}; -exports.cleanBuildDir = async () => - await fs.remove(`${path.resolve(__dirname, '../build')}`); +exports.cleanBuildDir = async () => { + await fs.remove(buildDir); + logger.info(`clean:${buildDir}`); +}; -exports.cleanJSDir = async () => - await fs.remove(`${path.resolve(__dirname, '../js')}`); +exports.cleanJSDir = async () => { + const dir = path.resolve(__dirname, '../js'); + await fs.remove(dir); + logger.info(`clean:${dir}`); +}; -exports.cleanTypesDir = async () => - await fs.remove(`${path.resolve(__dirname, '../types')}`); +exports.cleanTypesDir = async () => { + const dir = path.resolve(__dirname, '../types'); + await fs.remove(dir); + logger.info(`clean:${dir}`); +}; diff --git a/scripts/downloadPrebuild.js b/scripts/downloadPrebuild.js index 8440510ca..3e6bcb379 100644 --- a/scripts/downloadPrebuild.js +++ b/scripts/downloadPrebuild.js @@ -3,7 +3,7 @@ const path = require('path'); const download = require('download'); const fs = require('fs-extra'); -const { cleanBuildDir, cleanJSDir, buildDir } = require('./clean'); +const { cleanBuildDir, buildDir } = require('./clean'); const getConfig = require('./getConfig'); const logger = require('./logger'); const { getOS } = require('./util'); @@ -13,9 +13,9 @@ const { platform, packageVersion, arch, no_symbol } = getConfig(); const workspaceDir = `${path.join(__dirname, '..')}`; const getDownloadURL = () => { - let downloadUrl = `http://download.agora.io/sdk/release/Electron-${getOS()}-${packageVersion}-napi.zip`; + let downloadUrl = `https://download.agora.io/sdk/release/Electron-${getOS()}-${packageVersion}-napi.zip`; if (platform === 'win32' && arch === 'x64') { - downloadUrl = `http://download.agora.io/sdk/release/Electron-win64-${packageVersion}-napi.zip`; + downloadUrl = `https://download.agora.io/sdk/release/Electron-win64-${packageVersion}-napi.zip`; } return downloadUrl; }; @@ -69,9 +69,8 @@ const removeFileByFilter = async () => { logger.info('Success: Download and cleanup finished'); }; -module.exports = async (cb) => { +module.exports = async () => { await cleanBuildDir(); - // cleanJSDir(); const downloadUrl = getDownloadURL(); @@ -82,14 +81,17 @@ module.exports = async (cb) => { logger.info('Download URL %s ', downloadUrl); logger.info('Downloading prebuilt C++ addon for Agora Electron SDK...'); - try { - await download(downloadUrl, buildDir, { - strip: 1, - extract: true, - }); - } catch (error) { - logger.error('Agora sdk download base sdk error', error); - } + await download(downloadUrl, buildDir, { + strip: 1, + extract: true, + filter: (file) => { + return ( + file.type !== 'directory' && + !file.path.endsWith(path.sep) && + file.data.length !== 0 + ); + }, + }); if (no_symbol) { await removeFileByFilter(); diff --git a/scripts/getConfig.js b/scripts/getConfig.js index 4be2e7b01..2589a0b92 100644 --- a/scripts/getConfig.js +++ b/scripts/getConfig.js @@ -9,7 +9,7 @@ const { INIT_CWD } = minimist(process.argv.slice(2), { default: {}, }); logger.info(`pass INIT_CWD ${INIT_CWD}`); -logger.info(`process.env.INIT_CWD ${process.env.INIT_CWD}`); +logger.info(`process.env.INIT_CWD ${process.env.INIT_CWD}`); const getArgvFromPkgJson = () => { const projectDir = path.join(INIT_CWD, 'package.json'); @@ -52,9 +52,13 @@ const getConfig = () => { default: { ...getArgvFromPkgJson() }, }); - //argv from ci/npm_config - if (npm_config_agora_electron_sdk_pre_built) { - config.prebuilt = !!JSON.parse(npm_config_agora_electron_sdk_pre_built); + logger.info( + `env: ${npm_config_agora_electron_sdk_pre_built} ${npm_config_agora_electron_sdk_platform} ${npm_config_agora_electron_sdk_arch}` + ); + + // argv from ci/npm_config + if (npm_config_agora_electron_sdk_pre_built !== undefined) { + config.prebuilt = !!+npm_config_agora_electron_sdk_pre_built; } if (npm_config_agora_electron_sdk_platform !== undefined) { diff --git a/scripts/synclib.js b/scripts/synclib.js index 972cfbc37..7f8d34fe6 100644 --- a/scripts/synclib.js +++ b/scripts/synclib.js @@ -1,71 +1,42 @@ const path = require('path'); -const { promisify } = require('util'); - const download = require('download'); -const extract = require('extract-zip'); -const fs = require('fs-extra'); -const glob = require('glob'); const { destIrisSDKDir, cleanIrisDir } = require('./clean'); const getConfig = require('./getConfig'); const logger = require('./logger'); -const { getOS, createTmpDir } = require('./util'); +const { getOS } = require('./util'); -const globPromise = promisify(glob); const config = getConfig(); const { iris_sdk_mac, iris_sdk_win } = config; -const downloadSDK = async ({ - preHook, - postHook, - sdkURL, - globPattern, - destDir, -}) => { +const downloadSDK = async ({ preHook, postHook, sdkURL, destDir }) => { logger.info(`Downloading:${sdkURL}`); await preHook(); - const downloadTmp = await createTmpDir(); - await download(sdkURL, downloadTmp, { - filename: 'sdk.zip', - }); - - const zipPath = path.join(downloadTmp, 'sdk.zip'); - await extract(zipPath, { - dir: downloadTmp, + await download(sdkURL, destDir, { + strip: 1, + extract: true, + filter: (file) => { + return ( + file.type !== 'directory' && + !file.path.endsWith(path.sep) && + file.data.length !== 0 + ); + }, }); - const filterUnzipsFiles = await globPromise( - path.join(downloadTmp, globPattern), - { - ignore: [], - } - ); - if (filterUnzipsFiles.length === 0) { - const message = `${sdkURL}: Can't find libs`; - logger.error(message); - throw new Error(message); - } - - await fs.copy(filterUnzipsFiles[0], destDir); - await fs.remove(downloadTmp); logger.info(`Finish download:${sdkURL}`); await postHook(); }; const syncLib = async (cb) => { - try { - const os = getOS(); - await downloadSDK({ - preHook: cleanIrisDir, - postHook: () => {}, - sdkURL: os === 'mac' ? iris_sdk_mac : iris_sdk_win, - globPattern: '*/**', - destDir: destIrisSDKDir, - }); - } catch (error) { - logger.error(error); - } + const os = getOS(); + await downloadSDK({ + preHook: cleanIrisDir, + postHook: () => {}, + sdkURL: os === 'mac' ? iris_sdk_mac : iris_sdk_win, + destDir: destIrisSDKDir, + }); cb(); }; diff --git a/scripts/util.js b/scripts/util.js index c537aa692..5a7775771 100644 --- a/scripts/util.js +++ b/scripts/util.js @@ -3,7 +3,6 @@ const os = require('os'); const fs = require('fs-extra'); const getConfig = require('./getConfig'); -const logger = require('./logger'); exports.getOS = () => { const { platform } = getConfig(); @@ -12,8 +11,7 @@ exports.getOS = () => { } else if (platform === 'win32') { return 'win32'; } else { - // not supported in temp - logger.error('Unsupported platform!'); + return 'linux'; } }; diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index 86b18489e..4a20a2093 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -4573,6 +4573,20 @@ export enum ConfigFetchType { ConfigFetchTypeJoinChannel = 2, } +/** + * @ignore + */ +export class RecorderStreamInfo { + /** + * @ignore + */ + channelId?: string; + /** + * @ignore + */ + uid?: number; +} + /** * The spatial audio parameters. */ diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index f366885a4..6a5726ce8 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -50,6 +50,7 @@ import { PermissionType, QualityAdaptIndication, QualityType, + RecorderStreamInfo, Rectangle, RemoteAudioState, RemoteAudioStateReason, @@ -3406,23 +3407,12 @@ export abstract class IRtcEngine { abstract destroyMediaPlayer(mediaPlayer: IMediaPlayer): number; /** - * Stops recording the local audio and video. - * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. - * - * @param connection The connection information. See RtcConnection . + * Occurs when the uplink network information changes. + * The SDK triggers this callback when the uplink network information changes.This callback only applies to scenarios where you push externally encoded video data in H.264 format to the SDK. * - * @returns - * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. - */ - abstract createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder; - - /** - * @ignore + * @param info The uplink network information. See UplinkNetworkInfo . */ - abstract createRemoteMediaRecorder( - channelId: string, - uid: number - ): IMediaRecorder; + abstract createMediaRecorder(info: RecorderStreamInfo): IMediaRecorder; /** * @ignore diff --git a/ts/Private/impl/IAgoraRtcEngineImpl.ts b/ts/Private/impl/IAgoraRtcEngineImpl.ts index 17b6c837d..c3dcd0ab2 100644 --- a/ts/Private/impl/IAgoraRtcEngineImpl.ts +++ b/ts/Private/impl/IAgoraRtcEngineImpl.ts @@ -25,6 +25,7 @@ import { LiveTranscoding, LocalTranscoderConfiguration, LowlightEnhanceOptions, + RecorderStreamInfo, Rectangle, ScreenCaptureParameters, ScreenCaptureParameters2, @@ -91,7 +92,6 @@ import { StreamFallbackOptions, VideoDeviceInfo, } from '../IAgoraRtcEngine'; -import { RtcConnection } from '../IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; @@ -2284,13 +2284,13 @@ export class IRtcEngineImpl implements IRtcEngine { return 'RtcEngine_destroyMediaPlayer'; } - createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder { - const apiType = this.getApiTypeFromCreateLocalMediaRecorder(connection); + createMediaRecorder(info: RecorderStreamInfo): IMediaRecorder { + const apiType = this.getApiTypeFromCreateMediaRecorder(info); const jsonParams = { - connection: connection, + info: info, toJSON: () => { return { - connection: connection, + info: info, }; }, }; @@ -2298,36 +2298,10 @@ export class IRtcEngineImpl implements IRtcEngine { return jsonResults.result; } - protected getApiTypeFromCreateLocalMediaRecorder( - connection: RtcConnection + protected getApiTypeFromCreateMediaRecorder( + info: RecorderStreamInfo ): string { - return 'RtcEngine_createLocalMediaRecorder'; - } - - createRemoteMediaRecorder(channelId: string, uid: number): IMediaRecorder { - const apiType = this.getApiTypeFromCreateRemoteMediaRecorder( - channelId, - uid - ); - const jsonParams = { - channelId: channelId, - uid: uid, - toJSON: () => { - return { - channelId: channelId, - uid: uid, - }; - }, - }; - const jsonResults = callIrisApi.call(this, apiType, jsonParams); - return jsonResults.result; - } - - protected getApiTypeFromCreateRemoteMediaRecorder( - channelId: string, - uid: number - ): string { - return 'RtcEngine_createRemoteMediaRecorder'; + return 'RtcEngine_createMediaRecorder'; } destroyMediaRecorder(mediaRecorder: IMediaRecorder): number { diff --git a/ts/Private/internal/AudioDeviceManagerInternal.ts b/ts/Private/internal/AudioDeviceManagerInternal.ts index 6c061a784..6a736b5bc 100644 --- a/ts/Private/internal/AudioDeviceManagerInternal.ts +++ b/ts/Private/internal/AudioDeviceManagerInternal.ts @@ -4,7 +4,7 @@ import { IAudioDeviceManagerImpl } from '../impl/IAudioDeviceManagerImpl'; import { callIrisApi } from './IrisApiEngine'; export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { - getPlaybackDeviceInfo(): AudioDeviceInfo { + override getPlaybackDeviceInfo(): AudioDeviceInfo { const apiType = this.getApiTypeFromGetPlaybackDeviceInfo(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); @@ -14,7 +14,7 @@ export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { }; } - getRecordingDeviceInfo(): AudioDeviceInfo { + override getRecordingDeviceInfo(): AudioDeviceInfo { const apiType = this.getApiTypeFromGetRecordingDeviceInfo(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); @@ -24,7 +24,7 @@ export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { }; } - getPlaybackDefaultDevice(): AudioDeviceInfo { + override getPlaybackDefaultDevice(): AudioDeviceInfo { const apiType = this.getApiTypeFromGetPlaybackDefaultDevice(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); @@ -34,7 +34,7 @@ export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { }; } - getRecordingDefaultDevice(): AudioDeviceInfo { + override getRecordingDefaultDevice(): AudioDeviceInfo { const apiType = this.getApiTypeFromGetRecordingDefaultDevice(); const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); diff --git a/ts/Private/internal/LocalSpatialAudioEngineInternal.ts b/ts/Private/internal/LocalSpatialAudioEngineInternal.ts index f7e0a8398..ba3d4ba41 100644 --- a/ts/Private/internal/LocalSpatialAudioEngineInternal.ts +++ b/ts/Private/internal/LocalSpatialAudioEngineInternal.ts @@ -7,23 +7,25 @@ import { import { ILocalSpatialAudioEngineImpl } from '../impl/IAgoraSpatialAudioImpl'; export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImpl { - protected getApiTypeFromRelease(): string { + protected override getApiTypeFromRelease(): string { return 'LocalSpatialAudioEngine_release'; } - protected getApiTypeFromSetMaxAudioRecvCount(maxCount: number): string { + protected override getApiTypeFromSetMaxAudioRecvCount( + maxCount: number + ): string { return 'LocalSpatialAudioEngine_setMaxAudioRecvCount'; } - protected getApiTypeFromSetAudioRecvRange(range: number): string { + protected override getApiTypeFromSetAudioRecvRange(range: number): string { return 'LocalSpatialAudioEngine_setAudioRecvRange'; } - protected getApiTypeFromSetDistanceUnit(unit: number): string { + protected override getApiTypeFromSetDistanceUnit(unit: number): string { return 'LocalSpatialAudioEngine_setDistanceUnit'; } - protected getApiTypeFromUpdateSelfPosition( + protected override getApiTypeFromUpdateSelfPosition( position: number[], axisForward: number[], axisRight: number[], @@ -32,7 +34,7 @@ export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImp return 'LocalSpatialAudioEngine_updateSelfPosition'; } - protected getApiTypeFromUpdateSelfPositionEx( + protected override getApiTypeFromUpdateSelfPositionEx( position: number[], axisForward: number[], axisRight: number[], @@ -42,33 +44,35 @@ export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImp return 'LocalSpatialAudioEngine_updateSelfPositionEx'; } - protected getApiTypeFromUpdatePlayerPositionInfo( + protected override getApiTypeFromUpdatePlayerPositionInfo( playerId: number, positionInfo: RemoteVoicePositionInfo ): string { return 'LocalSpatialAudioEngine_updatePlayerPositionInfo'; } - protected getApiTypeFromSetParameters(params: string): string { + protected override getApiTypeFromSetParameters(params: string): string { return 'LocalSpatialAudioEngine_setParameters'; } - protected getApiTypeFromMuteLocalAudioStream(mute: boolean): string { + protected override getApiTypeFromMuteLocalAudioStream(mute: boolean): string { return 'LocalSpatialAudioEngine_muteLocalAudioStream'; } - protected getApiTypeFromMuteAllRemoteAudioStreams(mute: boolean): string { + protected override getApiTypeFromMuteAllRemoteAudioStreams( + mute: boolean + ): string { return 'LocalSpatialAudioEngine_muteAllRemoteAudioStreams'; } - protected getApiTypeFromSetZones( + protected override getApiTypeFromSetZones( zones: SpatialAudioZone[], zoneCount: number ): string { return 'LocalSpatialAudioEngine_setZones'; } - protected getApiTypeFromSetPlayerAttenuation( + protected override getApiTypeFromSetPlayerAttenuation( playerId: number, attenuation: number, forceSet: boolean @@ -76,7 +80,7 @@ export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImp return 'LocalSpatialAudioEngine_setPlayerAttenuation'; } - protected getApiTypeFromMuteRemoteAudioStream( + protected override getApiTypeFromMuteRemoteAudioStream( uid: number, mute: boolean ): string { diff --git a/ts/Private/internal/MediaEngineInternal.ts b/ts/Private/internal/MediaEngineInternal.ts index b3e2036da..04687369f 100644 --- a/ts/Private/internal/MediaEngineInternal.ts +++ b/ts/Private/internal/MediaEngineInternal.ts @@ -39,7 +39,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { } >(); - registerAudioFrameObserver(observer: IAudioFrameObserver): number { + override registerAudioFrameObserver(observer: IAudioFrameObserver): number { if ( !MediaEngineInternal._audio_frame_observers.find( (value) => value === observer @@ -50,7 +50,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { return super.registerAudioFrameObserver(observer); } - unregisterAudioFrameObserver(observer: IAudioFrameObserver): number { + override unregisterAudioFrameObserver(observer: IAudioFrameObserver): number { MediaEngineInternal._audio_frame_observers = MediaEngineInternal._audio_frame_observers.filter( (value) => value !== observer @@ -58,7 +58,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { return super.unregisterAudioFrameObserver(observer); } - registerVideoFrameObserver(observer: IVideoFrameObserver): number { + override registerVideoFrameObserver(observer: IVideoFrameObserver): number { if ( !MediaEngineInternal._video_frame_observers.find( (value) => value === observer @@ -69,7 +69,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { return super.registerVideoFrameObserver(observer); } - unregisterVideoFrameObserver(observer: IVideoFrameObserver): number { + override unregisterVideoFrameObserver(observer: IVideoFrameObserver): number { MediaEngineInternal._video_frame_observers = MediaEngineInternal._video_frame_observers.filter( (value) => value !== observer @@ -77,7 +77,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { return super.unregisterVideoFrameObserver(observer); } - registerVideoEncodedFrameObserver( + override registerVideoEncodedFrameObserver( observer: IVideoEncodedFrameObserver ): number { if ( @@ -90,7 +90,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { return super.registerVideoEncodedFrameObserver(observer); } - unregisterVideoEncodedFrameObserver( + override unregisterVideoEncodedFrameObserver( observer: IVideoEncodedFrameObserver ): number { MediaEngineInternal._video_encoded_frame_observers = @@ -100,7 +100,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { return super.unregisterVideoEncodedFrameObserver(observer); } - release() { + override release() { MediaEngineInternal._audio_frame_observers = []; MediaEngineInternal._video_frame_observers = []; MediaEngineInternal._video_encoded_frame_observers = []; diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index d8248e35a..7705fbd99 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -198,11 +198,13 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { } } - getMediaPlayerId(): number { + override getMediaPlayerId(): number { return this._mediaPlayerId; } - registerPlayerSourceObserver(observer: IMediaPlayerSourceObserver): number { + override registerPlayerSourceObserver( + observer: IMediaPlayerSourceObserver + ): number { let observers = MediaPlayerInternal._source_observers.get( this._mediaPlayerId ); @@ -216,7 +218,9 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.registerPlayerSourceObserver(observer); } - unregisterPlayerSourceObserver(observer: IMediaPlayerSourceObserver): number { + override unregisterPlayerSourceObserver( + observer: IMediaPlayerSourceObserver + ): number { let observers = MediaPlayerInternal._source_observers.get( this._mediaPlayerId ); @@ -228,7 +232,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.unregisterPlayerSourceObserver(observer); } - registerAudioFrameObserver( + override registerAudioFrameObserver( observer: IAudioPcmFrameSink, mode: RawAudioFrameOpModeType = RawAudioFrameOpModeType.RawAudioFrameOpModeReadOnly ): number { @@ -248,7 +252,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.registerAudioFrameObserver(observer, mode); } - unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number { + override unregisterAudioFrameObserver(observer: IAudioPcmFrameSink): number { let observers = MediaPlayerInternal._audio_frame_observers.get( this._mediaPlayerId ); @@ -260,7 +264,9 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.unregisterAudioFrameObserver(observer); } - registerVideoFrameObserver(observer: IMediaPlayerVideoFrameObserver): number { + override registerVideoFrameObserver( + observer: IMediaPlayerVideoFrameObserver + ): number { let observers = MediaPlayerInternal._video_frame_observers.get( this._mediaPlayerId ); @@ -277,7 +283,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.registerVideoFrameObserver(observer); } - unregisterVideoFrameObserver( + override unregisterVideoFrameObserver( observer: IMediaPlayerVideoFrameObserver ): number { let observers = MediaPlayerInternal._video_frame_observers.get( @@ -291,7 +297,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.unregisterVideoFrameObserver(observer); } - registerMediaPlayerAudioSpectrumObserver( + override registerMediaPlayerAudioSpectrumObserver( observer: IAudioSpectrumObserver, intervalInMS: number ): number { @@ -314,7 +320,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { ); } - unregisterMediaPlayerAudioSpectrumObserver( + override unregisterMediaPlayerAudioSpectrumObserver( observer: IAudioSpectrumObserver ): number { let observers = MediaPlayerInternal._audio_spectrum_observers.get( @@ -328,21 +334,21 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { return super.unregisterMediaPlayerAudioSpectrumObserver(observer); } - protected getApiTypeFromSetPlayerOptionInInt( + protected override getApiTypeFromSetPlayerOptionInInt( key: string, value: number ): string { return 'MediaPlayer_setPlayerOption'; } - protected getApiTypeFromSetPlayerOptionInString( + protected override getApiTypeFromSetPlayerOptionInString( key: string, value: string ): string { return 'MediaPlayer_setPlayerOption2'; } - setView(view: HTMLElement): number { + override setView(view: HTMLElement): number { logWarn('Also can use other api setupLocalVideo'); return ( AgoraEnv.AgoraRendererManager?.setupVideo({ @@ -353,7 +359,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { ); } - setRenderMode(renderMode: RenderModeType): number { + override setRenderMode(renderMode: RenderModeType): number { logWarn( 'Also can use other api setRenderOption or setRenderOptionByConfig' ); diff --git a/ts/Private/internal/MediaRecorderInternal.ts b/ts/Private/internal/MediaRecorderInternal.ts index d769911ba..cc8bc3dc1 100644 --- a/ts/Private/internal/MediaRecorderInternal.ts +++ b/ts/Private/internal/MediaRecorderInternal.ts @@ -48,7 +48,7 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { return this._nativeHandle; } - setMediaRecorderObserver(callback: IMediaRecorderObserver): number { + override setMediaRecorderObserver(callback: IMediaRecorderObserver): number { const key = this._nativeHandle; if (MediaRecorderInternal._observers.has(key)) { return ErrorCodeType.ErrOk; diff --git a/ts/Private/internal/MusicContentCenterInternal.ts b/ts/Private/internal/MusicContentCenterInternal.ts index a0013d077..20228cbec 100644 --- a/ts/Private/internal/MusicContentCenterInternal.ts +++ b/ts/Private/internal/MusicContentCenterInternal.ts @@ -99,7 +99,9 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { } } - registerEventHandler(eventHandler: IMusicContentCenterEventHandler): number { + override registerEventHandler( + eventHandler: IMusicContentCenterEventHandler + ): number { if ( !MusicContentCenterInternal._event_handlers.find( (value) => value === eventHandler @@ -110,17 +112,17 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { return super.registerEventHandler(eventHandler); } - unregisterEventHandler(): number { + override unregisterEventHandler(): number { MusicContentCenterInternal._event_handlers = []; return super.unregisterEventHandler(); } - release() { + override release() { MusicContentCenterInternal._event_handlers = []; super.release(); } - createMusicPlayer(): IMusicPlayer { + override createMusicPlayer(): IMusicPlayer { // @ts-ignore const mediaPlayerId = super.createMusicPlayer() as number; return new MusicPlayerInternal(mediaPlayerId); @@ -135,11 +137,11 @@ class _MusicPlayerInternal extends IMusicPlayerImpl { this._mediaPlayerId = mediaPlayerId; } - getMediaPlayerId(): number { + override getMediaPlayerId(): number { return this._mediaPlayerId; } - protected getApiTypeFromOpenWithSongCode( + protected override getApiTypeFromOpenWithSongCode( songCode: number, startPos = 0 ): string { @@ -180,23 +182,23 @@ export class MusicCollectionInternal extends MusicCollectionImpl { this._musicCollection = musicCollection; } - getCount(): number { + override getCount(): number { return this._musicCollection.count; } - getMusic(index: number): Music { + override getMusic(index: number): Music { return this._musicCollection.music[index] ?? {}; } - getPage(): number { + override getPage(): number { return this._musicCollection.page; } - getPageSize(): number { + override getPageSize(): number { return this._musicCollection.pageSize; } - getTotal(): number { + override getTotal(): number { return this._musicCollection.total; } } diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index ff4f78159..4dfab06b2 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -12,6 +12,7 @@ import { EchoTestConfiguration, ErrorCodeType, IAudioEncodedFrameObserver, + RecorderStreamInfo, SimulcastStreamConfig, SimulcastStreamMode, VideoCanvas, @@ -106,7 +107,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { } >(); - initialize(context: RtcEngineContext): number { + override initialize(context: RtcEngineContext): number { if (AgoraEnv.webEnvReady) { const { RendererManager } = require('../../Renderer/RendererManager'); AgoraEnv.AgoraRendererManager = new RendererManager(); @@ -119,7 +120,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return ret; } - release(sync: boolean = false) { + override release(sync: boolean = false) { AgoraEnv.AgoraElectronBridge.ReleaseRenderer(); AgoraEnv.AgoraRendererManager?.clear(); AgoraEnv.AgoraRendererManager = undefined; @@ -263,7 +264,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { } } - getVersion(): SDKBuildInfo { + override getVersion(): SDKBuildInfo { const apiType = 'RtcEngine_getVersion'; const jsonParams = {}; const jsonResults = callIrisApi.call(this, apiType, jsonParams); @@ -273,7 +274,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { }; } - registerEventHandler(eventHandler: IRtcEngineEventHandler): boolean { + override registerEventHandler(eventHandler: IRtcEngineEventHandler): boolean { if ( !RtcEngineExInternal._event_handlers.find( (value) => value === eventHandler @@ -284,7 +285,9 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.registerEventHandler(eventHandler); } - unregisterEventHandler(eventHandler: IRtcEngineEventHandler): boolean { + override unregisterEventHandler( + eventHandler: IRtcEngineEventHandler + ): boolean { RtcEngineExInternal._event_handlers = RtcEngineExInternal._event_handlers.filter( (value) => value !== eventHandler @@ -292,40 +295,31 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.unregisterEventHandler(eventHandler); } - createMediaPlayer(): IMediaPlayer { + override createMediaPlayer(): IMediaPlayer { // @ts-ignore const mediaPlayerId = super.createMediaPlayer() as number; return new MediaPlayerInternal(mediaPlayerId); } - destroyMediaPlayer(mediaPlayer: IMediaPlayer): number { + override destroyMediaPlayer(mediaPlayer: IMediaPlayer): number { const ret = super.destroyMediaPlayer(mediaPlayer); mediaPlayer.release?.call(mediaPlayer); return ret; } - createLocalMediaRecorder(connection: RtcConnection): IMediaRecorder { - // @ts-ignore - const nativeHandle = super.createLocalMediaRecorder(connection) as string; - return new MediaRecorderInternal(nativeHandle); - } - - createRemoteMediaRecorder(channelId: string, uid: number): IMediaRecorder { + override createMediaRecorder(info: RecorderStreamInfo): IMediaRecorder { // @ts-ignore - const nativeHandle = super.createRemoteMediaRecorder( - channelId, - uid - ) as string; + const nativeHandle = super.createMediaRecorder(info) as string; return new MediaRecorderInternal(nativeHandle); } - destroyMediaRecorder(mediaRecorder: IMediaRecorder): number { + override destroyMediaRecorder(mediaRecorder: IMediaRecorder): number { const ret = super.destroyMediaRecorder(mediaRecorder); mediaRecorder.release?.call(mediaRecorder); return ret; } - startDirectCdnStreaming( + override startDirectCdnStreaming( eventHandler: IDirectCdnStreamingEventHandler, publishUrl: string, options: DirectCdnStreamingMediaOptions @@ -342,7 +336,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.startDirectCdnStreaming(eventHandler, publishUrl, options); } - registerMediaMetadataObserver( + override registerMediaMetadataObserver( observer: IMetadataObserver, type: MetadataType ): number { @@ -356,7 +350,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.registerMediaMetadataObserver(observer, type); } - unregisterMediaMetadataObserver( + override unregisterMediaMetadataObserver( observer: IMetadataObserver, type: MetadataType ): number { @@ -367,7 +361,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.unregisterMediaMetadataObserver(observer, type); } - protected getApiTypeFromJoinChannel( + protected override getApiTypeFromJoinChannel( token: string, channelId: string, uid: number, @@ -379,13 +373,15 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return 'RtcEngine_joinChannel2'; } - protected getApiTypeFromLeaveChannel(options?: LeaveChannelOptions): string { + protected override getApiTypeFromLeaveChannel( + options?: LeaveChannelOptions + ): string { return options === undefined ? 'RtcEngine_leaveChannel' : 'RtcEngine_leaveChannel2'; } - protected getApiTypeFromSetClientRole( + protected override getApiTypeFromSetClientRole( role: ClientRoleType, options?: ClientRoleOptions ): string { @@ -394,29 +390,31 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { : 'RtcEngine_setClientRole2'; } - protected getApiTypeFromStartEchoTest(config: EchoTestConfiguration): string { + protected override getApiTypeFromStartEchoTest( + config: EchoTestConfiguration + ): string { return 'RtcEngine_startEchoTest3'; } - protected getApiTypeFromStartPreview( + protected override getApiTypeFromStartPreview( sourceType: VideoSourceType = VideoSourceType.VideoSourceCameraPrimary ): string { return 'RtcEngine_startPreview2'; } - protected getApiTypeFromStopPreview( + protected override getApiTypeFromStopPreview( sourceType: VideoSourceType = VideoSourceType.VideoSourceCameraPrimary ): string { return 'RtcEngine_stopPreview2'; } - protected getApiTypeFromStartAudioRecording( + protected override getApiTypeFromStartAudioRecording( config: AudioRecordingConfiguration ): string { return 'RtcEngine_startAudioRecording3'; } - protected getApiTypeFromStartAudioMixing( + protected override getApiTypeFromStartAudioMixing( filePath: string, loopback: boolean, cycle: number, @@ -425,7 +423,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return 'RtcEngine_startAudioMixing2'; } - protected getApiTypeFromEnableDualStreamMode( + protected override getApiTypeFromEnableDualStreamMode( enabled: boolean, streamConfig?: SimulcastStreamConfig ): string { @@ -434,7 +432,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { : 'RtcEngine_enableDualStreamMode2'; } - protected getApiTypeFromSetDualStreamMode( + protected override getApiTypeFromSetDualStreamMode( mode: SimulcastStreamMode, streamConfig?: SimulcastStreamConfig ): string { @@ -443,25 +441,27 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { : 'RtcEngine_setDualStreamMode2'; } - protected getApiTypeFromLeaveChannelEx( + protected override getApiTypeFromLeaveChannelEx( connection: RtcConnection, options?: LeaveChannelOptions ): string { return 'RtcEngineEx_leaveChannelEx2'; } - protected getApiTypeFromCreateDataStream(config: DataStreamConfig): string { + protected override getApiTypeFromCreateDataStream( + config: DataStreamConfig + ): string { return 'RtcEngine_createDataStream2'; } - protected getApiTypeFromAddVideoWatermark( + protected override getApiTypeFromAddVideoWatermark( watermarkUrl: string, options: WatermarkOptions ): string { return 'RtcEngine_addVideoWatermark2'; } - protected getApiTypeFromJoinChannelWithUserAccount( + protected override getApiTypeFromJoinChannelWithUserAccount( token: string, channelId: string, userAccount: string, @@ -475,47 +475,47 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { : 'RtcEngine_joinChannelWithUserAccount2'; } - protected getApiTypeFromCreateDataStreamEx( + protected override getApiTypeFromCreateDataStreamEx( config: DataStreamConfig, connection: RtcConnection ): string { return 'RtcEngineEx_createDataStreamEx2'; } - protected getApiTypeFromStartScreenCaptureBySourceType( + protected override getApiTypeFromStartScreenCaptureBySourceType( sourceType: VideoSourceType, config: ScreenCaptureConfiguration ): string { return 'RtcEngine_startScreenCapture2'; } - protected getApiTypeFromStopScreenCaptureBySourceType( + protected override getApiTypeFromStopScreenCaptureBySourceType( sourceType: VideoSourceType ): string { return 'RtcEngine_stopScreenCapture2'; } - getAudioDeviceManager(): IAudioDeviceManager { + override getAudioDeviceManager(): IAudioDeviceManager { return this._audio_device_manager; } - getVideoDeviceManager(): IVideoDeviceManager { + override getVideoDeviceManager(): IVideoDeviceManager { return this._video_device_manager; } - getMediaEngine(): IMediaEngine { + override getMediaEngine(): IMediaEngine { return this._media_engine; } - getMusicContentCenter(): IMusicContentCenter { + override getMusicContentCenter(): IMusicContentCenter { return this._music_content_center; } - getLocalSpatialAudioEngine(): ILocalSpatialAudioEngine { + override getLocalSpatialAudioEngine(): ILocalSpatialAudioEngine { return this._local_spatial_audio_engine; } - registerAudioEncodedFrameObserver( + override registerAudioEncodedFrameObserver( config: AudioEncodedFrameObserverConfig, observer: IAudioEncodedFrameObserver ): number { @@ -529,7 +529,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.registerAudioEncodedFrameObserver(config, observer); } - unregisterAudioEncodedFrameObserver( + override unregisterAudioEncodedFrameObserver( observer: IAudioEncodedFrameObserver ): number { RtcEngineExInternal._audio_encoded_frame_observers = @@ -539,7 +539,9 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.unregisterAudioEncodedFrameObserver(observer); } - registerAudioSpectrumObserver(observer: IAudioSpectrumObserver): number { + override registerAudioSpectrumObserver( + observer: IAudioSpectrumObserver + ): number { if ( !RtcEngineExInternal._audio_spectrum_observers.find( (value) => value === observer @@ -550,7 +552,9 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.registerAudioSpectrumObserver(observer); } - unregisterAudioSpectrumObserver(observer: IAudioSpectrumObserver): number { + override unregisterAudioSpectrumObserver( + observer: IAudioSpectrumObserver + ): number { RtcEngineExInternal._audio_spectrum_observers = RtcEngineExInternal._audio_spectrum_observers.filter( (value) => value !== observer @@ -558,7 +562,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { return super.unregisterAudioSpectrumObserver(observer); } - getScreenCaptureSources( + override getScreenCaptureSources( thumbSize: Size, iconSize: Size, includeScreen: boolean @@ -586,7 +590,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { }); } - setupLocalVideo(canvas: VideoCanvas): number { + override setupLocalVideo(canvas: VideoCanvas): number { let { sourceType = VideoSourceType.VideoSourceCamera, uid, @@ -615,7 +619,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - setupRemoteVideo(canvas: VideoCanvas): number { + override setupRemoteVideo(canvas: VideoCanvas): number { const { sourceType = VideoSourceType.VideoSourceRemote, uid, @@ -638,7 +642,10 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - setupRemoteVideoEx(canvas: VideoCanvas, connection: RtcConnection): number { + override setupRemoteVideoEx( + canvas: VideoCanvas, + connection: RtcConnection + ): number { const { sourceType = VideoSourceType.VideoSourceRemote, uid, @@ -661,7 +668,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - setLocalRenderMode( + override setLocalRenderMode( renderMode: RenderModeType, mirrorMode: VideoMirrorModeType = VideoMirrorModeType.VideoMirrorModeAuto ): number { @@ -678,7 +685,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - setRemoteRenderMode( + override setRemoteRenderMode( uid: number, renderMode: RenderModeType, mirrorMode: VideoMirrorModeType @@ -696,7 +703,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - setRemoteRenderModeEx( + override setRemoteRenderModeEx( uid: number, renderMode: RenderModeType, mirrorMode: VideoMirrorModeType, @@ -716,7 +723,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - setLocalVideoMirrorMode(mirrorMode: VideoMirrorModeType): number { + override setLocalVideoMirrorMode(mirrorMode: VideoMirrorModeType): number { return ( AgoraEnv.AgoraRendererManager?.setRenderOptionByConfig({ videoSourceType: VideoSourceType.VideoSourceCamera, @@ -729,11 +736,11 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } - destroyRendererByView(view: any) { + override destroyRendererByView(view: any) { AgoraEnv.AgoraRendererManager?.destroyRendererByView(view); } - destroyRendererByConfig( + override destroyRendererByConfig( videoSourceType: VideoSourceType, channelId?: Channel, uid?: number diff --git a/ts/Renderer/YUVCanvasRenderer/index.ts b/ts/Renderer/YUVCanvasRenderer/index.ts index 193aac0c2..463f884b1 100644 --- a/ts/Renderer/YUVCanvasRenderer/index.ts +++ b/ts/Renderer/YUVCanvasRenderer/index.ts @@ -1,15 +1,9 @@ -/* - * @Author: zhangtao@agora.io - * @Date: 2021-04-28 13:34:48 - * @Last Modified by: zhangtao@agora.io - * @Last Modified time: 2021-05-19 15:59:03 - */ +import isEqual from 'lodash.isequal'; import { RenderModeType } from '../../Private/AgoraMediaBase'; import { CanvasOptions, ShareVideoFrame } from '../../Types'; import { IRenderer } from '../IRenderer'; -const isEqual = require('lodash.isequal'); const YUVBuffer = require('yuv-buffer'); const YUVCanvas = require('yuv-canvas'); diff --git a/ts/Types.ts b/ts/Types.ts index 517e6be4a..b11883f4a 100644 --- a/ts/Types.ts +++ b/ts/Types.ts @@ -1,6 +1,9 @@ import { RenderModeType, VideoSourceType } from './Private/AgoraMediaBase'; import { IRenderer, IRendererManager } from './Renderer'; +/** + * @ignore + */ export interface AgoraEnvOptions { /** * @ignore diff --git a/yarn.lock b/yarn.lock index 88e0431cc..64a766f26 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,20 +3,20 @@ "@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" "@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + version "7.19.1" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -25,174 +25,180 @@ "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@commitlint/cli@^17.1.2": - version "17.1.2" - resolved "https://registry.npmjs.org/@commitlint/cli/-/cli-17.1.2.tgz" - integrity sha512-h/4Hlka3bvCLbnxf0Er2ri5A44VMlbMSkdTRp8Adv2tRiklSTRIoPGs7OEXDv3EoDs2AAzILiPookgM4Gi7LOw== +"@commitlint/cli@^17.6.3": + version "17.6.3" + resolved "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.3.tgz#a02194a2bb6efe4e681eda2addd072a8d02c9497" + integrity sha512-ItSz2fd4F+CujgIbQOfNNerDF1eFlsBGEfp9QcCb1kxTYMuKTYZzA6Nu1YRRrIaaWwe2E7awUGpIMrPoZkOG3A== dependencies: - "@commitlint/format" "^17.0.0" - "@commitlint/lint" "^17.1.0" - "@commitlint/load" "^17.1.2" - "@commitlint/read" "^17.1.0" - "@commitlint/types" "^17.0.0" + "@commitlint/format" "^17.4.4" + "@commitlint/lint" "^17.6.3" + "@commitlint/load" "^17.5.0" + "@commitlint/read" "^17.5.1" + "@commitlint/types" "^17.4.4" execa "^5.0.0" - lodash "^4.17.19" + lodash.isfunction "^3.0.9" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^17.0.0" "@commitlint/config-conventional@^17.0.2": - version "17.1.0" - resolved "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.1.0.tgz" - integrity sha512-WU2p0c9/jLi8k2q2YrDV96Y8XVswQOceIQ/wyJvQxawJSCasLdRB3kUIYdNjOCJsxkpoUlV/b90ZPxp1MYZDiA== + version "17.6.3" + resolved "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.3.tgz#21f5835235493e386effeaa98b898124230b1000" + integrity sha512-bLyHEjjRWqlLQWIgYFHmUPbEFMOOLXeF3QbUinDIJev/u9e769tkoTH9YPknEywiuIrAgZaVo+OfzAIsJP0fsw== dependencies: conventional-changelog-conventionalcommits "^5.0.0" -"@commitlint/config-validator@^17.1.0": - version "17.1.0" - resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.1.0.tgz" - integrity sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg== +"@commitlint/config-validator@^17.4.4": + version "17.4.4" + resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz#d0742705719559a101d2ee49c0c514044af6d64d" + integrity sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg== dependencies: - "@commitlint/types" "^17.0.0" + "@commitlint/types" "^17.4.4" ajv "^8.11.0" -"@commitlint/ensure@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz" - integrity sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A== - dependencies: - "@commitlint/types" "^17.0.0" - lodash "^4.17.19" - -"@commitlint/execute-rule@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz" - integrity sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ== - -"@commitlint/format@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/format/-/format-17.0.0.tgz" - integrity sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA== - dependencies: - "@commitlint/types" "^17.0.0" +"@commitlint/ensure@^17.4.4": + version "17.4.4" + resolved "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz#a36e7719bdb9c2b86c8b8c2e852b463a7bfda5fa" + integrity sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g== + dependencies: + "@commitlint/types" "^17.4.4" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + lodash.snakecase "^4.1.1" + lodash.startcase "^4.4.0" + lodash.upperfirst "^4.3.1" + +"@commitlint/execute-rule@^17.4.0": + version "17.4.0" + resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" + integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== + +"@commitlint/format@^17.4.4": + version "17.4.4" + resolved "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz#0f6e1b4d7a301c7b1dfd4b6334edd97fc050b9f5" + integrity sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ== + dependencies: + "@commitlint/types" "^17.4.4" chalk "^4.1.0" -"@commitlint/is-ignored@^17.1.0": - version "17.1.0" - resolved "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.1.0.tgz" - integrity sha512-JITWKDMHhIh8IpdIbcbuH9rEQJty1ZWelgjleTFrVRAcEwN/sPzk1aVUXRIZNXMJWbZj8vtXRJnFihrml8uECQ== - dependencies: - "@commitlint/types" "^17.0.0" - semver "7.3.7" - -"@commitlint/lint@^17.1.0": - version "17.1.0" - resolved "https://registry.npmjs.org/@commitlint/lint/-/lint-17.1.0.tgz" - integrity sha512-ltpqM2ogt/+SDhUaScFo0MdscncEF96lvQTPMM/VTTWlw7sTGLLWkOOppsee2MN/uLNNWjQ7kqkd4h6JqoM9AQ== - dependencies: - "@commitlint/is-ignored" "^17.1.0" - "@commitlint/parse" "^17.0.0" - "@commitlint/rules" "^17.0.0" - "@commitlint/types" "^17.0.0" - -"@commitlint/load@^17.1.2": - version "17.1.2" - resolved "https://registry.npmjs.org/@commitlint/load/-/load-17.1.2.tgz" - integrity sha512-sk2p/jFYAWLChIfOIp/MGSIn/WzZ0vkc3afw+l4X8hGEYkvDe4gQUUAVxjl/6xMRn0HgnSLMZ04xXh5pkTsmgg== - dependencies: - "@commitlint/config-validator" "^17.1.0" - "@commitlint/execute-rule" "^17.0.0" - "@commitlint/resolve-extends" "^17.1.0" - "@commitlint/types" "^17.0.0" - "@types/node" "^14.0.0" +"@commitlint/is-ignored@^17.6.3": + version "17.6.3" + resolved "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.3.tgz#8e21046558a0339fbf2a33ef0ad7d5a9ae7ff6bc" + integrity sha512-LQbNdnPbxrpbcrVKR5yf51SvquqktpyZJwqXx3lUMF6+nT9PHB8xn3wLy8pi2EQv5Zwba484JnUwDE1ygVYNQA== + dependencies: + "@commitlint/types" "^17.4.4" + semver "7.5.0" + +"@commitlint/lint@^17.6.3": + version "17.6.3" + resolved "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.3.tgz#2d9a88b73c44be8b97508c980198a6f289251655" + integrity sha512-fBlXwt6SHJFgm3Tz+luuo3DkydAx9HNC5y4eBqcKuDuMVqHd2ugMNr+bQtx6riv9mXFiPoKp7nE4Xn/ls3iVDA== + dependencies: + "@commitlint/is-ignored" "^17.6.3" + "@commitlint/parse" "^17.4.4" + "@commitlint/rules" "^17.6.1" + "@commitlint/types" "^17.4.4" + +"@commitlint/load@^17.5.0": + version "17.5.0" + resolved "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz#be45dbbb50aaf5eb7e8e940e1e0d6171d1426bab" + integrity sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q== + dependencies: + "@commitlint/config-validator" "^17.4.4" + "@commitlint/execute-rule" "^17.4.0" + "@commitlint/resolve-extends" "^17.4.4" + "@commitlint/types" "^17.4.4" + "@types/node" "*" chalk "^4.1.0" - cosmiconfig "^7.0.0" + cosmiconfig "^8.0.0" cosmiconfig-typescript-loader "^4.0.0" - lodash "^4.17.19" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" resolve-from "^5.0.0" ts-node "^10.8.1" - typescript "^4.6.4" + typescript "^4.6.4 || ^5.0.0" -"@commitlint/message@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz" - integrity sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw== +"@commitlint/message@^17.4.2": + version "17.4.2" + resolved "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz#f4753a79701ad6db6db21f69076e34de6580e22c" + integrity sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q== -"@commitlint/parse@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz" - integrity sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A== +"@commitlint/parse@^17.4.4": + version "17.4.4" + resolved "https://registry.npmjs.org/@commitlint/parse/-/parse-17.4.4.tgz#8311b12f2b730de6ea0679ae2a37b386bcc5b04b" + integrity sha512-EKzz4f49d3/OU0Fplog7nwz/lAfXMaDxtriidyGF9PtR+SRbgv4FhsfF310tKxs6EPj8Y+aWWuX3beN5s+yqGg== dependencies: - "@commitlint/types" "^17.0.0" + "@commitlint/types" "^17.4.4" conventional-changelog-angular "^5.0.11" conventional-commits-parser "^3.2.2" -"@commitlint/read@^17.1.0": - version "17.1.0" - resolved "https://registry.npmjs.org/@commitlint/read/-/read-17.1.0.tgz" - integrity sha512-73BoFNBA/3Ozo2JQvGsE0J8SdrJAWGfZQRSHqvKaqgmY042Su4gXQLqvAzgr55S9DI1l9TiU/5WDuh8IE86d/g== +"@commitlint/read@^17.5.1": + version "17.5.1" + resolved "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz#fec903b766e2c41e3cefa80630040fcaba4f786c" + integrity sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg== dependencies: - "@commitlint/top-level" "^17.0.0" - "@commitlint/types" "^17.0.0" - fs-extra "^10.0.0" - git-raw-commits "^2.0.0" + "@commitlint/top-level" "^17.4.0" + "@commitlint/types" "^17.4.4" + fs-extra "^11.0.0" + git-raw-commits "^2.0.11" minimist "^1.2.6" -"@commitlint/resolve-extends@^17.1.0": - version "17.1.0" - resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.1.0.tgz" - integrity sha512-jqKm00LJ59T0O8O4bH4oMa4XyJVEOK4GzH8Qye9XKji+Q1FxhZznxMV/bDLyYkzbTodBt9sL0WLql8wMtRTbqQ== +"@commitlint/resolve-extends@^17.4.4": + version "17.4.4" + resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz#8f931467dea8c43b9fe38373e303f7c220de6fdc" + integrity sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A== dependencies: - "@commitlint/config-validator" "^17.1.0" - "@commitlint/types" "^17.0.0" + "@commitlint/config-validator" "^17.4.4" + "@commitlint/types" "^17.4.4" import-fresh "^3.0.0" - lodash "^4.17.19" + lodash.mergewith "^4.6.2" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz" - integrity sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ== +"@commitlint/rules@^17.6.1": + version "17.6.1" + resolved "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.1.tgz#dff529b8d1e0455808fe7e3e1fa70617e4eb2759" + integrity sha512-lUdHw6lYQ1RywExXDdLOKxhpp6857/4c95Dc/1BikrHgdysVUXz26yV0vp1GL7Gv+avx9WqZWTIVB7pNouxlfw== dependencies: - "@commitlint/ensure" "^17.0.0" - "@commitlint/message" "^17.0.0" - "@commitlint/to-lines" "^17.0.0" - "@commitlint/types" "^17.0.0" + "@commitlint/ensure" "^17.4.4" + "@commitlint/message" "^17.4.2" + "@commitlint/to-lines" "^17.4.0" + "@commitlint/types" "^17.4.4" execa "^5.0.0" -"@commitlint/to-lines@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.0.0.tgz" - integrity sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ== +"@commitlint/to-lines@^17.4.0": + version "17.4.0" + resolved "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz#9bd02e911e7d4eab3fb4a50376c4c6d331e10d8d" + integrity sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg== -"@commitlint/top-level@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.0.0.tgz" - integrity sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ== +"@commitlint/top-level@^17.4.0": + version "17.4.0" + resolved "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz#540cac8290044cf846fbdd99f5cc51e8ac5f27d6" + integrity sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g== dependencies: find-up "^5.0.0" -"@commitlint/types@^17.0.0": - version "17.0.0" - resolved "https://registry.npmjs.org/@commitlint/types/-/types-17.0.0.tgz" - integrity sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ== +"@commitlint/types@^17.4.4": + version "17.4.4" + resolved "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" + integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== dependencies: chalk "^4.1.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -201,7 +207,7 @@ "@dsherret/to-absolute-glob@^2.0.2": version "2.0.2" - resolved "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" + resolved "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1f6475dc8bd974cea07a2daf3864b317b1dd332c" integrity sha512-InCaQ/KEOcFtAFztn47wadritBLP2nT6m/ucbBnIgI5YwxuMzKKCHtqazR2+D1yR6y1ZTnPea9aLFEUrTttUSQ== dependencies: is-absolute "^1.0.0" @@ -209,83 +215,83 @@ "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" - integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + version "4.5.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== -"@eslint/eslintrc@^1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" + espree "^9.5.1" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.39.0": + version "8.39.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" + integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== + "@evilmartians/lefthook@^1.2.2": - version "1.3.8" - resolved "https://registry.yarnpkg.com/@evilmartians/lefthook/-/lefthook-1.3.8.tgz#0a0b17c0de1874d0b1bad8281de279272a954b77" - integrity sha512-uQp7YKOmDQpH00+BsxDHOBuJI+QnBp3pZ4vBKIjt13epdcc3heQ8DDikc3byjUx3nZ7EBaQAzzXpyY1Rx08eow== + version "1.3.12" + resolved "https://registry.npmjs.org/@evilmartians/lefthook/-/lefthook-1.3.12.tgz#66f8e42506d307fd40e590699ccce5aa447ca148" + integrity sha512-rvfGEmUkf2OAeCMDSe1RWarhEGpKeJYiIF7cbMwyXYgfxjqCJVdcGiNqTsi3oqVm3SLtFQTxupBoxA15tNQskg== -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" - resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz" + resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== "@iarna/toml@2.2.5": version "2.2.5" - resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz" + resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + version "1.4.15" + resolved "https://registry.npmjs.org/@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.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -293,7 +299,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -301,168 +307,174 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@octokit/auth-token@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz" - integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== + version "3.0.3" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" + integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== dependencies: - "@octokit/types" "^7.0.0" + "@octokit/types" "^9.0.0" -"@octokit/core@^4.0.0": - version "4.0.5" - resolved "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz" - integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== +"@octokit/core@^4.1.0": + version "4.2.0" + resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" + integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" "@octokit/request" "^6.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^7.0.0" + "@octokit/types" "^9.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.2" - resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.2.tgz" - integrity sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw== + version "7.0.5" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" + integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== dependencies: - "@octokit/types" "^7.0.0" + "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.1" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz" - integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== + version "5.0.5" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" + integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== dependencies: "@octokit/request" "^6.0.0" - "@octokit/types" "^7.0.0" + "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^13.9.1": - version "13.9.1" - resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.9.1.tgz" - integrity sha512-98zOxAAR8MDHjXI2xGKgn/qkZLwfcNjHka0baniuEpN1fCv3kDJeh5qc0mBwim5y31eaPaYer9QikzwOkQq3wQ== +"@octokit/openapi-types@^17.1.0": + version "17.1.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.1.0.tgz#9a712b5bb9d644940d8a1f24115c798c317a64a5" + integrity sha512-rnI26BAITDZTo5vqFOmA7oX4xRd18rO+gcK4MiTpJmsRMxAw0JmevNjPsjpry1bb9SVNo56P/0kbiyXXa4QluA== -"@octokit/plugin-paginate-rest@^4.0.0": - version "4.2.3" - resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.2.3.tgz" - integrity sha512-1RXJZ7hnxSANMtxKSVIEByjhYqqlu2GaKmLJJE/OVDya1aI++hdmXP4ORCUlsN2rt4hJzRYbWizBHlGYKz3dhQ== +"@octokit/plugin-paginate-rest@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" + integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== dependencies: - "@octokit/types" "^7.3.1" + "@octokit/types" "^9.0.0" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" - resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.5.2" - resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.5.2.tgz" - integrity sha512-zUscUePMC3KEKyTAfuG/dA6hw4Yn7CncVJs2kM9xc4931Iqk3ZiwHfVwTUnxkqQJIVgeBRYUk3rM4hMfgASUxg== +"@octokit/plugin-rest-endpoint-methods@^7.0.0": + version "7.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" + integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== dependencies: - "@octokit/types" "^7.3.1" + "@octokit/types" "^9.0.0" deprecation "^2.3.1" "@octokit/request-error@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz" - integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== + version "3.0.3" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: - "@octokit/types" "^7.0.0" + "@octokit/types" "^9.0.0" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^6.0.0": - version "6.2.1" - resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz" - integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== + version "6.2.3" + resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" + integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" - "@octokit/types" "^7.0.0" + "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/rest@19.0.4": - version "19.0.4" - resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz" - integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== +"@octokit/rest@19.0.7": + version "19.0.7" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz#d2e21b4995ab96ae5bfae50b4969da7e04e0bb70" + integrity sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA== dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^4.0.0" + "@octokit/core" "^4.1.0" + "@octokit/plugin-paginate-rest" "^6.0.0" "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + "@octokit/plugin-rest-endpoint-methods" "^7.0.0" -"@octokit/types@^7.0.0", "@octokit/types@^7.3.1": - version "7.3.1" - resolved "https://registry.npmjs.org/@octokit/types/-/types-7.3.1.tgz" - integrity sha512-Vefohn8pHGFYWbSc6du0wXMK/Pmy6h0H4lttBw5WqquEuxjdXwyYX07CeZpJDkzSzpdKxBoWRNuDJGTE+FvtqA== +"@octokit/types@^9.0.0": + version "9.2.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-9.2.0.tgz#0358e3de070b1d43c5a8af63b9951c88a09fc9ed" + integrity sha512-xySzJG4noWrIBFyMu4lg4tu9vAgNg9S0aoLRONhAEz6ueyi1evBzb40HitIosaYS4XOexphG305IVcLrIX/30g== dependencies: - "@octokit/openapi-types" "^13.9.1" + "@octokit/openapi-types" "^17.1.0" + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== "@pnpm/network.ca-file@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.1.tgz" - integrity sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA== + version "1.0.2" + resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== dependencies: graceful-fs "4.2.10" -"@pnpm/npm-conf@^1.0.4": - version "1.0.5" - resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz" - integrity sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A== +"@pnpm/npm-conf@^2.1.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.0.tgz#221b4cfcde745d5f8928c25f391e5cc9d405b345" + integrity sha512-roLI1ul/GwzwcfcVpZYPdrgW2W/drLriObl1h+yLF5syc8/5ULWw2ALbCHUWF+4YltIqA3xFSbG4IwyJz37e9g== dependencies: + "@pnpm/config.env-replace" "^1.1.0" "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" "@release-it/conventional-changelog@^5.0.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@release-it/conventional-changelog/-/conventional-changelog-5.1.0.tgz" - integrity sha512-o55D822tVIoldUDj1Fp1KvenVREcEEjYOyuVNwRVnTcExFN6nWUPrH05q7Y8opT23N5snuCwPJ5bzLPEcpBvRg== + version "5.1.1" + resolved "https://registry.npmjs.org/@release-it/conventional-changelog/-/conventional-changelog-5.1.1.tgz#5e3affbe8d1814fe47d89777e3375a8a90c073b5" + integrity sha512-QtbDBe36dQfzexAfDYrbLPvd5Cb5bMWmLcjcGhCOWBss7fe1/gCjoxDULVz+7N7G5Nu2UMeBwHcUp/w8RDh5VQ== dependencies: concat-stream "^2.0.0" conventional-changelog "^3.1.25" conventional-recommended-bump "^6.1.0" - semver "^7.3.7" + semver "7.3.8" "@sindresorhus/is@^0.7.0": version "0.7.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@sindresorhus/is@^5.2.0": version "5.3.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== "@szmarczak/http-timer@^5.0.1": version "5.0.1" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: defer-to-connect "^2.0.1" "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@ts-morph/common@~0.7.0": version "0.7.5" - resolved "https://registry.npmjs.org/@ts-morph/common/-/common-0.7.5.tgz" + resolved "https://registry.npmjs.org/@ts-morph/common/-/common-0.7.5.tgz#d81603abd4b86d0099d69239cbbcdf990a5dfb25" integrity sha512-nlFunSKAsFWI0Ol/uPxJcpVqXxTGNuaWXTmoQDhcnwj1UM4QmBSUVWzqoQ0OzUlqo4sV1gobfFBkMHuZVemMAQ== dependencies: "@dsherret/to-absolute-glob" "^2.0.2" @@ -474,119 +486,95 @@ "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.npmjs.org/@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.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@types/cacheable-request@^6.0.2": - version "6.0.2" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/http-cache-semantics@*": +"@types/http-cache-semantics@^4.0.1": version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/json-bigint@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/json-bigint/-/json-bigint-1.0.1.tgz#201062a6990119a8cc18023cfe1fed12fc2fc8a7" + resolved "https://registry.npmjs.org/@types/json-bigint/-/json-bigint-1.0.1.tgz#201062a6990119a8cc18023cfe1fed12fc2fc8a7" integrity sha512-zpchZLNsNuzJHi6v64UBoFWAvQlPhch7XAi36FkH6tL1bbbmimIF+cS7vwkzY4u5RaSWMoflQfu+TshMPPw8uw== "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/keyv@*": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== +"@types/lodash.isequal@^4.5.6": + version "4.5.6" + resolved "https://registry.npmjs.org/@types/lodash.isequal/-/lodash.isequal-4.5.6.tgz#ff42a1b8e20caa59a97e446a77dc57db923bc02b" + integrity sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg== dependencies: - "@types/node" "*" + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.194" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" + integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== "@types/minimatch@^3.0.3": version "3.0.5" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/minimist@^1.2.0": version "1.2.2" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/node@*": - version "18.7.17" - resolved "https://registry.npmjs.org/@types/node/-/node-18.7.17.tgz" - integrity sha512-0UyfUnt02zIuqp7yC8RYtDkp/vo8bFaQ13KkSEvUAohPOAlnVNbj5Fi3fgPSuwzakS+EvvnnZ4x9y7i6ASaSPQ== - -"@types/node@^14.0.0": - version "14.18.28" - resolved "https://registry.npmjs.org/@types/node/-/node-14.18.28.tgz" - integrity sha512-CK2fnrQlIgKlCV3N2kM+Gznb5USlwA1KFX3rJVHmgVk6NJxFPuQ86pAcvKnu37IA4BGlSRz7sEE1lHL1aLZ/eQ== + version "20.0.0" + resolved "https://registry.npmjs.org/@types/node/-/node-20.0.0.tgz#081d9afd28421be956c1a47ced1c9a0034b467e2" + integrity sha512-cD2uPTDnQQCVpmRefonO98/PPijuOnnEy5oytWJFPY1N9aJCz2wJ5kSGWO+zJoed2cY2JxQh6yBuUq4vIn61hw== "@types/normalize-package-data@^2.4.0": version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" +"@types/triple-beam@^1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" + integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== "@typescript-eslint/eslint-plugin@^5.30.5": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.0.tgz#52c8a7a4512f10e7249ca1e2e61f81c62c34365c" - integrity sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA== + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz#684a2ce7182f3b4dac342eef7caa1c2bae476abd" + integrity sha512-yVrXupeHjRxLDcPKL10sGQ/QlVrA8J5IYOEWVqk0lJaSZP7X5DfnP7Ns3cc74/blmbipQ1htFNVGsHX6wsYm0A== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.57.0" - "@typescript-eslint/type-utils" "5.57.0" - "@typescript-eslint/utils" "5.57.0" + "@typescript-eslint/scope-manager" "5.59.2" + "@typescript-eslint/type-utils" "5.59.2" + "@typescript-eslint/utils" "5.59.2" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -595,81 +583,81 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.30.5": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.0.tgz#f675bf2cd1a838949fd0de5683834417b757e4fa" - integrity sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ== + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.2.tgz#c2c443247901d95865b9f77332d9eee7c55655e8" + integrity sha512-uq0sKyw6ao1iFOZZGk9F8Nro/8+gfB5ezl1cA06SrqbgJAt0SRoFhb9pXaHvkrxUpZaoLxt8KlovHNk8Gp6/HQ== dependencies: - "@typescript-eslint/scope-manager" "5.57.0" - "@typescript-eslint/types" "5.57.0" - "@typescript-eslint/typescript-estree" "5.57.0" + "@typescript-eslint/scope-manager" "5.59.2" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/typescript-estree" "5.59.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.57.0": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.0.tgz#79ccd3fa7bde0758059172d44239e871e087ea36" - integrity sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw== +"@typescript-eslint/scope-manager@5.59.2": + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.2.tgz#f699fe936ee4e2c996d14f0fdd3a7da5ba7b9a4c" + integrity sha512-dB1v7ROySwQWKqQ8rEWcdbTsFjh2G0vn8KUyvTXdPoyzSL6lLGkiXEV5CvpJsEe9xIdKV+8Zqb7wif2issoOFA== dependencies: - "@typescript-eslint/types" "5.57.0" - "@typescript-eslint/visitor-keys" "5.57.0" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/visitor-keys" "5.59.2" -"@typescript-eslint/type-utils@5.57.0": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.0.tgz#98e7531c4e927855d45bd362de922a619b4319f2" - integrity sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ== +"@typescript-eslint/type-utils@5.59.2": + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz#0729c237503604cd9a7084b5af04c496c9a4cdcf" + integrity sha512-b1LS2phBOsEy/T381bxkkywfQXkV1dWda/z0PhnIy3bC5+rQWQDS7fk9CSpcXBccPY27Z6vBEuaPBCKCgYezyQ== dependencies: - "@typescript-eslint/typescript-estree" "5.57.0" - "@typescript-eslint/utils" "5.57.0" + "@typescript-eslint/typescript-estree" "5.59.2" + "@typescript-eslint/utils" "5.59.2" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.57.0": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.0.tgz#727bfa2b64c73a4376264379cf1f447998eaa132" - integrity sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ== +"@typescript-eslint/types@5.59.2": + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655" + integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w== -"@typescript-eslint/typescript-estree@5.57.0": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.0.tgz#ebcd0ee3e1d6230e888d88cddf654252d41e2e40" - integrity sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw== +"@typescript-eslint/typescript-estree@5.59.2": + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936" + integrity sha512-+j4SmbwVmZsQ9jEyBMgpuBD0rKwi9RxRpjX71Brr73RsYnEr3Lt5QZ624Bxphp8HUkSKfqGnPJp1kA5nl0Sh7Q== dependencies: - "@typescript-eslint/types" "5.57.0" - "@typescript-eslint/visitor-keys" "5.57.0" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/visitor-keys" "5.59.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.57.0": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.0.tgz#eab8f6563a2ac31f60f3e7024b91bf75f43ecef6" - integrity sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw== +"@typescript-eslint/utils@5.59.2": + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz#0c45178124d10cc986115885688db6abc37939f4" + integrity sha512-kSuF6/77TZzyGPhGO4uVp+f0SBoYxCDf+lW3GKhtKru/L8k/Hd7NFQxyWUeY7Z/KGB2C6Fe3yf2vVi4V9TsCSQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.57.0" - "@typescript-eslint/types" "5.57.0" - "@typescript-eslint/typescript-estree" "5.57.0" + "@typescript-eslint/scope-manager" "5.59.2" + "@typescript-eslint/types" "5.59.2" + "@typescript-eslint/typescript-estree" "5.59.2" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.57.0": - version "5.57.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.0.tgz#e2b2f4174aff1d15eef887ce3d019ecc2d7a8ac1" - integrity sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g== +"@typescript-eslint/visitor-keys@5.59.2": + version "5.59.2" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750" + integrity sha512-EEpsO8m3RASrKAHI9jpavNv9NlEUebV4qmF1OWxSTtKSFBpC1NCmWazDQHFivRf0O1DV11BA645yrLEVQ0/Lig== dependencies: - "@typescript-eslint/types" "5.57.0" + "@typescript-eslint/types" "5.59.2" eslint-visitor-keys "^3.3.0" "@yarnpkg/lockfile@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== JSONStream@^1.0.4: version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" @@ -677,34 +665,34 @@ JSONStream@^1.0.4: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1, acorn@^8.7.0, acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== add-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -713,9 +701,9 @@ ajv@^6.10.0, ajv@^6.12.4: uri-js "^4.2.2" ajv@^8.11.0: - version "8.11.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -724,79 +712,79 @@ ajv@^8.11.0: ansi-align@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" + resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.0" ansi-colors@^1.0.1: version "1.1.0" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== dependencies: ansi-wrap "^0.1.0" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== +ansi-escapes@^6.0.0: + version "6.2.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: - type-fest "^1.0.2" + type-fest "^3.0.0" ansi-gray@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz" + resolved "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" integrity sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw== dependencies: ansi-wrap "0.1.0" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: - version "6.1.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz" - integrity sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg== + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + resolved "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw== ansi@^0.3.0, ansi@~0.3.0: version "0.3.1" - resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz" + resolved "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" integrity sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A== anymatch@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" @@ -804,26 +792,26 @@ anymatch@^2.0.0: append-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz" + resolved "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" integrity sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA== dependencies: buffer-equal "^1.0.0" archive-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz" + resolved "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== dependencies: file-type "^4.2.0" archy@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-we-there-yet@~1.0.0: version "1.0.6" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz#a2d28c93102aa6cc96245a26cb954de06ec53f0c" integrity sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ== dependencies: delegates "^1.0.0" @@ -831,46 +819,46 @@ are-we-there-yet@~1.0.0: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-filter@^1.1.1: version "1.1.2" - resolved "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz" + resolved "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" integrity sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA== dependencies: make-iterator "^1.0.0" arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-map@^2.0.0, arr-map@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz" + resolved "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" integrity sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw== dependencies: make-iterator "^1.0.0" arr-union@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-buffer-byte-length@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== dependencies: call-bind "^1.0.2" @@ -878,22 +866,22 @@ array-buffer-byte-length@^1.0.0: array-differ@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz" + resolved "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" @@ -904,7 +892,7 @@ array-includes@^3.1.5, array-includes@^3.1.6: array-initial@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz" + resolved "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" integrity sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw== dependencies: array-slice "^1.0.0" @@ -912,19 +900,19 @@ array-initial@^1.0.0: array-last@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz" + resolved "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz#7aa77073fec565ddab2493f5f88185f404a9d336" integrity sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg== dependencies: is-number "^4.0.0" array-slice@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz" + resolved "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== array-sort@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz" + resolved "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" integrity sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg== dependencies: default-compare "^1.0.0" @@ -933,17 +921,17 @@ array-sort@^1.0.0: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-unique@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -953,7 +941,7 @@ array.prototype.flat@^1.3.1: array.prototype.flatmap@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" @@ -961,20 +949,20 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.map@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz" - integrity sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA== +array.prototype.map@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz#6e43c2fee6c0fb5e4806da2dc92eb00970809e55" + integrity sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" array.prototype.tosorted@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== dependencies: call-bind "^1.0.2" @@ -985,29 +973,29 @@ array.prototype.tosorted@^1.1.1: arrify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== assign-symbols@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== ast-types@^0.13.2: version "0.13.4" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== dependencies: tslib "^2.0.1" async-done@^1.2.0, async-done@^1.2.2: version "1.3.2" - resolved "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz" + resolved "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2" integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw== dependencies: end-of-stream "^1.1.0" @@ -1016,59 +1004,54 @@ async-done@^1.2.0, async-done@^1.2.2: stream-exhaust "^1.0.1" async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + version "1.0.6" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" + integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== async-retry@1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: retry "0.13.1" async-settle@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz" + resolved "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" integrity sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw== dependencies: async-done "^1.2.2" async@^3.2.3: version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/atob/-/atob-2.1.2.tgz" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== axios@^0.21.1: version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" bach@^1.0.0: version "1.2.0" - resolved "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz" + resolved "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" integrity sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg== dependencies: arr-filter "^1.1.1" @@ -1083,17 +1066,17 @@ bach@^1.0.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" @@ -1105,57 +1088,52 @@ base@^0.11.1: pascalcase "^0.1.1" before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + version "2.2.3" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -big-integer@^1.6.17: +big-integer@^1.6.17, big-integer@^1.6.44: version "1.6.51" - resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== bignumber.js@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + version "9.1.1" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== binary-extensions@^1.0.0: version "1.13.1" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary@~0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" + resolved "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== dependencies: buffers "~0.1.1" chainsaw "~0.1.0" -bindings@1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz" - integrity sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g== - bindings@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" bl@^1.0.0: version "1.2.3" - resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" safe-buffer "^5.1.1" bl@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz" - integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ== + version "5.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== dependencies: buffer "^6.0.3" inherits "^2.0.4" @@ -1163,18 +1141,18 @@ bl@^5.0.0: bluebird@^3: version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bluebird@~3.4.1: version "3.4.7" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== boxen@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz" - integrity sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg== + version "7.0.2" + resolved "https://registry.npmjs.org/boxen/-/boxen-7.0.2.tgz#465dd03e846c11f2d4c7eb0d1b3a39d66bd7057e" + integrity sha512-1Z4UJabXUP1/R9rLpoU3O2lEMnG3pPLAs/ZD2lF3t2q7qD5lM8rqbtnvtvm4N0wEyNlE+9yZVTVAGmd1V5jabg== dependencies: ansi-align "^3.0.1" camelcase "^7.0.0" @@ -1185,9 +1163,16 @@ boxen@^7.0.0: widest-line "^4.0.1" wrap-ansi "^8.0.1" +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1195,7 +1180,7 @@ brace-expansion@^1.1.7: braces@^2.3.1, braces@^2.3.2: version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" @@ -1211,19 +1196,19 @@ braces@^2.3.1, braces@^2.3.2: braces@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" buffer-alloc-unsafe@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" + resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== buffer-alloc@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" + resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" @@ -1231,37 +1216,37 @@ buffer-alloc@^1.2.0: buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" - integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ== + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" + resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof-polyfill@~1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" + resolved "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== buffer-shims@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz" + resolved "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" integrity sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g== buffer@^5.2.1: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -1269,7 +1254,7 @@ buffer@^5.2.1: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -1277,17 +1262,24 @@ buffer@^6.0.3: buffers@~0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" + resolved "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" + bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cache-base@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" @@ -1300,14 +1292,27 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.10" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz#1785984a9a4ddec8dd01792232cca474be49a8af" + integrity sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ== + dependencies: + "@types/http-cache-semantics" "^4.0.1" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.2" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" cacheable-request@^2.1.1: version "2.1.4" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== dependencies: clone-response "1.0.2" @@ -1318,22 +1323,9 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -1341,12 +1333,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" @@ -1355,39 +1347,39 @@ camelcase-keys@^6.2.2: camelcase@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw== camelcase@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz" - integrity sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ== + version "7.0.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" + integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== chainsaw@~0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" + resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== dependencies: traverse ">=0.3.0 <0.4" -chalk@5.0.1, chalk@^5.0.0, chalk@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== +chalk@5.2.0, chalk@^5.0.0, chalk@^5.0.1, chalk@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== chalk@^2.0.0: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1396,7 +1388,7 @@ chalk@^2.0.0: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1404,12 +1396,12 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^2.0.0: version "2.1.8" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" @@ -1428,22 +1420,22 @@ chokidar@^2.0.0: chownr@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0: - version "3.4.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz" - integrity sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug== + version "3.8.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== class-utils@^0.3.5: version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" @@ -1453,29 +1445,29 @@ class-utils@^0.3.5: cli-boxes@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" + resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== cli-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: restore-cursor "^4.0.0" cli-spinners@^2.6.1: - version "2.7.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + version "2.9.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== cli-width@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz#a5622f6a3b0a9e3e711a25f099bf2399f608caf6" integrity sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw== cliui@^3.0.3, cliui@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== dependencies: string-width "^1.0.1" @@ -1484,50 +1476,52 @@ cliui@^3.0.3, cliui@^3.2.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone-buffer@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" + resolved "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== clone-response@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== dependencies: mimic-response "^1.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - clone-stats@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz" + resolved "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clone@^2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== cloneable-readable@^1.0.0: version "1.1.3" - resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz" + resolved "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== dependencies: inherits "^2.0.1" @@ -1536,7 +1530,7 @@ cloneable-readable@^1.0.0: cmake-js@6.3.2: version "6.3.2" - resolved "https://registry.npmjs.org/cmake-js/-/cmake-js-6.3.2.tgz" + resolved "https://registry.npmjs.org/cmake-js/-/cmake-js-6.3.2.tgz#4ee827bea99205e1bfda86f5883994873af357b6" integrity sha512-7MfiQ/ijzeE2kO+WFB9bv4QP5Dn2yVaAP2acFJr4NIFy2hT4w6O4EpOTLNcohR5IPX7M4wNf/5taIqMj7UA9ug== dependencies: axios "^0.21.1" @@ -1558,17 +1552,17 @@ cmake-js@6.3.2: code-block-writer@^10.1.1: version "10.1.1" - resolved "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz" + resolved "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz#ad5684ed4bfb2b0783c8b131281ae84ee640a42f" integrity sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw== code-point-at@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== collection-map@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz" + resolved "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" integrity sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA== dependencies: arr-map "^2.0.2" @@ -1577,7 +1571,7 @@ collection-map@^1.0.0: collection-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" @@ -1585,31 +1579,31 @@ collection-visit@^1.0.0: color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0: version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -1617,12 +1611,12 @@ color-string@^1.6.0: color-support@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^3.1.3: version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -1630,35 +1624,28 @@ color@^3.1.3: colorspace@1.1.x: version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" text-hex "1.0.x" -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^2.12.2, commander@^2.8.1: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commitlint@^17.0.2: - version "17.1.2" - resolved "https://registry.npmjs.org/commitlint/-/commitlint-17.1.2.tgz" - integrity sha512-ykPXC3TUfYlL8tqz/VOeaJpTPNrcdKrR4Y7ShxjF6l8SlBN/+4YhBJpomG2dx8Ac43FM9OE5rdn1+h7NxsIcAQ== + version "17.6.3" + resolved "https://registry.npmjs.org/commitlint/-/commitlint-17.6.3.tgz#4f49c76594db7452310036e34b185bf0300a91c7" + integrity sha512-0S6j3gKZyLmY4F/YchW7lqXiBeplFBKJqXcrOdxhzJdsZdqiPZxqsN7zq++Ovc4iMLnX65W4bJB7YKalYfXesw== dependencies: - "@commitlint/cli" "^17.1.2" - "@commitlint/types" "^17.0.0" + "@commitlint/cli" "^17.6.3" + "@commitlint/types" "^17.4.4" compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" @@ -1666,17 +1653,17 @@ compare-func@^2.0.0: component-emitter@^1.2.1: version "1.3.0" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.6.0: version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" @@ -1686,7 +1673,7 @@ concat-stream@^1.6.0: concat-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" @@ -1696,7 +1683,7 @@ concat-stream@^2.0.0: config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -1704,7 +1691,7 @@ config-chain@^1.1.11: configstore@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz" + resolved "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== dependencies: dot-prop "^6.0.1" @@ -1715,14 +1702,14 @@ configstore@^6.0.0: content-disposition@^0.5.2: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12: version "5.0.13" - resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== dependencies: compare-func "^2.0.0" @@ -1730,21 +1717,21 @@ conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12: conventional-changelog-atom@^2.0.8: version "2.0.8" - resolved "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== dependencies: q "^1.5.1" conventional-changelog-codemirror@^2.0.8: version "2.0.8" - resolved "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== dependencies: q "^1.5.1" conventional-changelog-conventionalcommits@^4.5.0: version "4.6.3" - resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz#0765490f56424b46f6cb4db9135902d6e5a36dc2" integrity sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g== dependencies: compare-func "^2.0.0" @@ -1753,7 +1740,7 @@ conventional-changelog-conventionalcommits@^4.5.0: conventional-changelog-conventionalcommits@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz#41bdce54eb65a848a4a3ffdca93e92fa22b64a86" integrity sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw== dependencies: compare-func "^2.0.0" @@ -1762,7 +1749,7 @@ conventional-changelog-conventionalcommits@^5.0.0: conventional-changelog-core@^4.2.1: version "4.2.4" - resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== dependencies: add-stream "^1.0.0" @@ -1782,35 +1769,35 @@ conventional-changelog-core@^4.2.1: conventional-changelog-ember@^2.0.9: version "2.0.9" - resolved "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== dependencies: q "^1.5.1" conventional-changelog-eslint@^3.0.9: version "3.0.9" - resolved "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== dependencies: q "^1.5.1" conventional-changelog-express@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== dependencies: q "^1.5.1" conventional-changelog-jquery@^3.0.11: version "3.0.11" - resolved "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== dependencies: q "^1.5.1" conventional-changelog-jshint@^2.0.9: version "2.0.9" - resolved "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== dependencies: compare-func "^2.0.0" @@ -1818,12 +1805,12 @@ conventional-changelog-jshint@^2.0.9: conventional-changelog-preset-loader@^2.3.4: version "2.3.4" - resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== conventional-changelog-writer@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== dependencies: conventional-commits-filter "^2.0.7" @@ -1838,7 +1825,7 @@ conventional-changelog-writer@^5.0.0: conventional-changelog@^3.1.25: version "3.1.25" - resolved "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz" + resolved "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz#3e227a37d15684f5aa1fb52222a6e9e2536ccaff" integrity sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ== dependencies: conventional-changelog-angular "^5.0.12" @@ -1855,7 +1842,7 @@ conventional-changelog@^3.1.25: conventional-commits-filter@^2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== dependencies: lodash.ismatch "^4.4.0" @@ -1863,7 +1850,7 @@ conventional-commits-filter@^2.0.7: conventional-commits-parser@^3.2.0, conventional-commits-parser@^3.2.2: version "3.2.4" - resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: JSONStream "^1.0.4" @@ -1875,7 +1862,7 @@ conventional-commits-parser@^3.2.0, conventional-commits-parser@^3.2.2: conventional-recommended-bump@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== dependencies: concat-stream "^2.0.0" @@ -1888,20 +1875,18 @@ conventional-recommended-bump@^6.1.0: q "^1.5.1" convert-source-map@^1.5.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== copy-descriptor@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== copy-props@^2.0.1: version "2.0.5" - resolved "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz" + resolved "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz#03cf9ae328d4ebb36f8f1d804448a6af9ee3f2d2" integrity sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw== dependencies: each-props "^1.3.2" @@ -1909,40 +1894,39 @@ copy-props@^2.0.1: core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig-typescript-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.0.0.tgz" - integrity sha512-cVpucSc2Tf+VPwCCR7SZzmQTQkPbkk4O01yXsYqXBIbjE1bhwqSyAgYQkRK1un4i0OPziTleqFhdkmOc4RQ/9g== + version "4.3.0" + resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" + integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== -cosmiconfig@7.0.1, cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== +cosmiconfig@8.1.3, cosmiconfig@^8.0.0: + version "8.1.3" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== dependencies: - "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" + js-yaml "^4.1.0" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.10.0" create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^6.0.5: version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -1953,7 +1937,7 @@ cross-spawn@^6.0.5: cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1962,14 +1946,14 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: crypto-random-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== dependencies: type-fest "^1.0.1" d@1, d@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: es5-ext "^0.10.50" @@ -1977,80 +1961,80 @@ d@1, d@^1.0.1: dargs@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== data-uri-to-buffer@3: version "3.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== data-uri-to-buffer@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz" - integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== + version "4.0.1" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== dateformat@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@4, debug@^4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^2.2.0, debug@^2.3.3: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + version "1.1.1" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" map-obj "^1.0.0" decamelize@^1.1.0, decamelize@^1.1.1: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + version "0.2.2" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz" + resolved "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== dependencies: file-type "^5.2.0" @@ -2059,7 +2043,7 @@ decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: decompress-tarbz2@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz" + resolved "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== dependencies: decompress-tar "^4.1.0" @@ -2070,7 +2054,7 @@ decompress-tarbz2@^4.0.0: decompress-targz@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz" + resolved "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== dependencies: decompress-tar "^4.1.1" @@ -2079,7 +2063,7 @@ decompress-targz@^4.0.0: decompress-unzip@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz" + resolved "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== dependencies: file-type "^3.8.0" @@ -2089,7 +2073,7 @@ decompress-unzip@^4.0.1: decompress@^4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz" + resolved "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== dependencies: decompress-tar "^4.0.0" @@ -2103,151 +2087,164 @@ decompress@^4.2.1: deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + default-compare@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz" + resolved "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" integrity sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ== dependencies: kind-of "^5.0.2" default-resolution@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz" + resolved "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" integrity sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ== defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" defer-to-connect@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" degenerator@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz" - integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== + version "3.0.4" + resolved "https://registry.npmjs.org/degenerator/-/degenerator-3.0.4.tgz#07ccf95bc11044a37a6efc2f66029fb636e31f24" + integrity sha512-Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw== dependencies: ast-types "^0.13.2" escodegen "^1.8.1" esprima "^4.0.0" - vm2 "^3.9.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + vm2 "^3.9.17" delegates@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" dot-prop@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== dependencies: is-obj "^2.0.0" download@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/download/-/download-8.0.0.tgz" + resolved "https://registry.npmjs.org/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== dependencies: archive-type "^4.0.0" @@ -2264,19 +2261,19 @@ download@^8.0.0: duplexer2@~0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: readable-stream "^2.0.2" duplexer3@^0.1.4: version "0.1.5" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz" + resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== duplexify@^3.6.0: version "3.7.1" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" @@ -2286,7 +2283,7 @@ duplexify@^3.6.0: each-props@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz" + resolved "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== dependencies: is-plain-object "^2.0.1" @@ -2294,70 +2291,41 @@ each-props@^1.3.2: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enabled@2.0.x: version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: - version "1.20.2" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz" - integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.2" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-abstract@^1.20.4: +es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: array-buffer-byte-length "^1.0.0" @@ -2397,26 +2365,27 @@ es-abstract@^1.20.4: es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-get-iterator@^1.0.2: - version "1.1.2" - resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== + version "1.1.3" + resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" is-map "^2.0.2" is-set "^2.0.2" - is-string "^1.0.5" + is-string "^1.0.7" isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -2425,14 +2394,14 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -2441,7 +2410,7 @@ es-to-primitive@^1.2.1: es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: version "0.10.62" - resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== dependencies: es6-iterator "^2.0.3" @@ -2450,7 +2419,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50: es6-iterator@^2.0.1, es6-iterator@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" @@ -2459,7 +2428,7 @@ es6-iterator@^2.0.1, es6-iterator@^2.0.3: es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: d "^1.0.1" @@ -2467,7 +2436,7 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: es6-weak-map@^2.0.1: version "2.0.3" - resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" + resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== dependencies: d "1" @@ -2477,32 +2446,32 @@ es6-weak-map@^2.0.1: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-goat@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz" + resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== escodegen@^1.8.1: version "1.14.3" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: esprima "^4.0.1" @@ -2513,13 +2482,13 @@ escodegen@^1.8.1: source-map "~0.6.1" eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + version "8.8.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== eslint-import-resolver-node@^0.3.7: version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" @@ -2527,15 +2496,15 @@ eslint-import-resolver-node@^0.3.7: resolve "^1.22.1" eslint-module-utils@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + version "2.8.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" eslint-plugin-auto-import@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/eslint-plugin-auto-import/-/eslint-plugin-auto-import-0.1.1.tgz" + resolved "https://registry.npmjs.org/eslint-plugin-auto-import/-/eslint-plugin-auto-import-0.1.1.tgz#327a2f398cf619892dfe03343606e38b29d7f29f" integrity sha512-H3RX0wmRq/MLIf3ZMLEy9OyvQKUGxWIsi+TJenicgGptJzdQnQe6XheGlFlqnqUjpy3CQW/1KiF7UNTNxM6Xhw== dependencies: requireindex "~1.1.0" @@ -2543,7 +2512,7 @@ eslint-plugin-auto-import@^0.1.1: eslint-plugin-import@^2.27.5: version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: array-includes "^3.1.6" @@ -2564,19 +2533,19 @@ eslint-plugin-import@^2.27.5: eslint-plugin-prettier@^4.0.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-plugin-react-hooks@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.30.1: version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: array-includes "^3.1.6" @@ -2597,69 +2566,59 @@ eslint-plugin-react@^7.30.1: eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== eslint@^8.4.1: - version "8.23.1" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz" - integrity sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg== + version "8.39.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" + integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== dependencies: - "@eslint/eslintrc" "^1.3.2" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.39.0" + "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" + glob-parent "^6.0.2" + globals "^13.19.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" @@ -2668,62 +2627,61 @@ eslint@^8.4.1: minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== +execa@7.1.1, execa@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.1" - human-signals "^3.0.1" + human-signals "^4.3.0" is-stream "^3.0.0" merge-stream "^2.0.0" npm-run-path "^5.1.0" @@ -2733,7 +2691,7 @@ execa@6.1.0: execa@^5.0.0, execa@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2748,7 +2706,7 @@ execa@^5.0.0, execa@^5.1.1: expand-brackets@^2.1.4: version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" @@ -2761,21 +2719,21 @@ expand-brackets@^2.1.4: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" ext-list@^2.0.0: version "2.2.2" - resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz" + resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== dependencies: mime-db "^1.28.0" ext-name@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz" + resolved "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== dependencies: ext-list "^2.0.0" @@ -2783,21 +2741,21 @@ ext-name@^5.0.0: ext@^1.1.2: version "1.7.0" - resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz" + resolved "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: type "^2.7.2" extend-shallow@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" @@ -2805,12 +2763,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -2819,7 +2777,7 @@ external-editor@^3.0.3: extglob@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" @@ -2831,20 +2789,9 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - fancy-log@^1.3.2: version "1.3.3" - resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz" + resolved "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== dependencies: ansi-gray "^0.1.1" @@ -2854,17 +2801,17 @@ fancy-log@^1.3.2: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.9: version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2875,104 +2822,104 @@ fast-glob@^3.2.11, fast-glob@^3.2.5, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^1.0.0: version "1.1.4" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz#e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9" integrity sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" - resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" + resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== dependencies: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" -figures@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz" - integrity sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w== +figures@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== dependencies: escape-string-regexp "^5.0.0" is-unicode-supported "^1.2.0" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-type@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz#93780f3fed98b599755d846b99a1617a2ad063b8" integrity sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g== file-type@^3.8.0: version "3.9.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== file-type@^4.2.0: version "4.4.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== file-type@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== file-type@^6.1.0: version "6.2.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz" + resolved "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== file-uri-to-path@2: version "2.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba" integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== filename-reserved-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" + resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== filenamify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz" + resolved "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz#9603eb688179f8c5d40d828626dcbb92c3a4672c" integrity sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g== dependencies: filename-reserved-regex "^2.0.0" @@ -2981,7 +2928,7 @@ filenamify@^3.0.0: fill-range@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" @@ -2991,14 +2938,14 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== dependencies: path-exists "^2.0.0" @@ -3006,14 +2953,14 @@ find-up@^1.0.0: find-up@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -3021,7 +2968,7 @@ find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -3029,14 +2976,14 @@ find-up@^5.0.0: find-yarn-workspace-root@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" + resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== dependencies: micromatch "^4.0.2" findup-sync@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" integrity sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g== dependencies: detect-file "^1.0.0" @@ -3046,7 +2993,7 @@ findup-sync@^2.0.0: findup-sync@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== dependencies: detect-file "^1.0.0" @@ -3056,7 +3003,7 @@ findup-sync@^3.0.0: fined@^1.0.1: version "1.2.0" - resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz" + resolved "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== dependencies: expand-tilde "^2.0.2" @@ -3067,12 +3014,12 @@ fined@^1.0.1: flagged-respawn@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz" + resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -3080,12 +3027,12 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== flush-write-stream@^1.0.2: version "1.1.1" - resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: inherits "^2.0.3" @@ -3093,64 +3040,55 @@ flush-write-stream@^1.0.2: fn.name@1.x.x: version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== for-own@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz" + resolved "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" integrity sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg== dependencies: for-in "^1.0.1" -form-data-encoder@^2.0.1, form-data-encoder@^2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.2.tgz" - integrity sha512-FCaIOVTRA9E0siY6FeXid7D5yrCqpsErplUkE2a1BEiKj1BE9z6FbKB4ntDTwC4NVLie9p+4E9nX4mWwEOT05A== - -form-data@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== formdata-polyfill@^4.0.10: version "4.0.10" - resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== dependencies: fetch-blob "^3.1.2" fragment-cache@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" from2@^2.1.1: version "2.3.0" - resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" @@ -3158,13 +3096,13 @@ from2@^2.1.1: fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== +fs-extra@^11.0.0, fs-extra@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -3172,7 +3110,7 @@ fs-extra@^10.0.0: fs-extra@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== dependencies: graceful-fs "^4.1.2" @@ -3181,34 +3119,25 @@ fs-extra@^4.0.3: fs-extra@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.1.0: +fs-extra@^9.0.0: version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -3218,14 +3147,14 @@ fs-extra@^9.1.0: fs-minipass@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: minipass "^2.6.0" fs-mkdirp-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" integrity sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ== dependencies: graceful-fs "^4.1.11" @@ -3233,12 +3162,12 @@ fs-mkdirp-stream@^1.0.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: version "1.2.13" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== dependencies: bindings "^1.5.0" @@ -3246,7 +3175,7 @@ fsevents@^1.2.7: fstream@~1.0.10: version "1.0.12" - resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" + resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" @@ -3256,7 +3185,7 @@ fstream@~1.0.10: ftp@^0.3.10: version "0.3.10" - resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz" + resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== dependencies: readable-stream "1.1.x" @@ -3264,12 +3193,12 @@ ftp@^0.3.10: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -3277,14 +3206,14 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@~1.2.0: version "1.2.7" - resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz" + resolved "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" integrity sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA== dependencies: ansi "^0.3.0" @@ -3295,26 +3224,17 @@ gauge@~1.2.0: get-caller-file@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" @@ -3323,7 +3243,7 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: get-pkg-repo@^4.0.0: version "4.2.1" - resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== dependencies: "@hutson/parse-repository-url" "^3.0.0" @@ -3333,12 +3253,12 @@ get-pkg-repo@^4.0.0: get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== get-stream@^2.2.0: version "2.3.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== dependencies: object-assign "^4.0.1" @@ -3346,26 +3266,26 @@ get-stream@^2.2.0: get-stream@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.1.0, get-stream@^5.2.0: +get-stream@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -3373,7 +3293,7 @@ get-symbol-description@^1.0.0: get-uri@3: version "3.0.2" - resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz" + resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c" integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== dependencies: "@tootallnate/once" "1" @@ -3385,12 +3305,12 @@ get-uri@3: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== -git-raw-commits@^2.0.0, git-raw-commits@^2.0.8: +git-raw-commits@^2.0.11, git-raw-commits@^2.0.8: version "2.0.11" - resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== dependencies: dargs "^7.0.0" @@ -3401,7 +3321,7 @@ git-raw-commits@^2.0.0, git-raw-commits@^2.0.8: git-remote-origin-url@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== dependencies: gitconfiglocal "^1.0.0" @@ -3409,7 +3329,7 @@ git-remote-origin-url@^2.0.0: git-semver-tags@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== dependencies: meow "^8.0.0" @@ -3417,29 +3337,29 @@ git-semver-tags@^4.1.1: git-up@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz" + resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: is-ssh "^1.4.0" parse-url "^8.1.0" -git-url-parse@13.0.0: - version "13.0.0" - resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.0.0.tgz" - integrity sha512-X1kozCqKL82dMrCLi4vie9SHDC+QugKskAMs4VUbIkhURKg5yDwxDmf6Ixg73J+/xVgK5TXKhzn8a94nHJHpnA== +git-url-parse@13.1.0: + version "13.1.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== dependencies: git-up "^7.0.0" gitconfiglocal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== dependencies: ini "^1.3.2" glob-parent@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" @@ -3447,21 +3367,21 @@ glob-parent@^3.1.0: glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-stream@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz" + resolved "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" integrity sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw== dependencies: extend "^3.0.0" @@ -3477,7 +3397,7 @@ glob-stream@^6.1.0: glob-watcher@^5.0.3: version "5.0.5" - resolved "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz" + resolved "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz#aa6bce648332924d9a8489be41e3e5c52d4186dc" integrity sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw== dependencies: anymatch "^2.0.0" @@ -3490,7 +3410,7 @@ glob-watcher@^5.0.3: glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -3502,21 +3422,21 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: global-dirs@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: ini "^1.3.4" global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + version "3.0.1" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== dependencies: ini "2.0.0" global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" @@ -3525,7 +3445,7 @@ global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" @@ -3534,24 +3454,24 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^13.15.0: - version "13.17.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" -globby@13.1.2: - version "13.1.2" - resolved "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== +globby@13.1.4: + version "13.1.4" + resolved "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -3561,7 +3481,7 @@ globby@13.1.2: globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -3573,49 +3493,29 @@ globby@^11.1.0: glogg@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz" + resolved "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== dependencies: sparkles "^1.0.0" gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" -got@12.3.1: - version "12.3.1" - resolved "https://registry.npmjs.org/got/-/got-12.3.1.tgz" - integrity sha512-tS6+JMhBh4iXMSXF6KkIsRxmloPln31QHDlcb6Ec3bzxjjFJFr/8aXdpyuLmVc9I4i2HyBHYw1QU5K1ruUdpkw== +got@12.6.0, got@^12.1.0: + version "12.6.0" + resolved "https://registry.npmjs.org/got/-/got-12.6.0.tgz#8d382ee5de4432c086e83c133efdd474484f6ac7" + integrity sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ== dependencies: "@sindresorhus/is" "^5.2.0" "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" decompress-response "^6.0.0" - form-data-encoder "^2.0.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -got@^12.1.0: - version "12.4.1" - resolved "https://registry.npmjs.org/got/-/got-12.4.1.tgz" - integrity sha512-Sz1ojLt4zGNkcftIyJKnulZT/yEDvifhUjccHA8QzOuTgPs/+njXYNMFE3jR4/2OODQSSbH8SdnoLCkbh41ieA== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "^2.1.0" + form-data-encoder "^2.1.2" get-stream "^6.0.1" http2-wrapper "^2.1.10" lowercase-keys "^3.0.0" @@ -3624,7 +3524,7 @@ got@^12.1.0: got@^8.3.1: version "8.3.2" - resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz" + resolved "https://registry.npmjs.org/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" @@ -3645,19 +3545,24 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@4.2.10, graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: +graceful-fs@4.2.10: version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -gulp-cli@^2.2.0, gulp-cli@^2.3.0: +gulp-cli@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz" + resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== dependencies: ansi-colors "^1.0.1" @@ -3681,7 +3586,7 @@ gulp-cli@^2.2.0, gulp-cli@^2.3.0: gulp-zip@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz" + resolved "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz#38cc1d4c61bc2ab06b452ce463cbe2adc52b935e" integrity sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw== dependencies: get-stream "^5.2.0" @@ -3692,7 +3597,7 @@ gulp-zip@^5.1.0: gulp@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz" + resolved "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" integrity sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA== dependencies: glob-watcher "^5.0.3" @@ -3702,14 +3607,14 @@ gulp@^4.0.2: gulplog@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz" + resolved "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" integrity sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw== dependencies: glogg "^1.0.0" handlebars@^4.7.7: version "4.7.7" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" @@ -3721,68 +3626,68 @@ handlebars@^4.7.7: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbol-support-x@^1.4.1: version "1.4.2" - resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz" + resolved "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-to-string-tag-x@^1.2.0: version "1.4.1" - resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz" + resolved "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" @@ -3791,7 +3696,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" @@ -3800,12 +3705,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" @@ -3813,48 +3718,48 @@ has-values@^1.0.0: has-yarn@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" + resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== has@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + resolved "https://registry.npmjs.org/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.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" http-cache-semantics@3.8.1: version "3.8.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -3865,7 +3770,7 @@ http-errors@2.0.0: http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -3873,16 +3778,16 @@ http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: debug "4" http2-wrapper@^2.1.10: - version "2.1.11" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.1.11.tgz" - integrity sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ== + version "2.2.0" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" + integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== dependencies: quick-lru "^5.1.1" resolve-alpn "^1.2.0" https-proxy-agent@5, https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3890,34 +3795,34 @@ https-proxy-agent@5, https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3925,22 +3830,22 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-lazy@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -3948,52 +3853,43 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" + resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.1.0.tgz" - integrity sha512-eukdjrBljg9t55ZnvJjvGi1OyYEzVBFsO/8o5d2MV3mc28u3x4X2kS4eJ/+9U10KiREfPkEBSeCrU/S2G/uRtw== +inquirer@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-9.2.0.tgz#930d56d682cda629419e80eb92c45828a0fa5924" + integrity sha512-WWERbVqjsTXjXub1ZW0ZHDit1dyHqy0T9XIkky9TnmKAPrjU9Jkd59nZPK0dUuM3s73GZAZu2Jo4iFU3XSPVLA== dependencies: - ansi-escapes "^5.0.0" - chalk "^5.0.1" + ansi-escapes "^6.0.0" + chalk "^5.2.0" cli-cursor "^4.0.0" cli-width "^4.0.0" external-editor "^3.0.3" - figures "^4.0.1" + figures "^5.0.0" lodash "^4.17.21" - mute-stream "0.0.8" + mute-stream "1.0.0" ora "^6.1.2" run-async "^2.4.0" - rxjs "^7.5.6" + rxjs "^7.8.0" string-width "^5.1.2" strip-ansi "^7.0.1" through "^2.3.6" - wrap-ansi "^8.0.1" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" + wrap-ansi "^8.1.0" -internal-slot@^1.0.5: +internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: get-intrinsic "^1.2.0" @@ -4002,12 +3898,12 @@ internal-slot@^1.0.5: interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== into-stream@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== dependencies: from2 "^2.1.1" @@ -4015,22 +3911,22 @@ into-stream@^3.1.0: invert-kv@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + resolved "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== ip@^1.1.5: version "1.1.8" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== ip@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== is-absolute@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: is-relative "^1.0.0" @@ -4038,21 +3934,21 @@ is-absolute@^1.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" -is-arguments@^1.1.0: +is-arguments@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" @@ -4060,7 +3956,7 @@ is-arguments@^1.1.0: is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" @@ -4069,31 +3965,31 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -4101,71 +3997,59 @@ is-boolean-object@^1.1.0: is-buffer@^1.1.5: version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.5" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.5.tgz" - integrity sha512-ZIWRujF6MvYGkEuHMYtFRkL2wAtFw89EHfKlXrkPkjQZZRWeh9L1q3SV13NIfHnqxugjLvAOkEHx9mb1zcMnEw== - is-ci@3.0.1, is-ci@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" is-ci@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" -is-core-module@^2.11.0: +is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" -is-core-module@^2.5.0, is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - is-data-descriptor@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-descriptor@^0.1.0: version "0.1.6" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" @@ -4174,64 +4058,76 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + resolved "https://registry.npmjs.org/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-docker@^2.0.0, is-docker@^2.1.1: +is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-installed-globally@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: global-dirs "^3.0.0" @@ -4239,98 +4135,98 @@ is-installed-globally@^0.4.0: is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-iojs@^1.0.1: version "1.1.0" - resolved "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz#4c11033b5d5d94d6eab3775dedc9be7d008325f1" integrity sha512-tLn1j3wYSL6DkvEI+V/j0pKohpa5jk+ER74v6S4SgCXnjS0WA+DoZbwZBrrhgwksMvtuwndyGeG5F8YMsoBzSA== is-map@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-natural-number@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz" + resolved "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== is-negated-glob@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" integrity sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug== is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-npm@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz" + resolved "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-object@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -4338,74 +4234,74 @@ is-regex@^1.1.4: is-relative@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: is-unc-path "^1.0.0" is-retry-allowed@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-set@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-ssh@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== dependencies: protocols "^2.0.1" is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-text-path@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" is-typed-array@^1.1.10, is-typed-array@^1.1.9: version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -4416,90 +4312,101 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: is-typedarray@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unc-path@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: unc-path-regex "^0.1.2" is-unicode-supported@^1.1.0, is-unicode-supported@^1.2.0: version "1.3.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== is-valid-glob@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz" + resolved "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" is-yarn-global@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.0.tgz" - integrity sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA== + version "0.4.1" + resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" + integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== isarray@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isarray@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +issue-parser@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== + dependencies: + lodash.capitalize "^4.2.1" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.uniqby "^4.7.0" + isurl@^1.0.0-alpha5: version "1.0.0" - resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz" + resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" @@ -4507,98 +4414,98 @@ isurl@^1.0.0-alpha5: iterate-iterator@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz" + resolved "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz#551b804c9eaa15b847ea6a7cdc2f5bf1ec150f91" integrity sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw== iterate-value@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz" + resolved "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== dependencies: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" js-sdsl@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz" - integrity sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw== + version "4.4.0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-bigint@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" + resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== dependencies: bignumber.js "^9.0.0" json-buffer@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.npmjs.org/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.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1, jsonfile@^6.1.0: +jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -4607,12 +4514,12 @@ jsonfile@^6.0.1, jsonfile@^6.1.0: jsonparse@^1.2.0: version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: array-includes "^3.1.5" @@ -4620,62 +4527,62 @@ jsonparse@^1.2.0: just-debounce@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz" + resolved "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz#2f81a3ad4121a76bc7cb45dbf704c0d76a8e5ddf" integrity sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ== keyv@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" + resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== dependencies: json-buffer "3.0.0" -keyv@^4.0.0: - version "4.5.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz" - integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== +keyv@^4.5.2: + version "4.5.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== dependencies: json-buffer "3.0.1" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + resolved "https://registry.npmjs.org/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.3: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klaw-sync@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" + resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== dependencies: graceful-fs "^4.1.11" kuler@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== last-run@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz" + resolved "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" integrity sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ== dependencies: default-resolution "^2.0.0" @@ -4683,35 +4590,35 @@ last-run@^1.1.0: latest-version@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" + resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== dependencies: package-json "^8.1.0" lazystream@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== dependencies: readable-stream "^2.0.5" lcid@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + resolved "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== dependencies: invert-kv "^1.0.0" lead@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz" + resolved "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" integrity sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow== dependencies: flush-write-stream "^1.0.2" levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -4719,7 +4626,7 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" @@ -4727,7 +4634,7 @@ levn@~0.3.0: liftoff@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz" + resolved "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== dependencies: extend "^3.0.0" @@ -4741,17 +4648,17 @@ liftoff@^3.1.0: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== listenercount@~1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" + resolved "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== load-json-file@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== dependencies: graceful-fs "^4.1.2" @@ -4762,7 +4669,7 @@ load-json-file@^1.0.0: load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" @@ -4772,7 +4679,7 @@ load-json-file@^4.0.0: locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -4780,67 +4687,133 @@ locate-path@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== + lodash.isequal@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + lodash.ismatch@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + lodash.pad@^4.1.0: version "4.5.1" - resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" + resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== lodash.padend@^4.1.0: version "4.6.1" - resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" + resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== lodash.padstart@^4.1.0: version "4.6.1" - resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" + resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== -lodash@4.17.21, lodash@^4, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +lodash@4.17.21, lodash@^4, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== dependencies: chalk "^5.0.0" is-unicode-supported "^1.1.0" logform@^2.3.2, logform@^2.4.0: - version "2.4.2" - resolved "https://registry.npmjs.org/logform/-/logform-2.4.2.tgz" - integrity sha512-W4c9himeAwXEdZ05dQNerhFz2XG80P9Oj0loPUMV23VC2it0orMHQhJm4hdnnor3rd1HsGf6a2lPwBM1zeXHGw== + version "2.5.1" + resolved "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" + integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== dependencies: "@colors/colors" "1.5.0" + "@types/triple-beam" "^1.3.2" fecha "^4.2.0" ms "^2.1.1" safe-stable-stringify "^2.3.1" @@ -4848,60 +4821,55 @@ logform@^2.3.2, logform@^2.4.0: loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lowercase-keys@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== lowercase-keys@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lowercase-keys@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -macos-release@^3.0.1: +macos-release@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/macos-release/-/macos-release-3.1.0.tgz" + resolved "https://registry.npmjs.org/macos-release/-/macos-release-3.1.0.tgz#6165bb0736ae567ed6649e36ce6a24d87cbb7aca" integrity sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA== make-dir@^1.0.0: version "1.3.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" @@ -4909,41 +4877,41 @@ make-dir@^2.1.0: make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-iterator@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz" + resolved "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== dependencies: kind-of "^6.0.2" map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" matchdep@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz" + resolved "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" integrity sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA== dependencies: findup-sync "^2.0.0" @@ -4953,14 +4921,14 @@ matchdep@^2.0.0: memory-stream@0: version "0.0.3" - resolved "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz" + resolved "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz#ebe8dd1c3b8bc38c0e7941e9ddd5aebe6b4de83f" integrity sha512-q0D3m846qY6ZkIt+19ZemU5vH56lpOZZwoJc3AICARKh/menBuayQUjAGPrqtHQQMUYERSdOrej92J9kz7LgYA== dependencies: readable-stream "~1.0.26-2" meow@^8.0.0: version "8.1.2" - resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" @@ -4977,17 +4945,17 @@ meow@^8.0.0: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" @@ -5006,7 +4974,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -5014,51 +4982,56 @@ micromatch@^4.0.2, micromatch@^4.0.4: mime-db@1.52.0, mime-db@^1.28.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@2.1.35, mime-types@^2.1.12: +mime-types@2.1.35: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" @@ -5066,13 +5039,13 @@ minimist-options@4.1.0: kind-of "^6.0.3" minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" @@ -5080,14 +5053,14 @@ minipass@^2.6.0, minipass@^2.9.0: minizlib@^1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" mixin-deep@^1.2.0: version "1.3.2" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" @@ -5095,39 +5068,39 @@ mixin-deep@^1.2.0: "mkdirp@>=0.5 0", mkdirp@^0.5.5: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== modify-values@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multimatch@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== dependencies: "@types/minimatch" "^3.0.3" @@ -5138,22 +5111,22 @@ multimatch@^5.0.0: mute-stdout@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz" + resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== nan@^2.12.1: - version "2.16.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + version "2.17.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== nanomatch@^1.2.9: version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" @@ -5170,65 +5143,65 @@ nanomatch@^1.2.9: natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== netmask@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" + resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== new-github-release-url@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz" + resolved "https://registry.npmjs.org/new-github-release-url/-/new-github-release-url-2.0.0.tgz#335189b91f52bbb9569042a7485900a205a0500b" integrity sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ== dependencies: type-fest "^2.5.1" next-tick@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-domexception@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -node-fetch@3.2.10: - version "3.2.10" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz" - integrity sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA== +node-fetch@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" + integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== dependencies: data-uri-to-buffer "^4.0.0" fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.6.9" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: whatwg-url "^5.0.0" normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -5238,7 +5211,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: normalize-package-data@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -5248,54 +5221,54 @@ normalize-package-data@^3.0.0: normalize-path@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== dependencies: prepend-http "^2.0.0" query-string "^5.0.1" sort-keys "^2.0.0" -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== now-and-later@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz" + resolved "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== dependencies: once "^1.3.2" npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npm-run-path@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== dependencies: path-key "^4.0.0" npmlog@^1.2.0: version "1.2.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz#28e7be619609b53f7ad1dd300a10d64d716268b6" integrity sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ== dependencies: ansi "~0.3.0" @@ -5304,48 +5277,43 @@ npmlog@^1.2.0: number-is-nan@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-inspect@^1.12.3: +object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.3, object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -5355,7 +5323,7 @@ object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.3, object.assign@ object.defaults@^1.0.0, object.defaults@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz" + resolved "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" integrity sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA== dependencies: array-each "^1.0.1" @@ -5365,7 +5333,7 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: object.entries@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" @@ -5374,7 +5342,7 @@ object.entries@^1.1.6: object.fromentries@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" @@ -5383,7 +5351,7 @@ object.fromentries@^2.0.6: object.hasown@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" @@ -5391,7 +5359,7 @@ object.hasown@^1.1.2: object.map@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz" + resolved "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" integrity sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w== dependencies: for-own "^1.0.0" @@ -5399,14 +5367,14 @@ object.map@^1.0.0: object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" object.reduce@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz" + resolved "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" integrity sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw== dependencies: for-own "^1.0.0" @@ -5414,7 +5382,7 @@ object.reduce@^1.0.0: object.values@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -5423,44 +5391,45 @@ object.values@^1.1.6: once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" -open@8.4.0: - version "8.4.0" - resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== +open@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" is-wsl "^2.2.0" open@^7.4.2: version "7.4.2" - resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== dependencies: is-docker "^2.0.0" @@ -5468,7 +5437,7 @@ open@^7.4.2: optionator@^0.8.1: version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -5480,7 +5449,7 @@ optionator@^0.8.1: optionator@^0.9.1: version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -5490,137 +5459,137 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@6.1.2, ora@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz" - integrity sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw== +ora@6.3.0, ora@^6.1.2: + version "6.3.0" + resolved "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz#a314600999f514a989a0904f5c17c8b7c1f7c878" + integrity sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ== dependencies: - bl "^5.0.0" chalk "^5.0.0" cli-cursor "^4.0.0" cli-spinners "^2.6.1" is-interactive "^2.0.0" is-unicode-supported "^1.1.0" log-symbols "^5.1.0" + stdin-discarder "^0.1.0" strip-ansi "^7.0.1" wcwidth "^1.0.1" ordered-read-streams@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz" + resolved "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" integrity sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw== dependencies: readable-stream "^2.0.1" os-locale@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" + resolved "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== dependencies: lcid "^1.0.0" -os-name@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/os-name/-/os-name-5.0.1.tgz" - integrity sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw== +os-name@5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/os-name/-/os-name-5.1.0.tgz#4f5ab5edfa6938b590112714f1570fe79f1d957a" + integrity sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ== dependencies: - macos-release "^3.0.1" + macos-release "^3.1.0" windows-release "^5.0.1" os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-cancelable@^0.4.0: version "0.4.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== p-cancelable@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-event@^2.1.0: version "2.3.1" - resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz" + resolved "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== dependencies: p-timeout "^2.0.1" p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-is-promise@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-timeout@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pac-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz" + resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== dependencies: "@tootallnate/once" "1" @@ -5635,7 +5604,7 @@ pac-proxy-agent@^5.0.0: pac-resolver@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz" + resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== dependencies: degenerator "^3.0.2" @@ -5644,7 +5613,7 @@ pac-resolver@^5.0.0: package-json@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz" + resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.0.tgz#2a22806f1ed7c786c8e6ff26cfe20003bf4c6850" integrity sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg== dependencies: got "^12.1.0" @@ -5654,14 +5623,14 @@ package-json@^8.1.0: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-filepath@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" + resolved "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== dependencies: is-absolute "^1.0.0" @@ -5670,14 +5639,14 @@ parse-filepath@^1.0.1: parse-json@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -5685,7 +5654,7 @@ parse-json@^4.0.0: parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -5695,43 +5664,43 @@ parse-json@^5.0.0: parse-node-version@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse-path@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== dependencies: protocols "^2.0.0" parse-url@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: parse-path "^7.0.0" pascalcase@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== patch-package@^6.5.0: - version "6.5.0" - resolved "https://registry.npmjs.org/patch-package/-/patch-package-6.5.0.tgz" - integrity sha512-tC3EqJmo74yKqfsMzELaFwxOAu6FH6t+FzFOsnWAuARm7/n2xB5AOeOueE221eM9gtMuIKMKpF9tBy/X2mNP0Q== + version "6.5.1" + resolved "https://registry.npmjs.org/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621" + integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA== dependencies: "@yarnpkg/lockfile" "^1.1.0" chalk "^4.1.2" cross-spawn "^6.0.5" find-yarn-workspace-root "^2.0.0" - fs-extra "^7.0.1" + fs-extra "^9.0.0" is-ci "^2.0.0" klaw-sync "^6.0.0" minimist "^1.2.6" @@ -5744,66 +5713,66 @@ patch-package@^6.5.0: path-dirname@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-root-regex@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + resolved "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" integrity sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ== path-root@^0.1.1: version "0.1.1" - resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + resolved "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" integrity sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg== dependencies: path-root-regex "^0.1.0" path-type@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: graceful-fs "^4.1.2" @@ -5812,56 +5781,56 @@ path-type@^1.0.0: path-type@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pend@~1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.0.0, pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pify@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== plugin-error@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz" + resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== dependencies: ansi-colors "^1.0.1" @@ -5871,66 +5840,66 @@ plugin-error@^1.0.1: posix-character-classes@^0.1.0: version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prepend-http@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^2.0.5: - version "2.7.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-hrtime@^1.0.0: version "1.0.3" - resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" + resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process-nextick-args@~1.0.6: version "1.0.7" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" integrity sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw== -promise.allsettled@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz" - integrity sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ== +promise.allsettled@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz#8dc8ba8edf429feb60f8e81335b920e109c94b6e" + integrity sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg== dependencies: - array.prototype.map "^1.0.4" + array.prototype.map "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" iterate-value "^1.0.2" prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -5939,17 +5908,17 @@ prop-types@^15.8.1: proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== proxy-agent@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz" + resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== dependencies: agent-base "^6.0.0" @@ -5963,12 +5932,12 @@ proxy-agent@5.0.0: proxy-from-env@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" @@ -5976,7 +5945,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -5984,7 +5953,7 @@ pump@^3.0.0: pumpify@^1.3.5: version "1.5.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" @@ -5992,25 +5961,25 @@ pumpify@^1.3.5: pump "^2.0.0" punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== pupa@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz" + resolved "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== dependencies: escape-goat "^4.0.0" q@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== query-string@^5.0.1: version "5.1.1" - resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" + resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== dependencies: decode-uri-component "^0.2.0" @@ -6019,23 +5988,23 @@ query-string@^5.0.1: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== raw-body@^2.2.0: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + version "2.5.2" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -6044,7 +6013,7 @@ raw-body@^2.2.0: rc@1.2.8, rc@^1.2.7: version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -6054,12 +6023,12 @@ rc@1.2.8, rc@^1.2.7: react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== read-pkg-up@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== dependencies: find-up "^1.0.0" @@ -6067,7 +6036,7 @@ read-pkg-up@^1.0.1: read-pkg-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== dependencies: find-up "^2.0.0" @@ -6075,7 +6044,7 @@ read-pkg-up@^3.0.0: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -6084,7 +6053,7 @@ read-pkg-up@^7.0.1: read-pkg@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== dependencies: load-json-file "^1.0.0" @@ -6093,7 +6062,7 @@ read-pkg@^1.0.0: read-pkg@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== dependencies: load-json-file "^4.0.0" @@ -6102,7 +6071,7 @@ read-pkg@^3.0.0: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -6112,7 +6081,7 @@ read-pkg@^5.2.0: readable-stream@1.1.x: version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" @@ -6121,18 +6090,18 @@ readable-stream@1.1.x: string_decoder "~0.10.x" "readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -6144,7 +6113,7 @@ readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2. readable-stream@~1.0.26-2: version "1.0.34" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" @@ -6154,7 +6123,7 @@ readable-stream@~1.0.26-2: readable-stream@~2.1.5: version "2.1.5" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" integrity sha512-NkXT2AER7VKXeXtJNSaWLpWIhmtSE3K2PguaLEeWr4JILghcIKqoLt1A3wHrnpDC5+ekf8gfk1GKWkFXe4odMw== dependencies: buffer-shims "^1.0.0" @@ -6167,7 +6136,7 @@ readable-stream@~2.1.5: readdirp@^2.2.1: version "2.2.1" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" @@ -6176,14 +6145,14 @@ readdirp@^2.2.1: rechoir@^0.6.2: version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" redent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" @@ -6191,67 +6160,62 @@ redent@^3.0.0: regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + version "1.5.0" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + define-properties "^1.2.0" + functions-have-names "^1.2.3" registry-auth-token@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz" - integrity sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA== + version "5.0.2" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== dependencies: - "@pnpm/npm-conf" "^1.0.4" + "@pnpm/npm-conf" "^2.1.0" registry-url@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" + resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== dependencies: rc "1.2.8" release-it@^15.0.0: - version "15.4.1" - resolved "https://registry.npmjs.org/release-it/-/release-it-15.4.1.tgz" - integrity sha512-w6adXfE+bN/fdcG1KehgS7gYcTfZLYIPml4jPOUEtYQ6NJyaiCtCF/ks032w1jf6EUgvGgWruRP+2TyyyDDBgA== + version "15.10.3" + resolved "https://registry.npmjs.org/release-it/-/release-it-15.10.3.tgz#9d0a832083c070958cdd0727d3053d45ea344e85" + integrity sha512-OSdHOg76gwkpLbSLBK09GZQj5XWXwBP+S6v//rSoQKkjqklaCLK04Gl5NkTwNrQOHHiihs4ToesDNh2+w55k3w== dependencies: "@iarna/toml" "2.2.5" - "@octokit/rest" "19.0.4" + "@octokit/rest" "19.0.7" async-retry "1.3.3" - chalk "5.0.1" - cosmiconfig "7.0.1" - execa "6.1.0" - form-data "4.0.0" - git-url-parse "13.0.0" - globby "13.1.2" - got "12.3.1" - inquirer "9.1.0" + chalk "5.2.0" + cosmiconfig "8.1.3" + execa "7.1.1" + git-url-parse "13.1.0" + globby "13.1.4" + got "12.6.0" + inquirer "9.2.0" is-ci "3.0.1" + issue-parser "6.0.0" lodash "4.17.21" mime-types "2.1.35" new-github-release-url "2.0.0" - node-fetch "3.2.10" - open "8.4.0" - ora "6.1.2" - os-name "5.0.1" - promise.allsettled "1.0.5" + node-fetch "3.3.1" + open "9.1.0" + ora "6.3.0" + os-name "5.1.0" + promise.allsettled "1.0.6" proxy-agent "5.0.0" - semver "7.3.7" + semver "7.5.0" shelljs "0.8.5" update-notifier "6.0.2" url-join "5.0.0" @@ -6260,7 +6224,7 @@ release-it@^15.0.0: remove-bom-buffer@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz" + resolved "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== dependencies: is-buffer "^1.1.5" @@ -6268,7 +6232,7 @@ remove-bom-buffer@^3.0.0: remove-bom-stream@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz" + resolved "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" integrity sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA== dependencies: remove-bom-buffer "^3.0.0" @@ -6277,27 +6241,27 @@ remove-bom-stream@^1.2.0: remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== repeat-element@^1.1.2: version "1.1.4" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== replace-ext@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz" + resolved "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== replace-homedir@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz" + resolved "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz#e87f6d513b928dde808260c12be7fec6ff6e798c" integrity sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg== dependencies: homedir-polyfill "^1.0.1" @@ -6306,32 +6270,32 @@ replace-homedir@^1.0.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== requireindex@~1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz" + resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== resolve-alpn@^1.2.0: version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" @@ -6339,45 +6303,36 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-global@1.0.0, resolve-global@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== dependencies: global-dirs "^0.1.1" resolve-options@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz" + resolved "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" integrity sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A== dependencies: value-or-function "^3.0.0" resolve-url@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.1: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.1, resolve@^1.4.0: version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: is-core-module "^2.11.0" @@ -6386,7 +6341,7 @@ resolve@^1.22.1: resolve@^2.0.0-next.4: version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: is-core-module "^2.9.0" @@ -6395,28 +6350,21 @@ resolve@^2.0.0-next.4: responselike@1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - responselike@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" + resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: lowercase-keys "^3.0.0" restore-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" @@ -6424,65 +6372,72 @@ restore-cursor@^4.0.0: ret@~0.1.10: version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@2, rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + run-async@^2.4.0: version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -rxjs@^7.5.6: - version "7.5.6" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz" - integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== +rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" @@ -6491,67 +6446,74 @@ safe-regex-test@^1.0.0: safe-regex@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" safe-stable-stringify@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" - integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== seek-bzip@^1.0.5: version "1.0.6" - resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz" + resolved "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== dependencies: commander "^2.8.1" semver-diff@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz" + resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: semver "^7.3.5" semver-greatest-satisfied-range@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz" + resolved "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" integrity sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ== dependencies: sver-compat "^1.5.0" "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.5.0, semver@^5.6.0: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.3.7, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +semver@7.3.8: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@7.5.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.5.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" semver@^6.0.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/set-value/-/set-value-2.0.1.tgz" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" @@ -6561,41 +6523,41 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@~1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shelljs@0.8.5, shelljs@^0.8.4: version "0.8.5" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" @@ -6604,7 +6566,7 @@ shelljs@0.8.5, shelljs@^0.8.4: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -6613,39 +6575,39 @@ side-channel@^1.0.4: signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" slash@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== snapdragon-node@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" @@ -6654,14 +6616,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" @@ -6675,7 +6637,7 @@ snapdragon@^0.8.1: socks-proxy-agent@5, socks-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== dependencies: agent-base "^6.0.2" @@ -6683,37 +6645,37 @@ socks-proxy-agent@5, socks-proxy-agent@^5.0.0: socks "^2.3.3" socks@^2.3.3: - version "2.7.0" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + version "2.7.1" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" smart-buffer "^4.2.0" sort-keys-length@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz" + resolved "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== dependencies: sort-keys "^1.0.0" sort-keys@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== dependencies: is-plain-obj "^1.0.0" source-map-resolve@^0.5.0: version "0.5.3" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + resolved "https://registry.npmjs.org/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" @@ -6724,84 +6686,84 @@ source-map-resolve@^0.5.0: source-map-url@^0.4.0: version "0.4.1" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.6: version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sparkles@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz" + resolved "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.13" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^3.0.0: version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" split@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" splitargs@0: version "0.0.7" - resolved "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz" + resolved "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz#fe9f7ae657371b33b10cb80da143cf8249cf6b3b" integrity sha512-UUFYD2oWbNwULH6WoVtLUOw8ch586B+HUqcsAjjjeoBQAM1bD4wZRXu01koaxyd8UeYpybWqW4h+lO1Okv40Tg== stack-trace@0.0.10, stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== static-extend@^0.1.1: version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" @@ -6809,27 +6771,41 @@ static-extend@^0.1.1: statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stdin-discarder@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" + integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== + dependencies: + bl "^5.0.0" + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + stream-exhaust@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz" + resolved "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw== stream-shift@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== strict-uri-encode@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" @@ -6838,7 +6814,7 @@ string-width@^1.0.1, string-width@^1.0.2: string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -6847,7 +6823,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -6856,7 +6832,7 @@ string-width@^5.0.1, string-width@^5.1.2: string.prototype.matchall@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" @@ -6870,43 +6846,25 @@ string.prototype.matchall@^4.0.8: string.prototype.trim@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - string.prototype.trimend@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - string.prototype.trimstart@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" @@ -6915,119 +6873,119 @@ string.prototype.trimstart@^1.0.6: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.npmjs.org/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.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" strip-bom@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-dirs@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" + resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== dependencies: is-natural-number "^4.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== strip-outer@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz" + resolved "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: escape-string-regexp "^1.0.2" supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== sver-compat@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz" + resolved "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" integrity sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg== dependencies: es6-iterator "^2.0.1" @@ -7035,7 +6993,7 @@ sver-compat@^1.5.0: tar-stream@^1.5.2: version "1.6.2" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== dependencies: bl "^1.0.0" @@ -7048,7 +7006,7 @@ tar-stream@^1.5.2: tar@^4: version "4.4.19" - resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== dependencies: chownr "^1.1.4" @@ -7061,22 +7019,22 @@ tar@^4: text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-hex@1.0.x: version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2-filter@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" + resolved "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== dependencies: through2 "~2.0.0" @@ -7084,7 +7042,7 @@ through2-filter@^3.0.0: through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" @@ -7092,7 +7050,7 @@ through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: through2@^3.0.1: version "3.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== dependencies: inherits "^2.0.4" @@ -7100,36 +7058,41 @@ through2@^3.0.1: through2@^4.0.0: version "4.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== dependencies: readable-stream "3" through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== time-stamp@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz" + resolved "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" integrity sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw== timed-out@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" + resolved "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-absolute-glob@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz" + resolved "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" integrity sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA== dependencies: is-absolute "^1.0.0" @@ -7137,19 +7100,19 @@ to-absolute-glob@^2.0.0: to-buffer@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-object-path@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" @@ -7157,14 +7120,14 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" @@ -7174,46 +7137,46 @@ to-regex@^3.0.1, to-regex@^3.0.2: to-through@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz" + resolved "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" integrity sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q== dependencies: through2 "^2.0.3" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== "traverse@>=0.3.0 <0.4": version "0.3.9" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trim-repeated@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz" + resolved "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== dependencies: escape-string-regexp "^1.0.2" triple-beam@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== ts-interface-builder@^0.3.3: version "0.3.3" - resolved "https://registry.npmjs.org/ts-interface-builder/-/ts-interface-builder-0.3.3.tgz" + resolved "https://registry.npmjs.org/ts-interface-builder/-/ts-interface-builder-0.3.3.tgz#8b8f84677370a2660ae07fb556de59d06181a6c2" integrity sha512-WHQwVBy0+Sv/jcHhKlyFgTyEVTM0GEPEw+gLmOYlZiJC1/eh5ah2EHSw7o+RUrl2grjEAMU6MTOItCuQIVJvnQ== dependencies: commander "^2.12.2" @@ -7223,12 +7186,12 @@ ts-interface-builder@^0.3.3: ts-interface-checker@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-1.0.2.tgz" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-1.0.2.tgz#63f73a098b0ed34b982df1f490c54890e8e5e0b3" integrity sha512-4IKKvhZRXhvtYF/mtu+OCfBqJKV6LczUq4kQYcpT+iSB7++R9+giWnp2ecwWMIcnG16btVOkXFnoxLSYMN1Q1g== ts-morph@^9.1.0: version "9.1.0" - resolved "https://registry.npmjs.org/ts-morph/-/ts-morph-9.1.0.tgz" + resolved "https://registry.npmjs.org/ts-morph/-/ts-morph-9.1.0.tgz#10d2088387c71f3c674f82492a3cec1e3538f0dd" integrity sha512-sei4u651MBenr27sD6qLDXN3gZ4thiX71E3qV7SuVtDas0uvK2LtgZkIYUf9DKm/fLJ6AB/+yhRJ1vpEBJgy7Q== dependencies: "@dsherret/to-absolute-glob" "^2.0.2" @@ -7237,7 +7200,7 @@ ts-morph@^9.1.0: ts-node@^10.8.1: version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -7256,7 +7219,7 @@ ts-node@^10.8.1: tsconfig-paths@^3.14.1: version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" @@ -7266,78 +7229,83 @@ tsconfig-paths@^3.14.1: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.1, tslib@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + version "2.5.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.1, type-fest@^1.0.2: +type-fest@^1.0.1: version "1.4.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^2.13.0, type-fest@^2.5.1: version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +type-fest@^3.0.0: + version "3.10.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-3.10.0.tgz#d75f17a22be8816aea6315ab2739fe1c0c211863" + integrity sha512-hmAPf1datm+gt3c2mvu0sJyhFy6lTkIGf0GzyaZWxRLnabQfPUqg6tF95RPg6sLxKI7nFLGdFxBcf2/7+GXI+A== + type@^1.0.1: version "1.2.0" - resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.7.2: version "2.7.2" - resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + resolved "https://registry.npmjs.org/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" @@ -7346,39 +7314,44 @@ typed-array-length@^1.0.4: typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^3.0.0: version "3.9.10" - resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz" + resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== -typescript@^4.5.2, typescript@^4.6.4: - version "4.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz" - integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== +typescript@^4.5.2: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +"typescript@^4.6.4 || ^5.0.0": + version "5.0.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== typescript@~4.1.3: version "4.1.6" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.1.6.tgz" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.1.6.tgz#1becd85d77567c3c741172339e93ce2e69932138" integrity sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow== uglify-js@^3.1.4: - version "3.17.0" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz" - integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + version "3.17.4" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -7388,7 +7361,7 @@ unbox-primitive@^1.0.2: unbzip2-stream@^1.0.9: version "1.4.3" - resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" @@ -7396,17 +7369,17 @@ unbzip2-stream@^1.0.9: unc-path-regex@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== undertaker-registry@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz" + resolved "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" integrity sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw== undertaker@^1.2.1: version "1.3.0" - resolved "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz" + resolved "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz#363a6e541f27954d5791d6fa3c1d321666f86d18" integrity sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg== dependencies: arr-flatten "^1.0.1" @@ -7422,7 +7395,7 @@ undertaker@^1.2.1: union-value@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" @@ -7432,7 +7405,7 @@ union-value@^1.0.0: unique-stream@^2.0.2: version "2.3.1" - resolved "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" + resolved "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== dependencies: json-stable-stringify-without-jsonify "^1.0.1" @@ -7440,42 +7413,47 @@ unique-stream@^2.0.2: unique-string@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: crypto-random-string "^4.0.0" universal-user-agent@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== universalify@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + unzipper@^0.8.13: version "0.8.14" - resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz" + resolved "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== dependencies: big-integer "^1.6.17" @@ -7490,12 +7468,12 @@ unzipper@^0.8.13: upath@^1.1.1: version "1.2.0" - resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== update-notifier@6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz" + resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== dependencies: boxen "^7.0.0" @@ -7515,63 +7493,63 @@ update-notifier@6.0.2: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-join@0: version "0.0.1" - resolved "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz" + resolved "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz#1db48ad422d3402469a87f7d97bdebfe4fb1e3c8" integrity sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw== url-join@5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz" + resolved "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== url-parse-lax@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" url-to-options@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz" + resolved "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== use@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8flags@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" + resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== dependencies: homedir-polyfill "^1.0.1" validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -7579,12 +7557,12 @@ validate-npm-package-license@^3.0.1: value-or-function@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz" + resolved "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" integrity sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg== vinyl-fs@^3.0.0: version "3.0.3" - resolved "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz" + resolved "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== dependencies: fs-mkdirp-stream "^1.0.0" @@ -7607,7 +7585,7 @@ vinyl-fs@^3.0.0: vinyl-sourcemap@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz" + resolved "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" integrity sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA== dependencies: append-buffer "^1.0.2" @@ -7620,7 +7598,7 @@ vinyl-sourcemap@^1.1.0: vinyl@^2.0.0, vinyl@^2.1.0: version "2.2.1" - resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz" + resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== dependencies: clone "^2.1.1" @@ -7630,34 +7608,34 @@ vinyl@^2.0.0, vinyl@^2.1.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vm2@^3.9.8: - version "3.9.11" - resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz" - integrity sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg== +vm2@^3.9.17: + version "3.9.17" + resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz#251b165ff8a0e034942b5181057305e39570aeab" + integrity sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw== dependencies: acorn "^8.7.0" acorn-walk "^8.2.0" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" web-streams-polyfill@^3.0.3: version "3.2.1" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -7665,7 +7643,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -7676,12 +7654,12 @@ which-boxed-primitive@^1.0.2: which-module@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz" + resolved "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== which-typed-array@^1.1.9: version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== dependencies: available-typed-arrays "^1.0.5" @@ -7693,45 +7671,45 @@ which-typed-array@^1.1.9: which@^1.0.9, which@^1.2.14, which@^1.2.9: version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== dependencies: string-width "^5.0.1" wildcard-match@5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.2.tgz" + resolved "https://registry.npmjs.org/wildcard-match/-/wildcard-match-5.1.2.tgz#66b438001391674d8599b45da051e0bd9f33cd2a" integrity sha512-qNXwI591Z88c8bWxp+yjV60Ch4F8Riawe3iGxbzquhy8Xs9m+0+SLFBGb/0yCTIDElawtaImC37fYZ+dr32KqQ== window-size@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz" + resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" integrity sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw== windows-release@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/windows-release/-/windows-release-5.0.1.tgz" - integrity sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw== + version "5.1.0" + resolved "https://registry.npmjs.org/windows-release/-/windows-release-5.1.0.tgz#fc56e8c53d970bd63ded965c85b2fbeacf7d80da" + integrity sha512-CddHecz5dt0ngTjGPP1uYr9Tjl4qq5rEKNk8UGb8XCdngNXI+GRYvqelD055FdiUgqODZz3R/5oZWYldPtXQpA== dependencies: execa "^5.1.1" winston-transport@^4.5.0: version "4.5.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== dependencies: logform "^2.3.2" @@ -7740,7 +7718,7 @@ winston-transport@^4.5.0: winston@^3.3.3: version "3.8.2" - resolved "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz" + resolved "https://registry.npmjs.org/winston/-/winston-3.8.2.tgz#56e16b34022eb4cff2638196d9646d7430fdad50" integrity sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew== dependencies: "@colors/colors" "1.5.0" @@ -7757,17 +7735,17 @@ winston@^3.3.3: word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== wrap-ansi@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== dependencies: string-width "^1.0.1" @@ -7775,17 +7753,17 @@ wrap-ansi@^2.0.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz" - integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" string-width "^5.0.1" @@ -7793,12 +7771,12 @@ wrap-ansi@^8.0.1: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -7808,57 +7786,57 @@ write-file-atomic@^3.0.3: xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz" + resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== xregexp@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz" + resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.0, y18n@^3.2.1: version "3.2.2" - resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz" + resolved "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0, yaml@^1.10.2: +yaml@^1.10.2: version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@21.1.1, yargs-parser@^21.0.0: +yargs-parser@21.1.1, yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz#7ede329c1d8cdbbe209bd25cdb990e9b1ebbb394" integrity sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA== dependencies: camelcase "^3.0.0" @@ -7866,7 +7844,7 @@ yargs-parser@^5.0.1: yargs@^16.2.0: version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -7878,21 +7856,21 @@ yargs@^16.2.0: yargs-parser "^20.2.2" yargs@^17.0.0: - version "17.5.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^21.0.0" + yargs-parser "^21.1.1" yargs@^3.6.0: version "3.32.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" integrity sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg== dependencies: camelcase "^2.0.1" @@ -7905,7 +7883,7 @@ yargs@^3.6.0: yargs@^7.1.0: version "7.1.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz" + resolved "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz#63a0a5d42143879fdbb30370741374e0641d55db" integrity sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA== dependencies: camelcase "^3.0.0" @@ -7922,9 +7900,9 @@ yargs@^7.1.0: y18n "^3.2.1" yargs-parser "^5.0.1" -yauzl@^2.10.0, yauzl@^2.4.2: +yauzl@^2.4.2: version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" @@ -7932,27 +7910,27 @@ yauzl@^2.10.0, yauzl@^2.4.2: yazl@^2.5.1: version "2.5.1" - resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz" + resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== dependencies: buffer-crc32 "~0.2.3" yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yuv-buffer@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/yuv-buffer/-/yuv-buffer-1.0.0.tgz" + resolved "https://registry.npmjs.org/yuv-buffer/-/yuv-buffer-1.0.0.tgz#09a454858d74df2bc31cd588edd70ffcb86bfc9a" integrity sha512-5r5u7g7Dbdrwao/z8c4harQIpZwaNuzXjQXtgdFxTjr5Pm2eMmxIuckkKOONEM7fkiMNkeffXs6EPNESvAVzVg== yuv-canvas@1.2.6: version "1.2.6" - resolved "https://registry.npmjs.org/yuv-canvas/-/yuv-canvas-1.2.6.tgz" + resolved "https://registry.npmjs.org/yuv-canvas/-/yuv-canvas-1.2.6.tgz#246452196fca9e581f09abed9b90c94aff6014e2" integrity sha512-luNSFyGOPIJP4L8LUSgaBwWoAdmm45lCY44jhDgyREHcjnAtnR5Poj0C821UJ2CPD5GVIlfHOeFO2PDRCl2w/A== From e8157ce8458ced1a27896767ee4b9cb63cf10628 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 11 May 2023 11:35:46 +0800 Subject: [PATCH 38/74] fix: `removeListener` not working with same callback --- package.json | 1 + patches/eslint+8.23.1.patch | 13 -- .../extension/IAgoraMediaEngineExtension.ts | 3 +- .../extension/IAgoraMediaPlayerExtension.ts | 3 +- .../extension/IAgoraMediaRecorderExtension.ts | 3 +- .../IAgoraMusicContentCenterExtension.ts | 3 +- .../extension/IAgoraRtcEngineExtension.ts | 3 +- ts/Private/internal/IrisApiEngine.ts | 5 +- ts/Private/internal/MediaEngineInternal.ts | 38 +--- ts/Private/internal/MediaPlayerInternal.ts | 38 +--- ts/Private/internal/MediaRecorderInternal.ts | 38 +--- .../internal/MusicContentCenterInternal.ts | 38 +--- ts/Private/internal/RtcEngineExInternal.ts | 38 +--- ts/Private/internal/emitter/EventEmitter.d.ts | 164 ------------------ ts/Private/internal/emitter/EventEmitter.js | 124 ------------- yarn.lock | 5 + 16 files changed, 33 insertions(+), 484 deletions(-) delete mode 100644 patches/eslint+8.23.1.patch delete mode 100644 ts/Private/internal/emitter/EventEmitter.d.ts delete mode 100644 ts/Private/internal/emitter/EventEmitter.js diff --git a/package.json b/package.json index cd08e1189..07662ea41 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,7 @@ "buffer": "^6.0.3", "cross-env": "^7.0.3", "download": "^8.0.0", + "eventemitter3": "^5.0.1", "fs-extra": "^11.1.1", "gulp": "^4.0.2", "json-bigint": "^1.0.0", diff --git a/patches/eslint+8.23.1.patch b/patches/eslint+8.23.1.patch deleted file mode 100644 index 4affef907..000000000 --- a/patches/eslint+8.23.1.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/eslint/lib/linter/linter.js b/node_modules/eslint/lib/linter/linter.js -index a29ce92..2ee2ecf 100644 ---- a/node_modules/eslint/lib/linter/linter.js -+++ b/node_modules/eslint/lib/linter/linter.js -@@ -41,7 +41,7 @@ const { getRuleFromConfig } = require("../config/flat-config-helpers"); - const { FlatConfigArray } = require("../config/flat-config-array"); - - const debug = require("debug")("eslint:linter"); --const MAX_AUTOFIX_PASSES = 10; -+const MAX_AUTOFIX_PASSES = Number.MAX_VALUE; - const DEFAULT_PARSER_NAME = "espree"; - const DEFAULT_ECMA_VERSION = 5; - const commentParser = new ConfigCommentParser(); diff --git a/ts/Private/extension/IAgoraMediaEngineExtension.ts b/ts/Private/extension/IAgoraMediaEngineExtension.ts index e30442f81..80599fc49 100644 --- a/ts/Private/extension/IAgoraMediaEngineExtension.ts +++ b/ts/Private/extension/IAgoraMediaEngineExtension.ts @@ -3,7 +3,6 @@ import { IVideoEncodedFrameObserver, IVideoFrameObserver, } from '../AgoraMediaBase'; -import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaEngineEvent = IAudioFrameObserver & IVideoFrameObserver & @@ -29,7 +28,7 @@ declare module '../IAgoraMediaEngine' { addListener( eventType: EventType, listener: IMediaEngineEvent[EventType] - ): EmitterSubscription; + ): void; /** * Removes the specified IMediaEngineEvent listener. diff --git a/ts/Private/extension/IAgoraMediaPlayerExtension.ts b/ts/Private/extension/IAgoraMediaPlayerExtension.ts index fead93a63..aaff0760a 100644 --- a/ts/Private/extension/IAgoraMediaPlayerExtension.ts +++ b/ts/Private/extension/IAgoraMediaPlayerExtension.ts @@ -1,7 +1,6 @@ import { IAudioPcmFrameSink, IAudioSpectrumObserver } from '../AgoraMediaBase'; import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; -import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaPlayerEvent = IMediaPlayerSourceObserver & IAudioPcmFrameSink & @@ -28,7 +27,7 @@ declare module '../IAgoraMediaPlayer' { addListener( eventType: EventType, listener: IMediaPlayerEvent[EventType] - ): EmitterSubscription; + ): void; /** * Removes the specified IMediaPlayerEvent listener. diff --git a/ts/Private/extension/IAgoraMediaRecorderExtension.ts b/ts/Private/extension/IAgoraMediaRecorderExtension.ts index c3523c838..1cab3894f 100644 --- a/ts/Private/extension/IAgoraMediaRecorderExtension.ts +++ b/ts/Private/extension/IAgoraMediaRecorderExtension.ts @@ -1,5 +1,4 @@ import { IMediaRecorderObserver } from '../AgoraMediaBase'; -import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMediaRecorderEvent = IMediaRecorderObserver; @@ -23,7 +22,7 @@ declare module '../IAgoraMediaRecorder' { addListener( eventType: EventType, listener: IMediaRecorderEvent[EventType] - ): EmitterSubscription; + ): void; /** * Removes the specified IMediaRecorderEvent listener. diff --git a/ts/Private/extension/IAgoraMusicContentCenterExtension.ts b/ts/Private/extension/IAgoraMusicContentCenterExtension.ts index 6525f3e25..85a83f44b 100644 --- a/ts/Private/extension/IAgoraMusicContentCenterExtension.ts +++ b/ts/Private/extension/IAgoraMusicContentCenterExtension.ts @@ -1,5 +1,4 @@ import { IMusicContentCenterEventHandler } from '../IAgoraMusicContentCenter'; -import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IMusicContentCenterEvent = IMusicContentCenterEventHandler; @@ -15,7 +14,7 @@ declare module '../IAgoraMusicContentCenter' { addListener( eventType: EventType, listener: IMusicContentCenterEvent[EventType] - ): EmitterSubscription; + ): void; /** * @ignore diff --git a/ts/Private/extension/IAgoraRtcEngineExtension.ts b/ts/Private/extension/IAgoraRtcEngineExtension.ts index b9f6f043d..0ad310887 100644 --- a/ts/Private/extension/IAgoraRtcEngineExtension.ts +++ b/ts/Private/extension/IAgoraRtcEngineExtension.ts @@ -5,7 +5,6 @@ import { IMetadataObserver, IRtcEngineEventHandler, } from '../IAgoraRtcEngine'; -import type { EmitterSubscription } from '../internal/emitter/EventEmitter'; export type IRtcEngineEvent = IRtcEngineEventHandler & IDirectCdnStreamingEventHandler & @@ -33,7 +32,7 @@ declare module '../IAgoraRtcEngine' { addListener( eventType: EventType, listener: IRtcEngineEvent[EventType] - ): EmitterSubscription; + ): void; /** * Removes the specified IRtcEngineEvent listener. diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index 526f434f8..5d5c7381b 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -1,3 +1,4 @@ +import EventEmitter from 'eventemitter3'; import JSON from 'json-bigint'; import { AgoraEnv } from '../../Utils'; @@ -52,11 +53,9 @@ import { MusicContentCenterInternal, } from './MusicContentCenterInternal'; import { RtcEngineExInternal } from './RtcEngineExInternal'; -import type { EventEmitter as IEventEmitter } from './emitter/EventEmitter'; -import EventEmitter from './emitter/EventEmitter'; // @ts-ignore -export const DeviceEventEmitter: IEventEmitter = new EventEmitter(); +export const DeviceEventEmitter: EventEmitter = new EventEmitter(); const AgoraRtcNg = AgoraEnv.AgoraElectronBridge; AgoraRtcNg.OnEvent('call_back_with_buffer', (...params: any) => { diff --git a/ts/Private/internal/MediaEngineInternal.ts b/ts/Private/internal/MediaEngineInternal.ts index 04687369f..8a531cf75 100644 --- a/ts/Private/internal/MediaEngineInternal.ts +++ b/ts/Private/internal/MediaEngineInternal.ts @@ -19,25 +19,11 @@ import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import type { EmitterSubscription } from './emitter/EventEmitter'; export class MediaEngineInternal extends IMediaEngineImpl { static _audio_frame_observers: IAudioFrameObserver[] = []; static _video_frame_observers: IVideoFrameObserver[] = []; static _video_encoded_frame_observers: IVideoEncodedFrameObserver[] = []; - private _events: Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - > = new Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - >(); override registerAudioFrameObserver(observer: IAudioFrameObserver): number { if ( @@ -144,7 +130,7 @@ export class MediaEngineInternal extends IMediaEngineImpl { addListener( eventType: EventType, listener: IMediaEngineEvent[EventType] - ): EmitterSubscription { + ) { this._addListenerPreCheck(eventType); const callback = (...data: any[]) => { if (data[0] !== EVENT_TYPE.IMediaEngine) { @@ -158,35 +144,19 @@ export class MediaEngineInternal extends IMediaEngineImpl { data[1] ); }; - const subscription = DeviceEventEmitter.addListener(eventType, callback); - this._events.set(listener, { eventType, subscription }); - return subscription; + DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, listener: IMediaEngineEvent[EventType] ) { - if (!this._events.has(listener)) return; - this._events.get(listener)!.subscription.remove(); - this._events.delete(listener); + DeviceEventEmitter.removeListener(eventType, listener); } removeAllListeners( eventType?: EventType ) { - if (eventType === undefined) { - this._events.forEach((value) => { - DeviceEventEmitter.removeAllListeners(value.eventType); - }); - this._events.clear(); - } else { - DeviceEventEmitter.removeAllListeners(eventType); - this._events.forEach((value, key) => { - if (value.eventType === eventType) { - this._events.delete(key); - } - }); - } + DeviceEventEmitter.removeAllListeners(eventType); } } diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index 7705fbd99..edbc9f6d3 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -34,7 +34,6 @@ const checkers = createCheckers( ); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import type { EmitterSubscription } from './emitter/EventEmitter'; export class MediaPlayerInternal extends IMediaPlayerImpl { static _source_observers: Map = new Map< @@ -50,19 +49,6 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { static _audio_spectrum_observers: Map = new Map(); private readonly _mediaPlayerId: number; - private _events: Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - > = new Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - >(); constructor(mediaPlayerId: number) { super(); @@ -137,7 +123,7 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { addListener( eventType: EventType, listener: IMediaPlayerEvent[EventType] - ): EmitterSubscription { + ): void { this._addListenerPreCheck(eventType); const callback = (...data: any[]) => { if (data[0] !== EVENT_TYPE.IMediaPlayer) { @@ -166,36 +152,20 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { ); } }; - const subscription = DeviceEventEmitter.addListener(eventType, callback); - this._events.set(listener, { eventType, subscription }); - return subscription; + DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, listener: IMediaPlayerEvent[EventType] ) { - if (!this._events.has(listener)) return; - this._events.get(listener)!.subscription.remove(); - this._events.delete(listener); + DeviceEventEmitter.removeListener(eventType); } removeAllListeners( eventType?: EventType ) { - if (eventType === undefined) { - this._events.forEach((value) => { - DeviceEventEmitter.removeAllListeners(value.eventType); - }); - this._events.clear(); - } else { - DeviceEventEmitter.removeAllListeners(eventType); - this._events.forEach((value, key) => { - if (value.eventType === eventType) { - this._events.delete(key); - } - }); - } + DeviceEventEmitter.removeAllListeners(eventType); } override getMediaPlayerId(): number { diff --git a/ts/Private/internal/MediaRecorderInternal.ts b/ts/Private/internal/MediaRecorderInternal.ts index cc8bc3dc1..29e4546af 100644 --- a/ts/Private/internal/MediaRecorderInternal.ts +++ b/ts/Private/internal/MediaRecorderInternal.ts @@ -12,7 +12,6 @@ import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; -import type { EmitterSubscription } from './emitter/EventEmitter'; export class MediaRecorderInternal extends IMediaRecorderImpl { static _observers: Map = new Map< @@ -20,19 +19,6 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { IMediaRecorderObserver >(); private readonly _nativeHandle: string; - private _events: Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - > = new Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - >(); constructor(nativeHandle: string) { super(); @@ -77,7 +63,7 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { addListener( eventType: EventType, listener: IMediaRecorderEvent[EventType] - ): EmitterSubscription { + ): void { this._addListenerPreCheck(eventType); const callback = (...data: any[]) => { if (data[0] !== EVENT_TYPE.IMediaRecorder) { @@ -89,35 +75,19 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { data[1] ); }; - const subscription = DeviceEventEmitter.addListener(eventType, callback); - this._events.set(listener, { eventType, subscription }); - return subscription; + DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, listener: IMediaRecorderEvent[EventType] ) { - if (!this._events.has(listener)) return; - this._events.get(listener)!.subscription.remove(); - this._events.delete(listener); + DeviceEventEmitter.removeListener(eventType, listener); } removeAllListeners( eventType?: EventType ) { - if (eventType === undefined) { - this._events.forEach((value) => { - DeviceEventEmitter.removeAllListeners(value.eventType); - }); - this._events.clear(); - } else { - DeviceEventEmitter.removeAllListeners(eventType); - this._events.forEach((value, key) => { - if (value.eventType === eventType) { - this._events.delete(key); - } - }); - } + DeviceEventEmitter.removeAllListeners(eventType); } } diff --git a/ts/Private/internal/MusicContentCenterInternal.ts b/ts/Private/internal/MusicContentCenterInternal.ts index 20228cbec..5b6254013 100644 --- a/ts/Private/internal/MusicContentCenterInternal.ts +++ b/ts/Private/internal/MusicContentCenterInternal.ts @@ -19,23 +19,9 @@ const checkers = createCheckers(IAgoraMusicContentCenterTI); import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; import { MediaPlayerInternal } from './MediaPlayerInternal'; -import type { EmitterSubscription } from './emitter/EventEmitter'; export class MusicContentCenterInternal extends IMusicContentCenterImpl { static _event_handlers: IMusicContentCenterEventHandler[] = []; - private _events: Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - > = new Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - >(); _addListenerPreCheck( eventType: EventType @@ -55,7 +41,7 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { addListener( eventType: EventType, listener: IMusicContentCenterEvent[EventType] - ): EmitterSubscription { + ): void { this._addListenerPreCheck(eventType); const callback = (...data: any[]) => { if (data[0] !== EVENT_TYPE.IMusicContentCenter) { @@ -67,36 +53,20 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { data[1] ); }; - const subscription = DeviceEventEmitter.addListener(eventType, callback); - this._events.set(listener, { eventType, subscription }); - return subscription; + DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, listener: IMusicContentCenterEvent[EventType] ) { - if (!this._events.has(listener)) return; - this._events.get(listener)!.subscription.remove(); - this._events.delete(listener); + DeviceEventEmitter.removeListener(eventType, listener); } removeAllListeners( eventType?: EventType ) { - if (eventType === undefined) { - this._events.forEach((value) => { - DeviceEventEmitter.removeAllListeners(value.eventType); - }); - this._events.clear(); - } else { - DeviceEventEmitter.removeAllListeners(eventType); - this._events.forEach((value, key) => { - if (value.eventType === eventType) { - this._events.delete(key); - } - }); - } + DeviceEventEmitter.removeAllListeners(eventType); } override registerEventHandler( diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 4dfab06b2..899c41ec7 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -69,7 +69,6 @@ import { MediaEngineInternal } from './MediaEngineInternal'; import { MediaPlayerInternal } from './MediaPlayerInternal'; import { MediaRecorderInternal } from './MediaRecorderInternal'; import { MusicContentCenterInternal } from './MusicContentCenterInternal'; -import type { EmitterSubscription } from './emitter/EventEmitter'; const checkers = createCheckers( AgoraBaseTI, @@ -93,19 +92,6 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { new MusicContentCenterInternal(); private _local_spatial_audio_engine: ILocalSpatialAudioEngine = new LocalSpatialAudioEngineInternal(); - private _events: Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - > = new Map< - any, - { - eventType: string; - subscription: EmitterSubscription; - } - >(); override initialize(context: RtcEngineContext): number { if (AgoraEnv.webEnvReady) { @@ -204,7 +190,7 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { addListener( eventType: EventType, listener: IRtcEngineEvent[EventType] - ): EmitterSubscription { + ): void { this._addListenerPreCheck(eventType); const callback = (...data: any[]) => { if (data[0] !== EVENT_TYPE.IRtcEngine) { @@ -232,36 +218,20 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { data[1] ); }; - const subscription = DeviceEventEmitter.addListener(eventType, callback); - this._events.set(listener, { eventType, subscription }); - return subscription; + DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, listener: IRtcEngineEvent[EventType] ) { - if (!this._events.has(listener)) return; - this._events.get(listener)!.subscription.remove(); - this._events.delete(listener); + DeviceEventEmitter.removeListener(eventType, listener); } removeAllListeners( eventType?: EventType ) { - if (eventType === undefined) { - this._events.forEach((value) => { - DeviceEventEmitter.removeAllListeners(value.eventType); - }); - this._events.clear(); - } else { - DeviceEventEmitter.removeAllListeners(eventType); - this._events.forEach((value, key) => { - if (value.eventType === eventType) { - this._events.delete(key); - } - }); - } + DeviceEventEmitter.removeAllListeners(eventType); } override getVersion(): SDKBuildInfo { diff --git a/ts/Private/internal/emitter/EventEmitter.d.ts b/ts/Private/internal/emitter/EventEmitter.d.ts deleted file mode 100644 index 369d7a595..000000000 --- a/ts/Private/internal/emitter/EventEmitter.d.ts +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -/** - * EventSubscription represents a subscription to a particular event. It can - * remove its own subscription. - */ -interface EventSubscription { - eventType: string; - key: number; - subscriber: EventSubscriptionVendor; - - /** - * @param subscriber the subscriber that controls - * this subscription. - */ - new (subscriber: EventSubscriptionVendor): EventSubscription; - - /** - * Removes this subscription from the subscriber that controls it. - */ - remove(): void; -} - -/** - * EventSubscriptionVendor stores a set of EventSubscriptions that are - * subscribed to a particular event type. - */ -declare class EventSubscriptionVendor { - constructor(); - - /** - * Adds a subscription keyed by an event type. - * - */ - addSubscription( - eventType: string, - subscription: EventSubscription - ): EventSubscription; - - /** - * Removes a bulk set of the subscriptions. - * - * @param eventType - Optional name of the event type whose - * registered supscriptions to remove, if null remove all subscriptions. - */ - removeAllSubscriptions(eventType?: string): void; - - /** - * Removes a specific subscription. Instead of calling this function, call - * `subscription.remove()` directly. - * - */ - removeSubscription(subscription: any): void; - - /** - * Returns the array of subscriptions that are currently registered for the - * given event type. - * - * Note: This array can be potentially sparse as subscriptions are deleted - * from it when they are removed. - * - */ - getSubscriptionsForType(eventType: string): EventSubscription[]; -} - -/** - * EmitterSubscription represents a subscription with listener and context data. - */ -interface EmitterSubscription extends EventSubscription { - emitter: EventEmitter; - listener: () => any; - context: any; - - /** - * @param emitter - The event emitter that registered this - * subscription - * @param subscriber - The subscriber that controls - * this subscription - * @param listener - Function to invoke when the specified event is - * emitted - * @param context - Optional context object to use when invoking the - * listener - */ - new ( - emitter: EventEmitter, - subscriber: EventSubscriptionVendor, - listener: () => any, - context: any - ): EmitterSubscription; - - /** - * Removes this subscription from the emitter that registered it. - * Note: we're overriding the `remove()` method of EventSubscription here - * but deliberately not calling `super.remove()` as the responsibility - * for removing the subscription lies with the EventEmitter. - */ - remove(): void; -} - -export declare class EventEmitter { - /** - * - * @param subscriber - Optional subscriber instance - * to use. If omitted, a new subscriber will be created for the emitter. - */ - constructor(subscriber?: EventSubscriptionVendor | null); - - /** - * Adds a listener to be invoked when events of the specified type are - * emitted. An optional calling context may be provided. The data arguments - * emitted will be passed to the listener function. - * - * @param eventType - Name of the event to listen to - * @param listener - Function to invoke when the specified event is - * emitted - * @param context - Optional context object to use when invoking the - * listener - */ - addListener( - eventType: string, - listener: (...args: any[]) => any, - context?: any - ): EmitterSubscription; - - /** - * Removes all of the registered listeners, including those registered as - * listener maps. - * - * @param eventType - Optional name of the event whose registered - * listeners to remove - */ - removeAllListeners(eventType?: string): void; - - /** - * Returns the number of listeners that are currently registered for the given - * event. - * - * @param eventType - Name of the event to query - */ - listenerCount(eventType: string): number; - - /** - * Emits an event of the given type with the given data. All handlers of that - * particular type will be notified. - * - * @param eventType - Name of the event to emit - * @param Arbitrary arguments to be passed to each registered listener - * - * @example - * emitter.addListener('someEvent', function(message) { - * console.log(message); - * }); - * - * emitter.emit('someEvent', 'abc'); // logs 'abc' - */ - emit(eventType: string, ...params: any[]): void; -} diff --git a/ts/Private/internal/emitter/EventEmitter.js b/ts/Private/internal/emitter/EventEmitter.js deleted file mode 100644 index 188495a78..000000000 --- a/ts/Private/internal/emitter/EventEmitter.js +++ /dev/null @@ -1,124 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { - value: true, -}); -exports.default = void 0; - -function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true, - }); - } else { - obj[key] = value; - } - return obj; -} - -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * - * @format - */ - -/** - * EventEmitter manages listeners and publishes events to them. - * - * EventEmitter accepts a single type parameter that defines the valid events - * and associated listener argument(s). - * - * @example - * - * const emitter = new EventEmitter<{ - * success: [number, string], - * error: [Error], - * }>(); - * - * emitter.on('success', (statusCode, responseText) => {...}); - * emitter.emit('success', 200, '...'); - * - * emitter.on('error', error => {...}); - * emitter.emit('error', new Error('Resource not found')); - * - */ -class EventEmitter { - constructor() { - _defineProperty(this, '_registry', {}); - } - - /** - * Registers a listener that is called when the supplied event is emitted. - * Returns a subscription that has a `remove` method to undo registration. - */ - addListener(eventType, listener, context) { - const registrations = allocate(this._registry, eventType); - const registration = { - context, - listener, - - remove() { - registrations.delete(registration); - }, - }; - registrations.add(registration); - return registration; - } - /** - * Emits the supplied event. Additional arguments supplied to `emit` will be - * passed through to each of the registered listeners. - * - * If a listener modifies the listeners registered for the same event, those - * changes will not be reflected in the current invocation of `emit`. - */ - - emit(eventType, ...args) { - const registrations = this._registry[eventType]; - - if (registrations != null) { - for (const registration of [...registrations]) { - registration.listener.apply(registration.context, args); - } - } - } - /** - * Removes all registered listeners. - */ - - removeAllListeners(eventType) { - if (eventType == null) { - this._registry = {}; - } else { - delete this._registry[eventType]; - } - } - /** - * Returns the number of registered listeners for the supplied event. - */ - - listenerCount(eventType) { - const registrations = this._registry[eventType]; - return registrations == null ? 0 : registrations.size; - } -} - -exports.default = EventEmitter; - -function allocate(registry, eventType) { - let registrations = registry[eventType]; - - if (registrations == null) { - registrations = new Set(); - registry[eventType] = registrations; - } - - return registrations; -} -//# sourceMappingURL=EventEmitter.js.map diff --git a/yarn.lock b/yarn.lock index 64a766f26..3107c32d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2674,6 +2674,11 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + execa@7.1.1, execa@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" From 8dd78dde5680655112d806e744ffa36ed318355e Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 15 May 2023 15:28:45 +0800 Subject: [PATCH 39/74] chore: optimize --- example/package.json | 2 +- example/yarn.lock | 102 +++++++++++-------------------------------- package.json | 6 +-- 3 files changed, 30 insertions(+), 80 deletions(-) diff --git a/example/package.json b/example/package.json index 07e4b3503..601707264 100644 --- a/example/package.json +++ b/example/package.json @@ -65,7 +65,7 @@ ] }, "dependencies": { - "agora-electron-sdk": "4.2.0-dev.13", + "agora-electron-sdk": "4.2.0-dev.15", "antd": "^4.20.3", "download": "^8.0.0", "ffi-napi": "^4.0.3", diff --git a/example/yarn.lock b/example/yarn.lock index 145f018b2..e71347f5b 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1586,13 +1586,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -1790,25 +1783,20 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -agora-electron-sdk@4.2.0-dev.13: - version "4.2.0-dev.13" - resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.13.tgz#4decb4ec94fd937c2424ff1883c855026444b978" - integrity sha512-qCPzDrTUVMNlFCQkrklB0i3h99kl4JEkXtyMxdOtU35UbasiFGp9JHvhR8PaBnBfkQXy94FlFsUhKAA/ot+dgw== +agora-electron-sdk@4.2.0-dev.15: + version "4.2.0-dev.15" + resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.15.tgz#71e89853254683647d159bdebb7519ddae4a1664" + integrity sha512-oGCJ13eRV2LNany+p2vkjCeu2G6K1GcPFGn4ea6KMpeebFtpe11HMcktM6CzylS5De0l39BOyo7ay7UrCI71OA== dependencies: - bindings "1.2.1" buffer "^6.0.3" cross-env "^7.0.3" download "^8.0.0" - extract-zip "^2.0.1" - fs-extra "^9.1.0" + eventemitter3 "^5.0.1" + fs-extra "^11.1.1" gulp "^4.0.2" - gulp-cli "^2.3.0" - gulp-zip "^5.1.0" json-bigint "^1.0.0" - jsonfile "^6.1.0" lodash.isequal "^4.5.0" minimist "^1.2.5" - rimraf "^3.0.0" shelljs "^0.8.4" ts-interface-checker "^1.0.2" winston "^3.3.3" @@ -2376,11 +2364,6 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - integrity sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g== - bindings@^1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -4421,6 +4404,11 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.1: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@^3.0.0: version "3.3.0" resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -4575,17 +4563,6 @@ extract-zip@^1.0.3: mkdirp "^0.5.4" yauzl "^2.10.0" -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" @@ -4938,6 +4915,15 @@ fs-extra@^10.0.0, fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.1.1: + version "11.1.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4947,7 +4933,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5078,7 +5064,7 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.1.0, get-stream@^5.2.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -5339,7 +5325,7 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.1 resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== -gulp-cli@^2.2.0, gulp-cli@^2.3.0: +gulp-cli@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== @@ -5363,17 +5349,6 @@ gulp-cli@^2.2.0, gulp-cli@^2.3.0: v8flags "^3.2.0" yargs "^7.1.0" -gulp-zip@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz#38cc1d4c61bc2ab06b452ce463cbe2adc52b935e" - integrity sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw== - dependencies: - get-stream "^5.2.0" - plugin-error "^1.0.1" - through2 "^3.0.1" - vinyl "^2.1.0" - yazl "^2.5.1" - gulp@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz#543651070fd0f6ab0a0650c6a3e6ff5a7cb09caa" @@ -6437,7 +6412,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1, jsonfile@^6.1.0: +jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== @@ -7866,16 +7841,6 @@ plist@^3.0.1, plist@^3.0.4: base64-js "^1.5.1" xmlbuilder "^15.1.1" -plugin-error@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" - integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== - dependencies: - ansi-colors "^1.0.1" - arr-diff "^4.0.0" - arr-union "^3.1.0" - extend-shallow "^3.0.2" - portfinder@^1.0.26: version "1.0.32" resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" @@ -8688,7 +8653,7 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -9964,14 +9929,6 @@ through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -10552,7 +10509,7 @@ vinyl-sourcemap@^1.1.0: remove-bom-buffer "^3.0.0" vinyl "^2.0.0" -vinyl@^2.0.0, vinyl@^2.1.0: +vinyl@^2.0.0: version "2.2.1" resolved "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== @@ -11017,13 +10974,6 @@ yauzl@^2.10.0, yauzl@^2.4.2: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -yazl@^2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" - integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== - dependencies: - buffer-crc32 "~0.2.3" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" diff --git a/package.json b/package.json index 07662ea41..b6ecf42e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.2.0-dev.13", + "version": "4.2.0-dev.15", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -123,7 +123,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.13_DCG_Windows_Video_20230426_0712.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.13_DCG_Mac_Video_20230426_0712.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.15_DCG_Windows_Video_20230515_1046.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.15_DCG_Mac_Video_20230515_1046.zip" } } From 39e4365bf15fb97b816b1413b3c7f5282bbd91c1 Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 15 May 2023 15:45:07 +0800 Subject: [PATCH 40/74] chore: optimize --- .github/workflows/gitleaks.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/gitleaks.yml diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml new file mode 100644 index 000000000..0c41d6f39 --- /dev/null +++ b/.github/workflows/gitleaks.yml @@ -0,0 +1,19 @@ +name: gitleaks +on: + pull_request: + push: + workflow_dispatch: + schedule: + - cron: "0 4 * * *" # run once a day at 4 AM +jobs: + scan: + name: gitleaks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: gitleaks/gitleaks-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }} # Only required for Organizations, not personal accounts. From 9ccd3a28d96a1dd7557696ce63934abbf7a84036 Mon Sep 17 00:00:00 2001 From: HUI Date: Mon, 15 May 2023 15:50:30 +0800 Subject: [PATCH 41/74] chore: optimize --- .gitleaks.toml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .gitleaks.toml diff --git a/.gitleaks.toml b/.gitleaks.toml new file mode 100644 index 000000000..f00faa3d2 --- /dev/null +++ b/.gitleaks.toml @@ -0,0 +1,6 @@ +# ----- BEGIN Agora AppId ----- +[[rules]] +id = "agora-appid" +description = "Agora AppId" +regex = '''"[0-9a-f]{32}"''' +# ----- END Agora AppId ----- From 3951780579328abfb8497910a36997da3627e187 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Wed, 17 May 2023 09:38:09 +0800 Subject: [PATCH 42/74] [AUTO] Generate comments by iris-doc (#1001) Co-authored-by: Nero-Hu --- ts/AgoraSdk.ts | 6 +- ts/Private/AgoraBase.ts | 294 +++++----- ts/Private/AgoraMediaBase.ts | 111 ++-- ts/Private/AgoraMediaPlayerTypes.ts | 2 +- ts/Private/IAgoraLog.ts | 4 +- ts/Private/IAgoraMediaEngine.ts | 22 +- ts/Private/IAgoraMediaPlayer.ts | 53 +- ts/Private/IAgoraMediaPlayerSource.ts | 10 +- ts/Private/IAgoraMediaRecorder.ts | 25 +- ts/Private/IAgoraMusicContentCenter.ts | 19 +- ts/Private/IAgoraRtcEngine.ts | 735 ++++++++++++++----------- ts/Private/IAgoraRtcEngineEx.ts | 195 ++++--- ts/Private/IAgoraSpatialAudio.ts | 27 +- ts/Private/IAudioDeviceManager.ts | 34 +- ts/Types.ts | 24 +- 15 files changed, 853 insertions(+), 708 deletions(-) diff --git a/ts/AgoraSdk.ts b/ts/AgoraSdk.ts index 11050f3ef..35ab235ac 100644 --- a/ts/AgoraSdk.ts +++ b/ts/AgoraSdk.ts @@ -26,11 +26,11 @@ export * from './Utils'; const instance = new RtcEngineExInternal(); /** - * Creates an IRtcEngine object. - * Currently, the Agora RTC SDK v4.x supports creating only one IRtcEngine object for each app. + * IRtcEngineEx + * Currently, the Agora RTC SDK v4.x supports creating only one IRtcEngineEx object for each app. * * @returns - * One IRtcEngine object. + * One IRtcEngineEx object. */ export function createAgoraRtcEngine(options?: AgoraEnvOptions): IRtcEngineEx { Object.assign(AgoraEnv, options); diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index 4a20a2093..becb87070 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -179,7 +179,7 @@ export enum ErrorCodeType { */ ErrNotReady = 3, /** - * 4: IRtcEngine does not support the request. Possible reasons include the following:The built-in encryption mode is incorrect, or the SDK fails to load the external encryption library. Check the encryption mode setting, or reload the external encryption library. + * 4: The IRtcEngine does not support the request. Possible reasons include the following:The built-in encryption mode is incorrect, or the SDK fails to load the external encryption library. Check the encryption mode setting, or reload the external encryption library. */ ErrNotSupported = 4, /** @@ -195,7 +195,7 @@ export enum ErrorCodeType { */ ErrNotInitialized = 7, /** - * @ignore + * 8: Invalid state. */ ErrInvalidState = 8, /** @@ -223,11 +223,11 @@ export enum ErrorCodeType { */ ErrNetDown = 14, /** - * 17: The request to join the channel is rejected. Possible reasons include the following:The user is already in the channel. Agora recommends using the onConnectionStateChanged callback to get whether the user is in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.After calling startEchoTest for the call test, the user tries to join the channel without calling stopEchoTest to end the current test. To join a channel, the call test must be ended by calling stopEchoTest. + * 17: The request to join the channel is rejected. Possible reasons include the following:The user is already in the channel. Agora recommends that you use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.After calling startEchoTest for the call test, the user tries to join the channel without calling stopEchoTest to end the current test. To join a channel, the call test must be ended by calling stopEchoTest. */ ErrJoinChannelRejected = 17, /** - * 18: Fails to leave the channel. Possible reasons include the following:The user has left the channel before calling the leaveChannel [1/2] method. Stop calling this method to clear this error.The user calls the leaveChannel [1/2] method to leave the channel before joining the channel. In this case, no extra operation is needed. + * 18: Fails to leave the channel. Possible reasons include the following:The user has left the channel before calling the method. Stop calling this method to clear this error.The user calls the method to leave the channel before joining the channel. In this case, no extra operation is needed. */ ErrLeaveChannelRejected = 18, /** @@ -263,7 +263,7 @@ export enum ErrorCodeType { */ ErrTokenExpired = 109, /** - * 110: Invalid token Typical reasons include the following:App Certificate is enabled in Agora Console, but the code still uses App ID for authentication. Once App Certificate is enabled for a project, you must use token-based authentication.The uid used to generate the token is not the same as the uid used to join the channel.Deprecated:This enumerator is deprecated. Use ConnectionChangedInvalidToken(8) in the onConnectionStateChanged callback instead. + * 110: Invalid token. Typical reasons include the following:App Certificate is enabled in Agora Console, but the code still uses App ID for authentication. Once App Certificate is enabled for a project, you must use token-based authentication.The uid used to generate the token is not the same as the uid used to join the channel.Deprecated:This enumerator is deprecated. Use ConnectionChangedInvalidToken(8) in the onConnectionStateChanged callback instead. */ ErrInvalidToken = 110, /** @@ -597,7 +597,7 @@ export enum QualityType { */ QualityDown = 6, /** - * 7: Users cannot detect the network quality. (Not in use.) + * 7: Users cannot detect the network quality (not in use). */ QualityUnsupported = 7, /** @@ -643,7 +643,7 @@ export enum VideoOrientation { } /** - * Video frame rate. + * The video frame rate. */ export enum FrameRate { /** @@ -671,7 +671,7 @@ export enum FrameRate { */ FrameRateFps30 = 30, /** - * 60: 60 fpsFor Windows and macOS only. + * 60: 60 fps */ FrameRateFps60 = 60, } @@ -815,7 +815,7 @@ export enum VideoCodecType { */ VideoCodecVp8 = 1, /** - * 2: Standard H.264. + * 2: (Default) Standard H.264. */ VideoCodecH264 = 2, /** @@ -1001,7 +1001,7 @@ export class EncodedAudioFrameAdvancedSettings { */ export class EncodedAudioFrameInfo { /** - * Audio Codec type: AudioCodecType + * Audio Codec type: AudioCodecType . */ codec?: AudioCodecType; /** @@ -1085,7 +1085,7 @@ export enum VideoStreamType { */ export class VideoSubscriptionOptions { /** - * @ignore + * The video stream type that you want to subscribe to. The default value is VideoStreamHigh, indicating that the high-quality video streams are subscribed. See VideoStreamType . */ type?: VideoStreamType; /** @@ -1154,7 +1154,6 @@ export enum CompressionPreference { PreferLowLatency = 0, /** * 1: (Default) High quality preference. The SDK compresses video frames while maintaining video quality. This preference is suitable for scenarios where video quality is prioritized. - * */ PreferQuality = 1, } @@ -1196,7 +1195,7 @@ export class AdvanceOptions { */ export enum VideoMirrorModeType { /** - * 0: (Default) The SDK determines the mirror mode. + * 0: The SDK determines the mirror mode.For the mirror mode of the local video view: If you use a front camera, the SDK enables the mirror mode by default; if you use a rear camera, the SDK disables the mirror mode by default.For the remote user: The mirror mode is disabled by default. */ VideoMirrorModeAuto = 0, /** @@ -1210,41 +1209,41 @@ export enum VideoMirrorModeType { } /** - * @ignore + * The bit mask that indicates the device codec capability. */ export enum CodecCapMask { /** - * @ignore + * (0): The device does not support encoding or decoding. */ CodecCapMaskNone = 0, /** - * @ignore + * (1 << 0): The device supports hardware decoding. */ CodecCapMaskHwDec = 1 << 0, /** - * @ignore + * (1 << 1): The device supports hardware encoding. */ CodecCapMaskHwEnc = 1 << 1, /** - * @ignore + * (1 << 2): The device supports software decoding. */ CodecCapMaskSwDec = 1 << 2, /** - * @ignore + * (1 << 3): The device supports software ecoding. */ CodecCapMaskSwEnc = 1 << 3, } /** - * @ignore + * The codec capability of the device. */ export class CodecCapInfo { /** - * @ignore + * The video codec types. See VideoCodecType . */ codecType?: VideoCodecType; /** - * @ignore + * The bit mask of the codec type. See CodecCapMask . */ codecCapMask?: number; } @@ -1282,7 +1281,7 @@ export class VideoEncoderConfiguration { */ degradationPreference?: DegradationPreference; /** - * By default, the video is not mirrored. + * Sets the mirror mode of the published local video stream. It only affects the video that the remote user sees. See VideoMirrorModeType .By default, the video is not mirrored. */ mirrorMode?: VideoMirrorModeType; /** @@ -1337,7 +1336,7 @@ export class SimulcastStreamConfig { */ kBitrate?: number; /** - * The capture frame rate (fps) of the local video. The default value is 5. + * The frame rate (fps) of the local video. The default value is 5. */ framerate?: number; } @@ -1392,11 +1391,11 @@ export class WatermarkOptions { */ visibleInPreview?: boolean; /** - * When the adaptation mode of the watermark is FitModeCoverPosition, it is used to set the area of the watermark image in landscape mode. See FitModeCoverPosition for details. + * When the adaptation mode of the watermark is FitModeCoverPosition, it is used to set the area of the watermark image in landscape mode. See Rectangle . */ positionInLandscapeMode?: Rectangle; /** - * When the adaptation mode of the watermark is FitModeCoverPosition, it is used to set the area of the watermark image in portrait mode. See FitModeCoverPosition for details. + * When the adaptation mode of the watermark is FitModeCoverPosition, it is used to set the area of the watermark image in portrait mode. See Rectangle . */ positionInPortraitMode?: Rectangle; /** @@ -1410,7 +1409,7 @@ export class WatermarkOptions { } /** - * Statistics of the channel. + * Statistics of a call session. */ export class RtcStats { /** @@ -1418,15 +1417,15 @@ export class RtcStats { */ duration?: number; /** - * Total number of bytes transmitted, represented by an aggregate value. + * The number of bytes sent. */ txBytes?: number; /** - * Total number of bytes received, represented by an aggregate value. + * The number of bytes received. */ rxBytes?: number; /** - * Total number of audio bytes sent, represented by an aggregate value. + * The total number of audio bytes sent, represented by an aggregate value. */ txAudioBytes?: number; /** @@ -1450,7 +1449,7 @@ export class RtcStats { */ rxKBitRate?: number; /** - * Audio receive bitrate (Kbps), represented by an instantaneous value. + * The bitrate (Kbps) of receiving the audio. */ rxAudioKBitRate?: number; /** @@ -1458,7 +1457,7 @@ export class RtcStats { */ txAudioKBitRate?: number; /** - * Video receive bitrate (Kbps), represented by an instantaneous value. + * The bitrate (Kbps) of receiving the video. */ rxVideoKBitRate?: number; /** @@ -1466,7 +1465,7 @@ export class RtcStats { */ txVideoKBitRate?: number; /** - * The client-to-server delay (ms). + * The client-to-server delay (milliseconds). */ lastmileDelay?: number; /** @@ -1474,7 +1473,7 @@ export class RtcStats { */ userCount?: number; /** - * Application CPU usage (%).The value of cpuTotalUsage is always reported as 0 in the onLeaveChannel callback. + * Application CPU usage (%).The value of cpuAppUsage is always reported as 0 in the onLeaveChannel callback. */ cpuAppUsage?: number; /** @@ -1594,7 +1593,7 @@ export enum AudienceLatencyLevelType { } /** - * The detailed options of a user. + * Setting of user role properties. */ export class ClientRoleOptions { /** @@ -1644,19 +1643,19 @@ export enum ExperiencePoorReason { } /** - * @ignore + * AI noise reduction modes. */ export enum AudioAinsMode { /** - * @ignore + * 0: (Default) Balance mode. This mode allows for a balanced performance on noice reduction and time delay. */ AinsModeBalanced = 0, /** - * @ignore + * 1: Aggressive mode. In scenarios where high performance on noise reduction is required, such as live streaming outdoor events, This mode reduces nosies more dramatically, but may sometimes affect the original character of the audio. */ AinsModeAggressive = 1, /** - * @ignore + * 2: Aggressive mode with low latency. The noise reduction delay of this mode is about only half of that of the balance and aggressive mode. It is suitable for scenarios that have high requirements on noise reduction with low latency, such as sing together online in real-time. */ AinsModeUltralowlatency = 2, } @@ -1708,11 +1707,11 @@ export enum AudioScenarioType { */ AudioScenarioDefault = 0, /** - * 3: High-quality audio scenario, where users mainly play music. + * 3: High-quality audio scenario, where users mainly play music. For example, instrument tutoring. */ AudioScenarioGameStreaming = 3, /** - * 5: Chatroom scenario, where users need to frequently switch the user role or mute and unmute the microphone. In this scenario, audience members receive a pop-up window to request permission of using microphones. + * 5: Chatroom scenario, where users need to frequently switch the user role or mute and unmute the microphone. For example, education scenarios. In this scenario, audience members receive a pop-up window to request permission of using microphones. */ AudioScenarioChatroom = 5, /** @@ -1788,15 +1787,15 @@ export enum ScreenScenarioType { } /** - * @ignore + * The video application scenarios. */ export enum VideoApplicationScenarioType { /** - * @ignore + * 0: (Default) The general scenario. */ ApplicationScenarioGeneral = 0, /** - * @ignore + * If set to ApplicationScenarioMeeting (1), the SDK automatically enables the following strategies:In meeting scenarios where low-quality video streams are required to have a high bitrate, the SDK automatically enables multiple technologies used to deal with network congestions, to enhance the performance of the low-quality streams and to ensure the smooth reception by subscribers.The SDK monitors the number of subscribers to the high-quality video stream in real time and dynamically adjusts its configuration based on the number of subscribers.If nobody subscribers to the high-quality stream, the SDK automatically reduces its bitrate and frame rate to save upstream bandwidth.If someone subscribes to the high-quality stream, the SDK resets the high-quality stream to the VideoEncoderConfiguration configuration used in the most recent calling of setVideoEncoderConfiguration . If no configuration has been set by the user previously, the following values are used:Resolution: 1280 × 720Frame rate: 15 fpsBitrate: 1600 KbpsThe SDK monitors the number of subscribers to the low-quality video stream in real time and dynamically enables or disables it based on the number of subscribers.If the user has called setDualStreamMode to set that never send low-quality video stream (DisableSimulcastStream), the dynamic adjustment of the low-quality stream in meeting scenarios will not take effect.If nobody subscribes to the low-quality stream, the SDK automatically disables it to save upstream bandwidth.If someone subscribes to the low-quality stream, the SDK enables the low-quality stream and resets it to the SimulcastStreamConfig configuration used in the most recent calling of setDualStreamMode. If no configuration has been set by the user previously, the following values are used:Resolution: 480 × 272Frame rate: 15 fpsBitrate: 500 Kbps1: The meeting scenario. */ ApplicationScenarioMeeting = 1, } @@ -1958,7 +1957,7 @@ export enum LocalVideoStreamError { */ LocalVideoStreamErrorDeviceNotFound = 8, /** - * 9: (For macOS only) The video capture device currently in use is disconnected (such as being unplugged). + * 9:(For macOS only) The video capture device currently in use is disconnected (such as being unplugged). */ LocalVideoStreamErrorDeviceDisconnected = 9, /** @@ -2060,7 +2059,7 @@ export enum RemoteAudioStateReason { } /** - * The state of the remote video. + * The state of the remote video stream. */ export enum RemoteVideoState { /** @@ -2098,7 +2097,7 @@ export enum RemoteVideoStateReason { */ RemoteVideoStateReasonNetworkCongestion = 1, /** - * 2: Network recovery. + * 2: Network is recovered. */ RemoteVideoStateReasonNetworkRecovery = 2, /** @@ -2242,11 +2241,11 @@ export enum RemoteVideoDownscaleLevel { */ export class AudioVolumeInfo { /** - * The user ID.In the local user's callback, uid = 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is one of the three highest. + * The user ID.In the local user's callback, uid is 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is the highest. */ uid?: number; /** - * The volume of the user. The value ranges between 0 (lowest volume) and 255 (highest volume). + * The volume of the user. The value ranges between 0 (the lowest volume) and 255 (the highest volume). If the local user enables audio capturing and calls muteLocalAudioStream and set it as true to mute, the value of volume indicates the volume of locally captured audio signal. */ volume?: number; /** @@ -2390,7 +2389,7 @@ export enum RtmpStreamPublishState { */ RtmpStreamPublishStateIdle = 0, /** - * 1: The SDK is connecting to Agora's streaming server and the CDN server. + * 1: The streaming server and CDN server are being connected. */ RtmpStreamPublishStateConnecting = 1, /** @@ -2398,16 +2397,15 @@ export enum RtmpStreamPublishState { */ RtmpStreamPublishStateRunning = 2, /** - * 3: The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK tries to resume RTMP or RTMPS streaming and returns this state.If the SDK successfully resumes the streaming, RtmpStreamPublishStateRunning(2) returns. - * If the streaming does not resume within 60 seconds or server errors occur, RtmpStreamPublishStateFailure(4) returns. You can also reconnect to the server by calling the stopRtmpStream method. + * 3: The RTMP or RTMPS streaming is recovering. When exceptions occur to the CDN, or the streaming is interrupted, the SDK tries to resume RTMP or RTMPS streaming and returns this state.If the SDK successfully resumes the streaming, RtmpStreamPublishStateRunning(2) returns.If the streaming does not resume within 60 seconds or server errors occur, RtmpStreamPublishStateFailure(4) returns. If you feel that 60 seconds is too long, you can also actively try to reconnect. */ RtmpStreamPublishStateRecovering = 3, /** - * 4: The RTMP or RTMPS streaming fails. See the errCode parameter for the detailed error information. + * 4: The RTMP or RTMPS streaming fails. After a failure, you can troubleshoot the cause of the error through the returned error code. */ RtmpStreamPublishStateFailure = 4, /** - * 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call stopRtmpStream to stop the streaming normally, the SDK reports the streaming state as RtmpStreamPublishStateDisconnecting and RtmpStreamPublishStateIdle in sequence. + * 5: The SDK is disconnecting from the Agora streaming server and CDN. When you call stopRtmpStream to stop the Media Push normally, the SDK reports the Media Push state as RtmpStreamPublishStateDisconnecting and RtmpStreamPublishStateIdle in sequence. */ RtmpStreamPublishStateDisconnecting = 5, } @@ -2417,7 +2415,7 @@ export enum RtmpStreamPublishState { */ export enum RtmpStreamPublishErrorType { /** - * 0: The RTMP or RTMPS streaming publishes successfully. + * 0: The RTMP or RTMPS streaming has not started or has ended. */ RtmpStreamPublishErrorOk = 0, /** @@ -2429,11 +2427,11 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorEncryptedStreamNotAllowed = 2, /** - * 3: Timeout for the RTMP or RTMPS streaming. Try to publish the streaming again. + * 3: Timeout for the RTMP or RTMPS streaming. */ RtmpStreamPublishErrorConnectionTimeout = 3, /** - * 4: An error occurs in Agora's streaming server. Try to publish the streaming again. + * 4: An error occurs in Agora's streaming server. */ RtmpStreamPublishErrorInternalServerError = 4, /** @@ -2441,7 +2439,7 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorRtmpServerError = 5, /** - * 6: The RTMP or RTMPS streaming publishing requests are too frequent. + * 6: The RTMP or RTMPS streaming publishes too frequently. */ RtmpStreamPublishErrorTooOften = 6, /** @@ -2461,11 +2459,11 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorFormatNotSupported = 10, /** - * 11: The user role is not host, so the user cannot use the CDN live streaming function. Check your app code logic. + * 11: The user role is not host, so the user cannot use the CDN live streaming function. Check your application code logic. */ RtmpStreamPublishErrorNotBroadcaster = 11, /** - * 13: The updateRtmpTranscoding or setLiveTranscoding method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. + * 13: The updateRtmpTranscoding method is called to update the transcoding configuration in a scenario where there is streaming without transcoding. Check your application code logic. */ RtmpStreamPublishErrorTranscodingNoMixStream = 13, /** @@ -2477,25 +2475,25 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorInvalidAppid = 15, /** - * @ignore + * 16: Your project does not have permission to use streaming services. Refer to Media Push to enable the Media Push permission. */ RtmpStreamPublishErrorInvalidPrivilege = 16, /** - * 100: The streaming has been stopped normally. After you call stopRtmpStream to stop streaming, the SDK returns this value. + * 100: The streaming has been stopped normally. After you stop the media push, the SDK returns this value. */ RtmpStreamUnpublishErrorOk = 100, } /** - * Events during the media push. + * Events during the Media Push. */ export enum RtmpStreamingEvent { /** - * 1: An error occurs when you add a background image or a watermark image in the media push. + * 1: An error occurs when you add a background image or a watermark image in the Media Push. */ RtmpStreamingEventFailedLoadImage = 1, /** - * 2: The streaming URL is already being used for CDN live streaming. If you want to start new streaming, use a new streaming URL. + * 2: The streaming URL is already being used for Media Push. If you want to start new streaming, use a new streaming URL. */ RtmpStreamingEventUrlAlreadyInUse = 2, /** @@ -2538,7 +2536,7 @@ export class RtcImage { */ zOrder?: number; /** - * The transparency of the watermark or background image. The value ranges between 0.0 and 1.0:0.0: Completely transparent.1.0: (Default) Opaque. + * The transparency of the watermark or background image. The range of the value is [0.0,1.0]:0.0: Completely transparent.1.0: (Default) Opaque. */ alpha?: number; } @@ -2721,51 +2719,51 @@ export class LiveTranscoding { } /** - * The video streams for the video mixing on the local client. + * The video streams for local video mixing. */ export class TranscodingVideoStream { /** - * The source type of video for the video mixing on the local client. See VideoSourceType . + * The video source type for local video mixing. See VideoSourceType . */ sourceType?: VideoSourceType; /** - * The ID of the remote user.Use this parameter only when the source type of the video for the video mixing on the local client is VideoSourceRemote. + * The user ID of the remote user.Use this parameter only when the source type is VideoSourceRemote for local video mixing. */ remoteUserUid?: number; /** - * The URL of the image. + * The URL of the image.Use this parameter only when the source type is the image for local video mixing. */ imageUrl?: string; /** - * @ignore + * (Optional) Media player ID. Use the parameter only when you set sourceType to VideoSourceMediaPlayer. */ mediaPlayerId?: number; /** - * The horizontal displacement of the top-left corner of the video for the video mixing on the client relative to the top-left corner (origin) of the canvas for this video mixing. + * The relative lateral displacement of the top left corner of the video for local video mixing to the origin (the top left corner of the canvas). */ x?: number; /** - * The vertical displacement of the top-left corner of the video for the video mixing on the client relative to the top-left corner (origin) of the canvas for this video mixing. + * The relative longitudinal displacement of the top left corner of the captured video to the origin (the top left corner of the canvas). */ y?: number; /** - * The width (px) of the video for the video mixing on the local client. + * The width (px) of the video for local video mixing on the canvas. */ width?: number; /** - * The height (px) of the video for the video mixing on the local client. + * The height (px) of the video for local video mixing on the canvas. */ height?: number; /** - * The number of the layer to which the video for the video mixing on the local client belongs. The value range is [0,100].0: (Default) The layer is at the bottom.100: The layer is at the top. + * The number of the layer to which the video for the local video mixing belongs. The value range is [0, 100].0: (Default) The layer is at the bottom.100: The layer is at the top. */ zOrder?: number; /** - * The transparency of the video for the video mixing on the local client. The value range is [0.0,1.0]. 0.0 means the transparency is completely transparent. 1.0 means the transparency is opaque. + * The transparency of the video for local video mixing. The value range is [0.0, 1.0]. 0.0 indicates that the video is completely transparent, and 1.0 indicates that it is opaque. */ alpha?: number; /** - * Whether to mirror the video for the video mixing on the local client.true: Mirror the captured video.false: (Default) Do not mirror the captured video.The paramter only works for videos with the source type + * Whether to mirror the video for the local video mixing.true: Mirror the video for the local video mixing.false: (Default) Do not mirror the video for the local video mixing.This parameter only takes effect on video source types that are cameras. */ mirror?: boolean; } @@ -2779,11 +2777,11 @@ export class LocalTranscoderConfiguration { */ streamCount?: number; /** - * The video streams for the video mixing on the local client. See TranscodingVideoStream . + * The video streams for local video mixing. See TranscodingVideoStream . */ videoInputStreams?: TranscodingVideoStream[]; /** - * The encoding configuration of the mixed video stream after the video mixing on the local client. See VideoEncoderConfiguration . + * The encoding configuration of the mixed video stream after the local video mixing. See VideoEncoderConfiguration . */ videoOutputConfiguration?: VideoEncoderConfiguration; /** @@ -2793,7 +2791,7 @@ export class LocalTranscoderConfiguration { } /** - * @ignore + * The error code of the local video mixing failure. */ export enum VideoTranscoderError { /** @@ -2801,27 +2799,27 @@ export enum VideoTranscoderError { */ VtErrOk = 0, /** - * @ignore + * 1: The selected video source has not started video capture. You need to create a video track for it and start video capture. */ VtErrVideoSourceNotReady = 1, /** - * @ignore + * 2: The video source type is invalid. You need to re-specify the supported video source type. */ VtErrInvalidVideoSourceType = 2, /** - * @ignore + * 3: The image path is invalid. You need to re-specify the correct image path. */ VtErrInvalidImagePath = 3, /** - * @ignore + * 4: The image format is invalid. Make sure the image format is one of PNG, JPEG, or GIF. */ VtErrUnsupportImageFormat = 4, /** - * @ignore + * 5: The video encoding resolution after video mixing is invalid. */ VtErrInvalidLayout = 5, /** - * @ignore + * 20: Unknown internal error. */ VtErrInternal = 20, } @@ -2889,7 +2887,7 @@ export class LastmileProbeOneWayResult { */ export class LastmileProbeResult { /** - * The status of the last-mile probe test. See LastmileProbeResultState . + * The status of the last-mile network tests. See LastmileProbeResultState . */ state?: LastmileProbeResultState; /** @@ -2983,15 +2981,15 @@ export enum ConnectionChangedReasonType { */ ConnectionChangedEchoTest = 17, /** - * @ignore + * 18: The local IP address was changed by the user. */ ConnectionChangedClientIpAddressChangedByUser = 18, /** - * @ignore + * 19: The user joined the same channel from different devices with the same UID. */ ConnectionChangedSameUidLogin = 19, /** - * @ignore + * 20: The number of hosts in the channel has reached the upper limit. */ ConnectionChangedTooManyBroadcasters = 20, /** @@ -3129,7 +3127,7 @@ export enum VideoViewSetupMode { } /** - * Attributes of video canvas object. + * Attributes of the video canvas object. */ export class VideoCanvas { /** @@ -3149,11 +3147,11 @@ export class VideoCanvas { */ mirrorMode?: VideoMirrorModeType; /** - * @ignore + * Setting mode of the view. See VideoViewSetupMode . */ setupMode?: VideoViewSetupMode; /** - * The type of the video frame, see VideoSourceType . + * The type of the video source. See VideoSourceType . */ sourceType?: VideoSourceType; /** @@ -3161,11 +3159,11 @@ export class VideoCanvas { */ mediaPlayerId?: number; /** - * @ignore + * (Optional) Display area of the video frame, see Rectangle . width and height represent the video pixel width and height of the area. The default value is null (width or height is 0), which means that the actual resolution of the video frame is displayed. */ cropArea?: Rectangle; /** - * @ignore + * (Optional) Whether the receiver enables alpha mask rendering:true: The receiver enables alpha mask rendering.false: (default) The receiver disables alpha mask rendering.Alpha mask rendering can create images with transparent effects and extract portraits from videos. When used in combination with other methods, you can implement effects such as picture-in-picture and watermarking.This property applies to macOS only.The receiver can render alpha channel information only when the sender enables alpha transmission.To enable alpha transmission, . */ enableAlphaMask?: boolean; } @@ -3193,23 +3191,23 @@ export enum LighteningContrastLevel { */ export class BeautyOptions { /** - * The contrast level, used with the lighteningLevel parameter. The larger the value, the greater the contrast between light and dark. + * The contrast level, used with the lighteningLevel parameter. The larger the value, the greater the contrast between light and dark. See LighteningContrastLevel . */ lighteningContrastLevel?: LighteningContrastLevel; /** - * The brightening level, in the range [0.0,1.0], where 0.0 means the original brightening. The default value is + * The brightening level, in the range [0.0,1.0], where 0.0 means the original brightening. The default value is 0.0. The higher the value, the greater the degree of brightening. */ lighteningLevel?: number; /** - * The smoothness level, in the range [0.0,1.0], where 0.0 means the original smoothness. The default value is + * The smoothness level, in the range [0.0,1.0], where 0.0 means the original smoothness. The default value is 0.0. The greater the value, the greater the smoothness level. */ smoothnessLevel?: number; /** - * The redness level, in the range [0.0,1.0], where 0.0 means the original redness. The default value is + * The redness level, in the range [0.0,1.0], where 0.0 means the original redness. The default value is 0.0. The larger the value, the greater the redness level. */ rednessLevel?: number; /** - * The sharpness level, in the range [0.0,1.0], where 0.0 means the original sharpness. The default value is + * The sharpness level, in the range [0.0,1.0], where 0.0 means the original sharpness. The default value is 0.0. The larger the value, the greater the sharpness level. */ sharpnessLevel?: number; } @@ -3317,11 +3315,11 @@ export class ColorEnhanceOptions { } /** - * The type of the custom background image. + * The custom background. */ export enum BackgroundSourceType { /** - * @ignore + * 0: Process the background as alpha information without replacement, only separating the portrait and the background. After setting this value, you can call startLocalVideoTranscoder to implement the picture-in-picture effect. */ BackgroundNone = 0, /** @@ -3329,15 +3327,15 @@ export enum BackgroundSourceType { */ BackgroundColor = 1, /** - * The background image is a file in PNG or JPG format. + * 2: The background is an image in PNG or JPG format. */ BackgroundImg = 2, /** - * The background image is the blurred background. + * 3: The background is a blurred version of the original background. */ BackgroundBlur = 3, /** - * @ignore + * 4: The background is a local video in MP4, AVI, MKV, FLV, or other supported formats. */ BackgroundVideo = 4, } @@ -3351,33 +3349,33 @@ export enum BackgroundBlurDegree { */ BlurDegreeLow = 1, /** - * The degree of blurring applied to the custom background image is medium. It is difficult for the user to recognize details in the background. + * 2: The degree of blurring applied to the custom background image is medium. It is difficult for the user to recognize details in the background. */ BlurDegreeMedium = 2, /** - * (Default) The degree of blurring applied to the custom background image is high. The user can barely see any distinguishing features in the background. + * 3: (Default) The degree of blurring applied to the custom background image is high. The user can barely see any distinguishing features in the background. */ BlurDegreeHigh = 3, } /** - * The custom background image. + * The custom background. */ export class VirtualBackgroundSource { /** - * @ignore + * The custom background. See BackgroundSourceType . */ background_source_type?: BackgroundSourceType; /** - * The type of the custom background image. The color of the custom background image. The format is a hexadecimal integer defined by RGB, without the # sign, such as 0xFFB6C1 for light pink. The default value is 0xFFFFFF, which signifies white. The value range is [0x000000, 0xffffff]. If the value is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image is BackgroundColor. + * The type of the custom background image. The color of the custom background image. The format is a hexadecimal integer defined by RGB, without the # sign, such as 0xFFB6C1 for light pink. The default value is 0xFFFFFF, which signifies white. The value range is [0x000000, 0xffffff]. If the value is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image isBackgroundColor . */ color?: number; /** - * The local absolute path of the custom background image. PNG and JPG formats are supported. If the path is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image is BackgroundImg. + * The local absolute path of the custom background image. PNG and JPG formats are supported. If the path is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image isBackgroundImg . */ source?: string; /** - * The degree of blurring applied to the custom background image. This parameter takes effect only when the type of the custom background image is BackgroundBlur. + * The degree of blurring applied to the custom background image. See BackgroundBlurDegree .This parameter takes effect only when the type of the custom background image isBackgroundBlur . */ blur_degree?: BackgroundBlurDegree; } @@ -3411,7 +3409,7 @@ export class SegmentationProperty { } /** - * @ignore + * The type of the audio track. */ export enum AudioTrackType { /** @@ -3419,21 +3417,21 @@ export enum AudioTrackType { */ AudioTrackInvalid = -1, /** - * @ignore + * 0: Mixable audio tracks. You can publish multiple mixable audio tracks in one channel, and SDK will automatically mix these tracks into one. The latency of mixable audio tracks is higher than that of direct audio tracks. */ AudioTrackMixable = 0, /** - * @ignore + * 1: Direct audio tracks. When creating multiple audio tracks of this type, each direct audio track can only be published in one channel and cannot be mixed with others. The latency of direct audio tracks is lower than that of mixable audio tracks. */ AudioTrackDirect = 1, } /** - * @ignore + * The configuration of custom audio tracks. */ export class AudioTrackConfig { /** - * @ignore + * Whether to enable the local audio-playback device:true: (Default) Enable the local audio-playback device.false: Do not enable the local audio-playback device. */ enableLocalPlayback?: boolean; } @@ -3495,7 +3493,7 @@ export enum VoiceBeautifierPreset { */ TimbreTransformationRinging = 0x01030800, /** - * A ultra-high quality voice, which makes the audio clearer and restores more details.To achieve better audio effect quality, Agora recommends that you set the profile of setAudioProfile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) and scenario to AudioScenarioGameStreaming(3) before calling setVoiceBeautifierPreset .If you have an audio capturing device that can already restore audio details to a high degree, Agora recommends that you do not enable ultra-high quality; otherwise, the SDK may over-restore audio details, and you may not hear the anticipated voice effect. + * A ultra-high quality voice, which makes the audio clearer and restores more details.To achieve better audio effect quality, Agora recommends that you set the profile of to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) and scenario to AudioScenarioGameStreaming(3) before calling setVoiceBeautifierPreset .If you have an audio capturing device that can already restore audio details to a high degree, Agora recommends that you do not enable ultra-high quality; otherwise, the SDK may over-restore audio details, and you may not hear the anticipated voice effect. */ UltraHighQualityVoice = 0x01040100, } @@ -3680,7 +3678,7 @@ export enum HeadphoneEqualizerPreset { */ export class ScreenCaptureParameters { /** - * On Windows and macOS, this represents the video encoding resolution of the shared screen stream. See VideoDimensions . The default value is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges.If the screen dimensions are different from the value of this parameter, Agora applies the following strategies for encoding. Suppose If the value of the screen dimensions is lower than that of dimensions, for example, 1000 × 1000 pixels, the SDK uses the screen dimensions, that is, 1000 × 1000 pixels, for encoding.If the value of the screen dimensions is higher than that of dimensions, for example, 2000 × 1500, the SDK uses the maximum value under + * The video encoding resolution of the shared screen stream. See VideoDimensions . The default value is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges.If the screen dimensions are different from the value of this parameter, Agora applies the following strategies for encoding. Suppose If the value of the screen dimensions is lower than that of dimensions, for example, 1000 × 1000 pixels, the SDK uses the screen dimensions, that is, 1000 × 1000 pixels, for encoding.If the value of the screen dimensions is higher than that of dimensions, for example, 2000 × 1500, the SDK uses the maximum value under */ dimensions?: VideoDimensions; /** @@ -3712,7 +3710,7 @@ export class ScreenCaptureParameters { */ highLightWidth?: number; /** - * On macOS, COLOR_CLASS refers to NSColor. + * On Windows platforms, the color of the border in ARGB format. The default value is 0xFF8CBF26.On macOS, COLOR_CLASS refers to NSColor. */ highLightColor?: number; /** @@ -3788,7 +3786,7 @@ export class AudioRecordingConfiguration { */ filePath?: string; /** - * @ignore + * Whether to encode the audio data:true: Encode audio data in AAC.false: (Default) Do not encode audio data, but save the recorded audio data directly. */ encode?: boolean; /** @@ -3810,7 +3808,7 @@ export class AudioRecordingConfiguration { } /** - * Observer settings for encoded audio. + * Observer settings for the encoded audio. */ export class AudioEncodedFrameObserverConfig { /** @@ -3831,7 +3829,9 @@ export interface IAudioEncodedFrameObserver { * Gets the encoded audio data of the local user. * After calling registerAudioEncodedFrameObserver and setting the encoded audio as AudioEncodedFrameObserverPositionRecord, you can get the encoded audio data of the local user from this callback. * - * @param channels The number of channels.1: Mono.2: Stereo. If the channel uses stereo, the data is interleaved. + * @param channels The number of channels. + * 1: Mono. + * 2: Stereo. If the channel uses stereo, the data is interleaved. * @param frameBuffer The audio buffer. * @param length The data length (byte). * @param audioEncodedFrameInfo Audio information after encoding. See EncodedAudioFrameInfo . @@ -3847,9 +3847,7 @@ export interface IAudioEncodedFrameObserver { * After calling registerAudioEncodedFrameObserver and setting the encoded audio as AudioEncodedFrameObserverPositionPlayback, you can get encoded audio data of all remote users through this callback. * * @param samplesPerSec Recording sample rate (Hz). - * @param channels The number of channels. - * 1: Mono. - * 2: Stereo. If the channel uses stereo, the data is interleaved. + * @param channels The number of channels.1: Mono.2: Stereo. If the channel uses stereo, the data is interleaved. * @param samplesPerChannel The number of samples per channel in the audio frame. * @param frameBuffer The audio buffer. * @param length The data length (byte). @@ -3866,7 +3864,9 @@ export interface IAudioEncodedFrameObserver { * After calling registerAudioEncodedFrameObserver and setting the audio profile as AudioEncodedFrameObserverPositionMixed, you can get the mixed and encoded audio data of the local and all remote users through this callback. * * @param samplesPerSec Recording sample rate (Hz). - * @param channels The number of channels.1: Mono.2: Stereo. If the channel uses stereo, the data is interleaved. + * @param channels The number of channels. + * 1: Mono. + * 2: Stereo. If the channel uses stereo, the data is interleaved. * @param samplesPerChannel The number of samples per channel in the audio frame. * @param frameBuffer The audio buffer. * @param length The data length (byte). @@ -4116,15 +4116,15 @@ export class ChannelMediaInfo { */ export class ChannelMediaRelayConfiguration { /** - * @ignore + * The information of the source channel. See ChannelMediaInfo . It contains the following members:channelName: The name of the source channel. The default value is NULL, which means the SDK applies the name of the current channel.token: The token for joining the source channel. This token is generated with the channelName and uid you set in srcInfo.If you have not enabled the App Certificate, set this parameter as the default value NULL, which means the SDK applies the App ID.If you have enabled the App Certificate, you must use the token generated with the channelName and uid, and the uid must be set as 0.uid: The unique user ID to identify the relay stream in the source channel. Agora recommends leaving the default value of 0 unchanged. */ srcInfo?: ChannelMediaInfo; /** - * @ignore + * The information of the target channel ChannelMediaInfo. It contains the following members:channelName: The name of the target channel.token: The token for joining the target channel. It is generated with the channelName and uid you set in destInfos.If you have not enabled the App Certificate, set this parameter as the default value NULL, which means the SDK applies the App ID.If you have enabled the App Certificate, you must use the token generated with the channelName and uid.If the token of any target channel expires, the whole media relay stops; hence Agora recommends that you specify the same expiration time for the tokens of all the target channels.uid: The unique user ID to identify the relay stream in the target channel. The value ranges from 0 to (2 32-1). To avoid user ID conflicts, this user ID must be different from any other user ID in the target channel. The default value is 0, which means the SDK generates a random user ID. */ destInfos?: ChannelMediaInfo[]; /** - * @ignore + * The number of target channels. The default value is 0, and the value range is from 0 to 4. Ensure that the value of this parameter corresponds to the number of ChannelMediaInfo structs you define in destInfo. */ destCount?: number; } @@ -4373,7 +4373,7 @@ export class EchoTestConfiguration { */ enableVideo?: boolean; /** - * @ignore + * The token used to secure the audio and video call loop test. If you do not enable App Certificate in Agora Console, you do not need to pass a value in this parameter; if you have enabled App Certificate in Agora Console, you must pass a token in this parameter; the uid used when you generate the token must be 0xFFFFFFFF, and the channel name used must be the channel name that identifies each audio and video call loop tested. For server-side token generation, see . */ token?: string; /** @@ -4381,7 +4381,7 @@ export class EchoTestConfiguration { */ channelId?: string; /** - * @ignore + * The time interval (s) between when you start the call and when the recording plays back. The value range is [2, 10], and the default value is 2. */ intervalInSeconds?: number; } @@ -4512,49 +4512,49 @@ export class ScreenCaptureParameters2 { } /** - * @ignore + * The rendering state of the media frame.` */ export enum MediaTraceEvent { /** - * @ignore + * 0: The video frame has been rendered. */ MediaTraceEventVideoRendered = 0, /** - * @ignore + * 1: The video frame has been decoded. */ MediaTraceEventVideoDecoded = 1, } /** - * @ignore + * Indicators during video frame rendering progress. */ export class VideoRenderingTracingInfo { /** - * @ignore + * The time interval from calling the startMediaRenderingTracing method to SDK triggering the onVideoRenderingTracingResult callback. The unit is milliseconds. Agora recommends you call startMediaRenderingTracing before joining a channel. */ elapsedTime?: number; /** - * @ignore + * The time interval from calling startMediaRenderingTracing to calling joinChannel . The unit is milliseconds. A negative number means to call joinChannel after calling startMediaRenderingTracing. */ start2JoinChannel?: number; /** - * @ignore + * Time interval from calling joinChannel to successfully joining the channel. The unit is milliseconds. */ join2JoinSuccess?: number; /** - * @ignore + * If the local user calls startMediaRenderingTracing before successfully joining the channel, this value is the time interval from the local user successfully joining the channel to the remote user joining the channel. The unit is milliseconds.If the local user calls startMediaRenderingTracing after successfully joining the channel, the value is the time interval from calling startMediaRenderingTracing to when the remote user joins the channel. The unit is milliseconds.If the local user calls startMediaRenderingTracing after the remote user joins the channel, the value is 0 and meaningless.In order to reduce the time of rendering the first frame for remote users, Agora recommends that the local user joins the channel when the remote user is in the channel to reduce this value. */ joinSuccess2RemoteJoined?: number; /** - * @ignore + * If the local user calls startMediaRenderingTracing before the remote user joins the channel, this value is the time interval from when the remote user joins the channel to when the local user sets the remote view. The unit is milliseconds.If the local user calls startMediaRenderingTracing after the remote user joins the channel, this value is the time interval from calling startMediaRenderingTracing to setting the remote view. The unit is milliseconds.If the local user calls startMediaRenderingTracing after setting the remote view, the value is 0 and has no effect.In order to reduce the time of rendering the first frame for remote users, Agora recommends that the local user sets the remote view before the remote user joins the channel, or sets the remote view immediately after the remote user joins the channel to reduce this value. */ remoteJoined2SetView?: number; /** - * @ignore + * If the local user calls startMediaRenderingTracing before the remote user joins the channel, this value is the time interval from the remote user joining the channel to subscribing to the remote video stream. The unit is milliseconds.If the local user calls startMediaRenderingTracing after the remote user joins the channel, this value is the time interval from calling startMediaRenderingTracing to subscribing to the remote video stream. The unit is milliseconds.If the local user calls startMediaRenderingTracing after subscribing to the remote video stream, the value is 0 and has no effect.In order to reduce the time of rendering the first frame for remote users, Agora recommends that after the remote user joins the channel, the local user immediately subscribes to the remote video stream to reduce this value. */ remoteJoined2UnmuteVideo?: number; /** - * @ignore + * If the local user calls startMediaRenderingTracing before the remote user joins the channel, this value is the time interval from when the remote user joins the channel to when the local user receives the remote video stream. The unit is milliseconds.If the local user calls startMediaRenderingTracing after the remote user joins the channel, this value is the time interval from calling startMediaRenderingTracing to receiving the remote video stream. The unit is milliseconds.If the local user calls startMediaRenderingTracing after receiving the remote video stream, the value is 0 and has no effect.In order to reduce the time of rendering the first frame for remote users, Agora recommends that the remote user publishes video streams immediately after joining the channel, and the local user immediately subscribes to remote video streams to reduce this value. */ remoteJoined2PacketReceived?: number; } @@ -4574,15 +4574,15 @@ export enum ConfigFetchType { } /** - * @ignore + * The information about the media streams to be recorded. */ export class RecorderStreamInfo { /** - * @ignore + * The name of the channel in which the media streams publish. */ channelId?: string; /** - * @ignore + * The ID of the user whose media streams you want to record. */ uid?: number; } diff --git a/ts/Private/AgoraMediaBase.ts b/ts/Private/AgoraMediaBase.ts index 502067a73..5f668daee 100644 --- a/ts/Private/AgoraMediaBase.ts +++ b/ts/Private/AgoraMediaBase.ts @@ -2,59 +2,59 @@ import './extension/AgoraMediaBaseExtension'; import { EncodedVideoFrameInfo } from './AgoraBase'; /** - * The capture type of the custom video source. + * The type of the video source. */ export enum VideoSourceType { /** - * @ignore + * 0: (Default) The primary camera. */ VideoSourceCameraPrimary = 0, /** - * The camera. + * 0: (Default) The primary camera. */ VideoSourceCamera = 0, /** - * The secondary camera. + * 1: The secondary camera. */ VideoSourceCameraSecondary = 1, /** - * The primary screen. + * 2: The primary screen. */ VideoSourceScreenPrimary = 2, /** - * The screen. + * 2: The primary screen. */ VideoSourceScreen = 2, /** - * The secondary screen. + * 3: The secondary screen. */ VideoSourceScreenSecondary = 3, /** - * The custom video source. + * 4: A custom video source. */ VideoSourceCustom = 4, /** - * The video source from the media player. + * 5: The media player. */ VideoSourceMediaPlayer = 5, /** - * The video source is a PNG image. + * 6: One PNG image. */ VideoSourceRtcImagePng = 6, /** - * The video source is a JPEG image. + * 7: One JPEG image. */ VideoSourceRtcImageJpeg = 7, /** - * The video source is a GIF image. + * 8: One GIF image. */ VideoSourceRtcImageGif = 8, /** - * The video source is remote video acquired by the network. + * 9: One remote video acquired by the network. */ VideoSourceRemote = 9, /** - * A transcoded video source. + * 10: One transcoded video source. */ VideoSourceTranscoded = 10, /** @@ -74,7 +74,7 @@ export enum VideoSourceType { */ VideoSourceScreenFourth = 14, /** - * An unknown video source. + * 100: An unknown video source. */ VideoSourceUnknown = 100, } @@ -354,7 +354,7 @@ export class AudioPcmFrame { */ bytes_per_sample?: BytesPerSample; /** - * The video frame. + * The audio frame. */ data_?: number[]; } @@ -552,15 +552,15 @@ export class ExternalVideoFrame { */ timestamp?: number; /** - * This parameter only applies to video data in Texture format. Texture ID of the frame. + * This parameter only applies to video data in Texture format. Texture ID of the video frame. */ eglType?: EglContextType; /** - * This parameter only applies to video data in Texture format. Incoming 4 x 4 transformational matrix. The typical value is a unit matrix. + * This parameter only applies to video data in Texture format. Incoming 4 × 4 transformational matrix. The typical value is a unit matrix. */ textureId?: number; /** - * This parameter only applies to video data in Texture format. Incoming 4 x 4 transformational matrix. The typical value is a unit matrix. + * This parameter only applies to video data in Texture format. Incoming 4 × 4 transformational matrix. The typical value is a unit matrix. */ matrix?: number[]; /** @@ -693,14 +693,15 @@ export enum VideoModulePosition { } /** - * @ignore + * This class is used to get raw PCM audio. + * You can inherit this class and implement the onFrame callback to get raw PCM audio. */ export interface IAudioPcmFrameSink { /** - * Occurs each time the player receives a video frame. - * After registering the video frame observer, the callback occurs every time the player receives a video frame, reporting the detailed information of the video frame. + * Occurs each time the player receives an audio frame. + * After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame. * - * @param frame Video frame information. See VideoFrame . + * @param frame The audio frame information. See AudioPcmFrame. */ onFrame?(frame: AudioPcmFrame): void; } @@ -728,7 +729,7 @@ export class AudioFrame { */ samplesPerChannel?: number; /** - * The number of bytes per audio sample, which is usually 16-bit (2 bytes). + * The number of bytes per sample. The number of bytes per audio sample, which is usually 16-bit (2-byte). */ bytesPerSample?: BytesPerSample; /** @@ -740,7 +741,7 @@ export class AudioFrame { */ samplesPerSec?: number; /** - * The data buffer of the audio frame. When the audio frame uses a stereo channel, the data buffer is interleaved.The size of the data buffer is as follows: buffer = samples ×channels × bytesPerSample. + * The data buffer of the audio frame. When the audio frame uses a stereo channel, the data buffer is interleaved.The size of the data buffer is as follows: buffer = samples × channels × bytesPerSample. */ buffer?: Uint8Array; /** @@ -811,8 +812,8 @@ export class AudioParams { */ export interface IAudioFrameObserverBase { /** - * Gets the raw audio frame for playback. - * To ensure that the data format of audio frame for playback is as expected, Agora recommends that you set the audio data format as follows: After calling setPlaybackAudioFrameParameters to set the audio data format and registerAudioFrameObserver to register the audio frame observer object, the SDK calculates the sampling interval according to the parameters set in the methods, and triggers the onPlaybackAudioFrame callback according to the sampling interval. + * Gets the captured audio frame. + * To ensure that the data format of captured audio frame is as expected, Agora recommends that you set the audio data format as follows: After calling setRecordingAudioFrameParameters to set the audio data format, call registerAudioFrameObserver to register the audio observer object, the SDK will calculate the sampling interval according to the parameters set in this method, and triggers the onRecordAudioFrame callback according to the sampling interval. * * @param channelId The channel ID. * @param audioFrame The raw audio data. See AudioFrame . @@ -823,8 +824,8 @@ export interface IAudioFrameObserverBase { onRecordAudioFrame?(channelId: string, audioFrame: AudioFrame): boolean; /** - * Gets the raw audio frame for playback. - * To ensure that the data format of audio frame for playback is as expected, Agora recommends that you set the audio data format as follows: After calling setPlaybackAudioFrameParameters to set the audio data format and registerAudioFrameObserver to register the audio frame observer object, the SDK calculates the sampling interval according to the parameters set in the methods, and triggers the onPlaybackAudioFrame callback according to the sampling interval. + * Gets the captured audio frame. + * To ensure that the data format of captured audio frame is as expected, Agora recommends that you set the audio data format as follows: After calling setRecordingAudioFrameParameters to set the audio data format, call registerAudioFrameObserver to register the audio observer object, the SDK will calculate the sampling interval according to the parameters set in this method, and triggers the onRecordAudioFrame callback according to the sampling interval. * * @param channelId The channel ID. * @param audioFrame The raw audio data. See AudioFrame . @@ -835,8 +836,8 @@ export interface IAudioFrameObserverBase { onPlaybackAudioFrame?(channelId: string, audioFrame: AudioFrame): boolean; /** - * Gets the raw audio frame for playback. - * To ensure that the data format of audio frame for playback is as expected, Agora recommends that you set the audio data format as follows: After calling setPlaybackAudioFrameParameters to set the audio data format and registerAudioFrameObserver to register the audio frame observer object, the SDK calculates the sampling interval according to the parameters set in the methods, and triggers the onPlaybackAudioFrame callback according to the sampling interval. + * Gets the captured audio frame. + * To ensure that the data format of captured audio frame is as expected, Agora recommends that you set the audio data format as follows: After calling setRecordingAudioFrameParameters to set the audio data format, call registerAudioFrameObserver to register the audio observer object, the SDK will calculate the sampling interval according to the parameters set in this method, and triggers the onRecordAudioFrame callback according to the sampling interval. * * @param channelId The channel ID. * @param audioFrame The raw audio data. See AudioFrame . @@ -850,6 +851,8 @@ export interface IAudioFrameObserverBase { * Gets the in-ear monitoring audio frame. * In order to ensure that the obtained in-ear audio data meets the expectations, Agora recommends that you set the in-ear monitoring-ear audio data format as follows: After calling setEarMonitoringAudioFrameParameters to set the audio data format and registerAudioFrameObserver to register the audio frame observer object, the SDK calculates the sampling interval according to the parameters set in the methods, and triggers the onEarMonitoringAudioFrame callback according to the sampling interval. * + * @param audioFrame The raw audio data. See AudioFrame . + * * @returns * Reserved for future use. */ @@ -900,7 +903,7 @@ export class UserAudioSpectrumInfo { */ uid?: number; /** - * Audio spectrum information of the remote user.See AudioSpectrumData . + * Audio spectrum information of the remote user. See AudioSpectrumData . */ spectrumData?: AudioSpectrumData; } @@ -911,7 +914,7 @@ export class UserAudioSpectrumInfo { export interface IAudioSpectrumObserver { /** * Gets the statistics of a local audio spectrum. - * After successfully calling registerAudioSpectrumObserver to implement the onLocalAudioSpectrumcallback in IAudioSpectrumObserver and calling enableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum. + * After successfully calling registerAudioSpectrumObserver to implement the onLocalAudioSpectrum callback in IAudioSpectrumObserver and calling enableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum. * * @param data The audio spectrum data of the local user. See AudioSpectrumData . * @@ -980,8 +983,9 @@ export enum VideoFrameProcessMode { export interface IVideoFrameObserver { /** * Occurs each time the SDK receives a video frame captured by the local camera. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. + * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.Once the pre-processing is complete, you can directly modify videoFrame in this callback, and set the return value to true to send the modified video data to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. * + * @param sourceType The type of the video source. See VideoSourceType . * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * * @returns @@ -993,9 +997,10 @@ export interface IVideoFrameObserver { ): boolean; /** - * Occurs each time the SDK receives a video frame before encoding. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced. + * Occurs each time the SDK receives a video frame captured by the local camera. + * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.Once the pre-processing is complete, you can directly modify videoFrame in this callback, and set the return value to true to send the modified video data to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. * + * @param sourceType The type of the video source. See VideoSourceType . * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * * @returns @@ -1020,16 +1025,10 @@ export interface IVideoFrameObserver { * * @param channelId The channel ID. * @param remoteUid The user ID of the remote user who sends the current video frame. - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: - * macOS: YUV 420 - * Windows: YUV 420 + * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 * * @returns - * When the video processing mode is ProcessModeReadOnly: - * true: Reserved for future use. - * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: - * true: Sets the SDK to receive the video frame. - * false: Sets the SDK to discard the video frame. + * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. */ onRenderVideoFrame?( channelId: string, @@ -1038,13 +1037,7 @@ export interface IVideoFrameObserver { ): boolean; /** - * Occurs each time the SDK receives a video frame before encoding. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced. - * - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 - * - * @returns - * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. + * @ignore */ onTranscodedVideoFrame?(videoFrame: VideoFrame): boolean; } @@ -1136,11 +1129,11 @@ export enum RecorderErrorCode { } /** - * Configurations for the local audio and video recording. + * The recording configuration. */ export class MediaRecorderConfiguration { /** - * The absolute path (including the filename extensions) of the recording file. For example:Windows: C:\Users\\AppData\Local\Agora\\example.mp4iOS: /App Sandbox/Library/Caches/example.mp4macOS: /Library/Logs/example.mp4Android: /storage/emulated/0/Android/data//files/example.mp4Ensure that the directory for the log files exists and is writable. + * The absolute path (including the filename extensions) of the recording file. For example:Windows: C:\Users\\AppData\Local\Agora\\example.mp4macOS: ~/Library/Logs/example.mp4Ensure that the directory for the log files exists and is writable. */ storagePath?: string; /** @@ -1174,19 +1167,21 @@ export class RecorderInfo { */ durationMs?: number; /** - * The size (bytes) of the recording file. + * The size (byte) of the recording file. */ fileSize?: number; } /** - * The IMediaRecorderObserver class. + * Provides callback events for audio and video recording. */ export interface IMediaRecorderObserver { /** * Occurs when the recording state changes. - * When the local audio or video recording state changes, the SDK triggers this callback to report the current recording state and the reason for the change. + * When the recording state changes, the SDK triggers this callback to report the current recording state and the reason for the change. * + * @param channelId The channel name. + * @param uid The user ID. * @param state The current recording state. See RecorderState . * @param error The reason for the state change. See RecorderErrorCode . */ @@ -1199,8 +1194,10 @@ export interface IMediaRecorderObserver { /** * Occurs when the recording information is updated. - * After you successfully enable the local audio and video recording, the SDK periodically triggers this callback based on the value of recorderInfoUpdateInterval set in MediaRecorderConfiguration . This callback reports the file name, duration, and size of the current recording file. + * After you successfully enable the audio and video recording, the SDK periodically triggers this callback based on the value of recorderInfoUpdateInterval set in MediaRecorderConfiguration . This callback reports the file name, duration, and size of the current recording file. * + * @param channelId The channel name. + * @param uid The user ID. * @param info The information about the file that is recorded. See RecorderInfo . */ onRecorderInfoUpdated?( diff --git a/ts/Private/AgoraMediaPlayerTypes.ts b/ts/Private/AgoraMediaPlayerTypes.ts index 9e0b2277a..1aa05f500 100644 --- a/ts/Private/AgoraMediaPlayerTypes.ts +++ b/ts/Private/AgoraMediaPlayerTypes.ts @@ -404,7 +404,7 @@ export class MediaSource { */ autoPlay?: boolean; /** - * Whether to cache the media file when it is being played:true:Enables caching.false: (Default) Disables caching.The SDK only supports caching on-demand streams.If you need to enable caching, pass in a value to uri; otherwise, caching is based on the url of the media file.If you enable this function, the Media Player caches part of the media file being played on your local device, and you can play the cached media file without internet connection. The statistics about the media file being cached are updated every second after the media file is played. See CacheStatistics . + * Whether to cache the media file when it is being played:true:Enables caching.false: (Default) Disables caching.Agora only supports caching on-demand audio and video streams that are not transmitted in HLS protocol.If you need to enable caching, pass in a value to uri; otherwise, caching is based on the url of the media file.If you enable this function, the Media Player caches part of the media file being played on your local device, and you can play the cached media file without internet connection. The statistics about the media file being cached are updated every second after the media file is played. See CacheStatistics . */ enableCache?: boolean; /** diff --git a/ts/Private/IAgoraLog.ts b/ts/Private/IAgoraLog.ts index a2197ef26..47202e702 100644 --- a/ts/Private/IAgoraLog.ts +++ b/ts/Private/IAgoraLog.ts @@ -68,11 +68,11 @@ export enum LogFilterType { */ export class LogConfig { /** - * The complete path of the log files. Ensure that the path for the log file exists and is writable. You can use this parameter to rename the log files.The default file path is:macOSIf Sandbox is enabled: App~/Library/Logs/agorasdk.log. For example, /Users//Library/Containers//Data/Library/Logs/agorasdk.log.If Sandbox is disabled: ~/Library/Logs/agorasdk.log.Windows:C:\Users\\AppData\Local\Agora\\agorasdk.log。 + * The complete path of the log files. Ensure that the path for the log file exists and is writable. You can use this parameter to rename the log files.The default path is:macOS:If Sandbox is enabled: App Sandbox/Library/Logs/agorasdk.log. For example, /Users//Library/Containers//Data/Library/Logs/agorasdk.log.If Sandbox is disabled: ~/Library/Logs/agorasdk.logWindows: C:\Users\\AppData\Local\Agora\\agorasdk.log. */ filePath?: string; /** - * The size (KB) of an agorasdk.log file. The value range is [128,1024]. The default value is 1,024 KB. If you set fileSizeInKByte to a value lower than 128 KB, the SDK adjusts it to 128 KB. If you set fileSizeInKBytes to a value higher than 1,024 KB, the SDK adjusts it to 1,024 KB. + * The size (KB) of an agorasdk.log file. The value range is [128,1024]. The default value is 1,024 KB. If you set fileSizeInKByte smaller than 128 KB, the SDK automatically adjusts it to 128 KB; if you set fileSizeInKByte greater than 1,024 KB, the SDK automatically adjusts it to 1,024 KB. */ fileSizeInKB?: number; /** diff --git a/ts/Private/IAgoraMediaEngine.ts b/ts/Private/IAgoraMediaEngine.ts index 957daf797..37bb8a770 100644 --- a/ts/Private/IAgoraMediaEngine.ts +++ b/ts/Private/IAgoraMediaEngine.ts @@ -84,10 +84,8 @@ export abstract class IMediaEngine { /** * Pushes the external audio frame. * - * @param type The type of the audio recording device. See MediaSourceType . * @param frame The external audio frame. See AudioFrame . - * @param wrap Whether to use the placeholder. Agora recommends using the default value.true: Use the placeholder.false: (Default) Do not use the placeholder. - * @param sourceId The ID of external audio source. If you want to publish a custom external audio source, set this parameter to the ID of the corresponding custom audio track you want to publish. + * @param trackId The audio track ID. If you want to publish a custom external audio source, set this parameter to the ID of the corresponding custom audio track you want to publish. * * @returns * 0: Success.< 0: Failure. @@ -127,7 +125,7 @@ export abstract class IMediaEngine { * Call this method before joining a channel. * * @param enabled Whether to enable the external audio source:true: Enable the external audio source.false: (Default) Disable the external audio source. - * @param sampleRate The sample rate (Hz) of the external audio which can be set as 8000, 16000, 32000, 44100, or 48000. + * @param sampleRate The sample rate (Hz) of the external audio source which can be set as 8000, 16000, 32000, 44100, or 48000. * @param channels The number of channels of the external audio source, which can be set as 1 (Mono) or 2 (Stereo). * @param sourceNumber The number of external audio sources. The value of this parameter should be larger than 0. The SDK creates a corresponding number of custom audio tracks based on this parameter value and names the audio tracks starting from 0. In ChannelMediaOptions , you can set publishCustomAudioSourceId to the audio track ID you want to publish. * @param localPlayback Whether to play the external audio source:true: Play the external audio source.false: (Default) Do not play the external source. @@ -145,7 +143,14 @@ export abstract class IMediaEngine { ): number; /** - * @ignore + * Creates a customized audio track. + * When you need to publish multiple custom captured videos in the channel, you can refer to the following steps:Call this method to create a video track and get the video track ID.In ChannelMediaOptions of each channel, set customVideoTrackId to the video track ID that you want to publish, and set publishCustomVideoTrack to true.If you call pushAudioFrame trackId as the video track ID set in step 2, you can publish the corresponding custom video source in multiple channels. + * + * @param trackType The type of the custom audio track. See AudioTrackType . + * @param config The configuration of the custom audio track. See AudioTrackConfig . + * + * @returns + * If the method call is successful, the video track ID is returned as the unique identifier of the video track.If the method call fails, a negative value is returned. */ abstract createCustomAudioTrack( trackType: AudioTrackType, @@ -153,7 +158,12 @@ export abstract class IMediaEngine { ): number; /** - * @ignore + * Destroys the specified video track. + * + * @param trackId The custom audio track ID returned in createCustomAudioTrack . + * + * @returns + * 0: Success.< 0: Failure. */ abstract destroyCustomAudioTrack(trackId: number): number; diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index 0a3f3a340..945793b65 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -31,7 +31,7 @@ export abstract class IMediaPlayer { * Opens the media resource. * This method is called asynchronously.If you need to play a media file, make sure you receive the onPlayerSourceStateChanged callback reporting PlayerStateOpenCompleted before calling the play method to play the file. * - * @param url The path of the media file. Both local path and online path are supported.On the Android platform, if you need to open a file in URI format, use open . + * @param url The path of the media file. Both local path and online path are supported. * @param startPos The starting position (ms) for playback. Default value is 0. * * @returns @@ -164,7 +164,13 @@ export abstract class IMediaPlayer { abstract setPlaybackSpeed(speed: number): number; /** - * @ignore + * Selects the audio track used during playback. + * After getting the track index of the audio file, you can call this method to specify any track to play. For example, if different tracks of a multi-track file store songs in different languages, you can call this method to set the playback language.You need to call this method after calling getStreamInfo to get the audio stream index value. + * + * @param index The index of the audio track. + * + * @returns + * 0: Success.< 0: Failure. */ abstract selectAudioTrack(index: number): number; @@ -198,7 +204,13 @@ export abstract class IMediaPlayer { abstract takeScreenshot(filename: string): number; /** - * @ignore + * Gets the detailed information of the media stream. + * Call this method after calling getStreamCount . + * + * @param index The index of the media stream. + * + * @returns + * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. */ abstract selectInternalSubtitle(index: number): number; @@ -272,7 +284,7 @@ export abstract class IMediaPlayer { * Gets the volume of the media file for publishing. * * @returns - * The remote playback volume, if the method call succeeds.< 0: Failure. + * ≥ 0: The remote playback volume.< 0: Failure. */ abstract getPublishSignalVolume(): number; @@ -284,7 +296,12 @@ export abstract class IMediaPlayer { abstract setView(view: any): number; /** - * @ignore + * Sets the render mode of the media player. + * + * @param renderMode Sets the render mode of the view. See RenderModeType . + * + * @returns + * 0: Success.< 0: Failure. */ abstract setRenderMode(renderMode: RenderModeType): number; @@ -315,7 +332,11 @@ export abstract class IMediaPlayer { /** * Registers an audio frame observer object. * + * @param observer The audio frame observer, reporting the reception of each audio frame. See IAudioPcmFrameSink . * @param mode The use mode of the audio frame. See RawAudioFrameOpModeType . + * + * @returns + * 0: Success.< 0: Failure. */ abstract registerAudioFrameObserver( observer: IAudioPcmFrameSink, @@ -323,9 +344,9 @@ export abstract class IMediaPlayer { ): number; /** - * Unregisters an audio observer. + * Unregisters an audio frame observer. * - * @param observer The audio observer. See IMediaPlayerAudioFrameObserver . + * @param observer The audio observer. See IAudioPcmFrameSink . * * @returns * 0: Success.< 0: Failure. @@ -366,9 +387,9 @@ export abstract class IMediaPlayer { ): number; /** - * Unregisters the encoded audio frame observer. + * Unregisters the video frame observer. * - * @param observer The encoded audio observer. See IAudioEncodedFrameObserver . + * @param observer The video observer, reporting the reception of each video frame. See IVideoFrameObserver . * * @returns * 0: Success.< 0: Failure. @@ -394,7 +415,10 @@ export abstract class IMediaPlayer { abstract getPlayerSdkVersion(): string; /** - * @ignore + * Gets the path of the media resource being played. + * + * @returns + * The path of the media resource being played. */ abstract getPlaySrc(): string; @@ -512,8 +536,7 @@ export abstract class IMediaPlayerCacheManager { * You can call this method to delete a cached media file when the storage space for the cached files is about to reach its limit. After you call this method, the SDK deletes the cached media file that is least used.The cached media file currently being played will not be deleted. * * @returns - * 0: Success. - * < 0: Failure. See MediaPlayerError . + * 0: Success.< 0: Failure. See MediaPlayerError . */ abstract removeOldCache(): number; @@ -524,8 +547,7 @@ export abstract class IMediaPlayerCacheManager { * @param uri The URI (Uniform Resource Identifier) of the media file to be deleted. * * @returns - * 0: Success. - * < 0: Failure. See MediaPlayerError . + * 0: Success.< 0: Failure. See MediaPlayerError . */ abstract removeCacheByUri(uri: string): number; @@ -557,7 +579,8 @@ export abstract class IMediaPlayerCacheManager { * @param cacheSize The maximum size (bytes) of the aggregate storage space for cached media files. The default value is 1 GB. * * @returns - * 0: Success.< 0: Failure. See MediaPlayerError . + * 0: Success. + * < 0: Failure. See MediaPlayerError . */ abstract setMaxCacheFileSize(cacheSize: number): number; diff --git a/ts/Private/IAgoraMediaPlayerSource.ts b/ts/Private/IAgoraMediaPlayerSource.ts index b6393ed17..0a6f97999 100644 --- a/ts/Private/IAgoraMediaPlayerSource.ts +++ b/ts/Private/IAgoraMediaPlayerSource.ts @@ -13,10 +13,10 @@ import { */ export interface IMediaPlayerSourceObserver { /** - * Reports the playback state change. + * Reports the changes of playback state. * When the state of the media player changes, the SDK triggers this callback to report the current playback state. * - * @param state The playback state, see MediaPlayerState . + * @param state The playback state. See MediaPlayerState . * @param ec The error code. See MediaPlayerError . */ onPlayerSourceStateChanged?( @@ -26,17 +26,17 @@ export interface IMediaPlayerSourceObserver { /** * Reports current playback progress. - * When playing media files, the SDK triggers this callback every one second to report current playback progress. + * When playing media files, the SDK triggers this callback every two second to report current playback progress. * * @param position The playback position (ms) of media files. */ onPositionChanged?(positionMs: number): void; /** - * Reports the playback event. + * Reports the player events. * After calling the seek method, the SDK triggers the callback to report the results of the seek operation. * - * @param eventCode The playback event. See MediaPlayerEvent . + * @param eventCode The player events. See MediaPlayerEvent . * @param elapsedTime The time (ms) when the event occurs. * @param message Information about the event. */ diff --git a/ts/Private/IAgoraMediaRecorder.ts b/ts/Private/IAgoraMediaRecorder.ts index c68014a65..605461302 100644 --- a/ts/Private/IAgoraMediaRecorder.ts +++ b/ts/Private/IAgoraMediaRecorder.ts @@ -5,17 +5,14 @@ import { } from './AgoraMediaBase'; /** - * Used for recording audio and video on the client. - * IMediaRecorder can record the following: - * The audio captured by the local microphone and encoded in AAC format.The video captured by the local camera and encoded by the SDK. + * This class provides APIs for local and remote recording. */ export abstract class IMediaRecorder { /** - * Registers one IMediaRecorderObserver object. - * Make sure that IRtcEngine is initialized before you call this method. + * Registers one IMediaRecorderObserver oberver. + * This method is used to set the callbacks of audio and video recording, so as to notify the app of the recording status and information of the audio and video stream during recording.Before calling this method, ensure the following:The IRtcEngine object is created and initialized.The recording object is created through createMediaRecorder . * - * @param connection The connection information. See RtcConnection . - * @param callback The callbacks for recording local audio and video streams. See IMediaRecorderObserver . + * @param callback The callbacks for recording audio and video streams. See IMediaRecorderObserver . * * @returns * 0: Success.< 0: Failure. @@ -23,12 +20,22 @@ export abstract class IMediaRecorder { abstract setMediaRecorderObserver(callback: IMediaRecorderObserver): number; /** - * @ignore + * Starts recording audio and video streams. + * You can call this method to enable the recording function. Agora supports recording the media streams of local and remote users at the same time.Before you call this method, ensure the following:The recording object is created through createMediaRecorder .The recording observer is registered through setMediaRecorderObserver .You have joined the channel which the remote user that you want to record is in.Supported formats of recording are listed as below:AAC-encoded audio captured by the microphone.Video captured by a camera and encoded in H.264 or H.265.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the onRecorderStateChanged(RecorderStateError, RecorderErrorNoStream) callback.If you want to record the media streams of the local user, ensure the role of the local user is set as broadcaster.If you want to record the media streams of a remote user, ensure you have subscribed to the user's media streams before starting the recording. + * + * @param config The recording configuration. See MediaRecorderConfiguration . + * + * @returns + * 0: Success.< 0: Failure.-2: The parameter is invalid. Ensure the following:The specified path of the recording file exists and is writable.The specified format of the recording file is supported.The maximum recording duration is correctly set.-4: IRtcEngine does not support the request. The recording is ongoing or the recording stops because an error occurs.-7: The method is called before IRtcEngine is initialized. Ensure the IMediaRecorder object is created before calling this method. */ abstract startRecording(config: MediaRecorderConfiguration): number; /** - * @ignore + * Stops recording audio and video streams. + * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. Ensure the IMediaRecorder object is created before calling this method. */ abstract stopRecording(): number; } diff --git a/ts/Private/IAgoraMusicContentCenter.ts b/ts/Private/IAgoraMusicContentCenter.ts index 7dad49144..bc05f5d0b 100644 --- a/ts/Private/IAgoraMusicContentCenter.ts +++ b/ts/Private/IAgoraMusicContentCenter.ts @@ -109,7 +109,13 @@ export abstract class MusicChartCollection { abstract getCount(): number; /** - * @ignore + * Gets the detailed information of the media stream. + * Call this method after calling getStreamCount . + * + * @param index The index of the media stream. + * + * @returns + * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. */ abstract get(index: number): MusicChartInfo; } @@ -377,12 +383,19 @@ export abstract class IMusicContentCenter { abstract preload(songCode: number, jsonOption?: string): number; /** - * @ignore + * 删除已缓存的音乐资源。 + * 你可以调用该方法删除某一已缓存的音乐资源,如需删除多个音乐资源,你可以多次调用该方法。 The cached media file currently being played will not be deleted. + * + * @param songCode 待删除的音乐资源的编号。 + * + * @returns + * 0: 方法调用成功,音乐资源已删除。< 0: Failure. */ abstract removeCache(songCode: number): number; /** - * @ignore + * 获取已缓存的音乐资源信息。 + * 当你不再需要使用已缓存的音乐资源时,你需要及时释放内存以防止内存泄漏。 */ abstract getCaches(): { cacheInfo: MusicCacheInfo[]; cacheInfoSize: number }; diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index 6a5726ce8..67636e1c4 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -137,7 +137,7 @@ export enum MediaDeviceType { */ AudioRecordingDevice = 1, /** - * 2: Video rendering device. + * 2: Video rendering device (graphics card). */ VideoRenderDevice = 2, /** @@ -145,15 +145,15 @@ export enum MediaDeviceType { */ VideoCaptureDevice = 3, /** - * @ignore + * 4: Audio playback device for an app. */ AudioApplicationPlayoutDevice = 4, /** - * @ignore + * (For macOS only)5: Virtual audio playback device (virtual sound card). */ AudioVirtualPlayoutDevice = 5, /** - * @ignore + * (For macOS only)6: Virtual audio capturing device (virtual sound card). */ AudioVirtualRecordingDevice = 6, } @@ -453,7 +453,7 @@ export class LocalVideoStats { */ txPacketLossRate?: number; /** - * @ignore + * The brightness level of the video image captured by the local camera. See CaptureBrightnessLevelType . */ captureBrightnessLevel?: CaptureBrightnessLevelType; /** @@ -461,7 +461,7 @@ export class LocalVideoStats { */ dualStreamEnabled?: boolean; /** - * The local video encoding acceleration type. + * The local video encoding acceleration type. 0: Software encoding is applied without acceleration.1: Hardware encoding is applied for acceleration. */ hwEncoderAccelerating?: number; } @@ -557,7 +557,7 @@ export class RemoteVideoStats { */ delay?: number; /** - * @ignore + * End-to-end video latency (ms). That is, the time elapsed from the video capturing on the remote user's end to the receiving and rendering of the video on the local user's end. */ e2eDelay?: number; /** @@ -876,15 +876,15 @@ export class ScreenCaptureConfiguration { */ screenRect?: Rectangle; /** - * (For Windows and macOS only) Window ID.This parameter takes effect only when you want to capture the window. + * Window ID.This parameter takes effect only when you want to capture the window. */ windowId?: any; /** - * (For Windows and macOS only) The screen capture configuration. See ScreenCaptureParameters . + * The screen capture configuration. See ScreenCaptureParameters . */ params?: ScreenCaptureParameters; /** - * (For Windows and macOS only) The relative position of the shared region to the whole screen. See Rectangle .If you do not set this parameter, the SDK shares the whole screen. If the region you set exceeds the boundary of the screen, only the region within in the screen is shared. If you setwidth or height in Rectangle as 0, the whole screen is shared. + * Rectangle . If you do not set this parameter, the SDK shares the whole screen. If the region you set exceeds the boundary of the screen, only the region within in the screen is shared. If you set width or height in Rectangle as 0, the whole screen is shared. */ regionRect?: Rectangle; } @@ -989,7 +989,7 @@ export class ScreenCaptureSourceInfo { */ isOccluded?: boolean; /** - * @ignore + * The position of a window relative to the entire screen space (including all shareable screens). See Rectangle . */ position?: Rectangle; /** @@ -997,7 +997,7 @@ export class ScreenCaptureSourceInfo { */ minimizeWindow?: boolean; /** - * @ignore + * (For Windows only) Screen ID where the window is located. If the window is displayed across multiple screens, this parameter indicates the ID of the screen with which the window has the largest intersection area. If the window is located outside of the visible screens, the value of this member is -2. */ sourceDisplayId?: any; } @@ -1013,7 +1013,7 @@ export class AdvancedAudioOptions { } /** - * Image configurations + * Image configurations. */ export class ImageTrackOptions { /** @@ -1032,75 +1032,75 @@ export class ImageTrackOptions { /** * The channel media options. - * Agora supports publishing multiple audio streams and one video stream at the same time and in the same RtcConnection . For example, publishMicrophoneTrack, publishAudioTrack, publishCustomAudioTrack, and publishMediaPlayerAudioTrack can be set as true at the same time, but only one of publishCameraTrack, publishCustomVideoTrack, or publishEncodedVideoTrack can be set as true. + * Agora supports publishing multiple audio streams and one video stream at the same time and in the same RtcConnection . For example, publishMicrophoneTrack, publishAudioTrack, publishCustomAudioTrack, and publishMediaPlayerAudioTrack can be set as true at the same time, but only one of publishCameraTrack, publishScreenTrack, publishCustomVideoTrack, or publishEncodedVideoTrack can be set as true.Agora recommends that you set member parameter values yourself according to your business scenario, otherwise the SDK will automatically assign values to member parameters. */ export class ChannelMediaOptions { /** - * Whether to publish the video captured by the camera:true: (Default) Publish the video captured by the camera.false: Do not publish the video captured by the camera. + * Whether to publish the video captured by the camera:true: Publish the video captured by the camera.false: Do not publish the video captured by the camera. */ publishCameraTrack?: boolean; /** - * @ignore + * Whether to publish the video captured by the second camera:true: Publish the video captured by the second camera.false: Do not publish the video captured by the second camera. */ publishSecondaryCameraTrack?: boolean; /** - * Whether to publish the audio captured by the microphone:true: (Default) Publish the audio captured by the microphone.false: Do not publish the audio captured by the microphone. + * Whether to publish the audio captured by the microphone:true: Publish the audio captured by the microphone.false: Do not publish the audio captured by the microphone. */ publishMicrophoneTrack?: boolean; /** - * Whether to publish the video captured from the screen:true: Publish the video captured from the screen.false: (Default) Do not publish the video captured from the screen.This parameter applies to Android and iOS only. + * Whether to publish the video captured from the screen:true: Publish the video captured from the screen.false: Do not publish the captured video from the screen.This parameter applies to Android and iOS only. */ publishScreenCaptureVideo?: boolean; /** - * @ignore + * Whether to publish the audio captured from the screen:true: Publish the audio captured from the screen.false: Publish the audio captured from the screen.This parameter applies to Android and iOS only. */ publishScreenCaptureAudio?: boolean; /** - * @ignore + * Whether to publish the video captured from the screen:true: Publish the video captured from the screen.false: (Default) Do not publish the video captured from the screen. */ publishScreenTrack?: boolean; /** - * Whether to publish the video captured from the second screen:true: Publish the video captured from the second screen.false: (Default) Do not publish the video captured from the second screen. + * Whether to publish the video captured from the second screen:true: Publish the video captured from the second screen.false: Do not publish the video captured from the second screen. */ publishSecondaryScreenTrack?: boolean; /** - * Whether to publish the audio captured from a custom source:true: Publish the audio captured from the custom source.false: (Default) Do not publish the audio captured from the custom source. + * Whether to publish the audio captured from a custom source:true: Publish the audio captured from the custom source.false: Do not publish the captured audio from a custom source. */ publishCustomAudioTrack?: boolean; /** - * @ignore + * The ID of the custom audio source to publish. The default value is 0.If you have set sourceNumber in setExternalAudioSource to a value greater than 1, the SDK creates the corresponding number of custom audio tracks and assigns an ID to each audio track, starting from 0. */ publishCustomAudioTrackId?: number; /** - * Whether to publish the video captured from a custom source:true: Publish the video captured from the custom source.false: (Default) Do not publish the video captured from the custom source. + * Whether to publish the video captured from a custom source:true: Publish the video captured from the custom source.false: Do not publish the captured video from a custom source. */ publishCustomVideoTrack?: boolean; /** - * Whether to publish the encoded video:true: Publish the encoded video.false: (Default) Do not publish the encoded video. + * Whether to publish the encoded video:true: Publish the encoded video.false: Do not publish the encoded video. */ publishEncodedVideoTrack?: boolean; /** - * Whether to publish the audio from the media player:true: Publish the audio from the media player.false: (Default) Do not publish the audio from the media player. + * Whether to publish the audio from the media player:true: Publish the audio from the media player.false: Do not publish the audio from the media player. */ publishMediaPlayerAudioTrack?: boolean; /** - * Whether to publish the video from the media player:true: Publish the video from the media player.false: (Default) Do not publish the video from the media player. + * Whether to publish the video from the media player:true: Publish the video from the media player.false: Do not publish the video from the media player. */ publishMediaPlayerVideoTrack?: boolean; /** - * @ignore + * Whether to publish the local transcoded video:true: Publish the local transcoded video.false: Do not publish the local transcoded video. */ publishTranscodedVideoTrack?: boolean; /** - * Whether to automatically subscribe to all remote audio streams when the user joins a channel:true: (Default) Automatically subscribe to all remote audio streams.false: Do not automatically subscribe to any remote audio streams. + * Whether to automatically subscribe to all remote audio streams when the user joins a channel:true: Subscribe to all remote audio streams.false: Do not automatically subscribe to any remote audio streams. */ autoSubscribeAudio?: boolean; /** - * Whether to automatically subscribe to all remote video streams when the user joins the channel:true: (Default) Automatically subscribe to all remote video streams.false: Do not automatically subscribe to any remote video streams. + * Whether to automatically subscribe to all remote video streams when the user joins the channel:true: Subscribe to all remote video streams.false: Do not automatically subscribe to any remote video streams. */ autoSubscribeVideo?: boolean; /** - * Whether to enable audio capturing or playback:true: (Default) Enable audio capturing or playback.false: Do not enable audio capturing or playback. + * Whether to enable audio capturing or playback:true: Do not enable audio capturing or playback.false: Do not enable audio capturing or playback. */ enableAudioRecordingOrPlayout?: boolean; /** @@ -1113,12 +1113,10 @@ export class ChannelMediaOptions { clientRoleType?: ClientRoleType; /** * The latency level of an audience member in interactive live streaming. See AudienceLatencyLevelType . - * */ audienceLatencyLevel?: AudienceLatencyLevelType; /** * The default video-stream type. See VideoStreamType . - * */ defaultVideoStreamType?: VideoStreamType; /** @@ -1142,11 +1140,11 @@ export class ChannelMediaOptions { */ enableBuiltInMediaEncryption?: boolean; /** - * Whether to publish the sound of a metronome to remote users:true: (Default) Publish the sound of the metronome. Both the local user and remote users can hear the metronome.false: Do not publish the sound of the metronome. Only the local user can hear the metronome. + * Whether to publish the sound of a metronome to remote users:true: Publish processed audio frames. Both the local user and remote users can hear the metronome.false: Do not publish the sound of the metronome. Only the local user can hear the metronome. */ publishRhythmPlayerTrack?: boolean; /** - * Whether to enable interactive mode:true: Enable interactive mode. Once this mode is enabled and the user role is set as audience, the user can receive remote video streams with low latency.false: (Default) Do not enable interactive mode. If this mode is disabled, the user receives the remote video streams in default settings.This parameter only applies to scenarios involving cohosting across channels. The cohosts need to call the joinChannelEx method to join the other host's channel as an audience member, and set isInteractiveAudience to true.This parameter takes effect only when the user role is ClientRoleAudience. + * Whether to enable interactive mode:true: Enable interactive mode. Once this mode is enabled and the user role is set as audience, the user can receive remote video streams with low latency.false:Do not enable interactive mode. If this mode is disabled, the user receives the remote video streams in default settings.This parameter only applies to scenarios involving cohosting across channels. The cohosts need to call the joinChannelEx method to join the other host's channel as an audience member, and set isInteractiveAudience to true.This parameter takes effect only when the user role is ClientRoleAudience. */ isInteractiveAudience?: boolean; /** @@ -1154,7 +1152,7 @@ export class ChannelMediaOptions { */ customVideoTrackId?: number; /** - * Whether the audio stream being published is filtered according to the volume algorithm:true: (Default) The audio stream is filtered. If the audio stream filter is not enabled, this setting does not takes effect.false: The audio stream is not filtered.If you need to enable this function, contact . + * Whether the audio stream being published is filtered according to the volume algorithm:true: The audio stream is not filtered. If the audio stream filter is not enabled, this setting does not takes effect.false: The audio stream is not filtered.If you need to enable this function, contact . */ isAudioFilterable?: boolean; } @@ -1305,23 +1303,23 @@ export interface IRtcEngineEventHandler { onJoinChannelSuccess?(connection: RtcConnection, elapsed: number): void; /** - * Occurs when a user joins a channel. - * This callback notifies the application that a user joins a specified channel. + * Occurs when the first video frame is published. + * The SDK triggers this callback under one of the following circumstances:The local client enables the video module and calls joinChannel successfully.The local client calls muteLocalVideoStream (true) and muteLocalVideoStream(false) in sequence.The local client calls disableVideo and enableVideo in sequence. * * @param connection The connection information. See RtcConnection . - * @param elapsed The time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. + * @param elapsed Time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. */ onRejoinChannelSuccess?(connection: RtcConnection, elapsed: number): void; /** * Reports the proxy connection state. - * You can use this callback to listen for the state of the SDK connecting to a proxy. For example, when a user calls setCloudProxy and joins a channel successfully, the SDK triggers this callback to report the user ID, the proxy type connected, and the time elapsed fromthe user calling joinChannel until this callback is triggered. + * You can use this callback to listen for the state of the SDK connecting to a proxy. For example, when a user calls setCloudProxy and joins a channel successfully, the SDK triggers this callback to report the user ID, the proxy type connected, and the time elapsed fromthe user calling until this callback is triggered. * * @param channel The channel name. * @param uid The user ID. * @param proxyType The proxy type connected. See CloudProxyType . * @param localProxyIp Reserved for future use. - * @param elapsed The time elapsed (ms) from the user calling joinChannel until this callback is triggered. + * @param elapsed The time elapsed (ms) from the user calling until this callback is triggered. */ onProxyConnected?( channel: string, @@ -1341,14 +1339,14 @@ export interface IRtcEngineEventHandler { onError?(err: ErrorCodeType, msg: string): void; /** - * Reports the statistics of the audio stream from each remote user. - * Deprecated:Please use onRemoteAudioStats instead.The SDK triggers this callback once every two seconds to report the audio quality of each remote user/host sending an audio stream. If a channel has multiple users/hosts sending audio streams, the SDK triggers this callback as many times. + * Reports the statistics of the audio stream sent by each remote user. + * Deprecated:Use onRemoteAudioStats instead.The SDK triggers this callback once every two seconds to report the audio quality of each remote user who is sending an audio stream. If a channel has multiple users sending audio streams, the SDK triggers this callback as many times. * * @param connection The connection information. See RtcConnection . * @param remoteUid The user ID of the remote user sending the audio stream. - * @param quality Audio quality of the user. QualityUnknown(0): The quality is unknown.QualityExcellent(1): The quality is excellent.QualityGood(2): The network quality seems excellent, but the bitrate can be slightly lower than excellent.QualityPoor(3): Users can feel the communication is slightly impaired.QualityBad(4): Users cannot communicate smoothly.QualityVbad(5): The quality is so bad that users can barely communicate.QualityDown(6): The network is down, and users cannot communicate at all.See QualityType . + * @param quality Audio quality of the user. See QualityType . * @param delay The network delay (ms) from the sender to the receiver, including the delay caused by audio sampling pre-processing, network transmission, and network jitter buffering. - * @param lost The packet loss rate (%) of the audio packet sent from the remote user. + * @param lost The packet loss rate (%) of the audio packet sent from the remote user to the receiver. */ onAudioQuality?( connection: RtcConnection, @@ -1368,10 +1366,10 @@ export interface IRtcEngineEventHandler { /** * Reports the volume information of users. - * By default, this callback is disabled. You can enable it by calling enableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback according to the time interval set in enableAudioVolumeIndication. The SDK triggers two independent onAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the muteLocalAudioStream method for muting, the SDK continues to report the volume indication of the local user. In the callbacks triggered, the volume information about the local user is 0 If a remote user whose volume is one of the three highest in the channel stops publishing the audio stream for 20 seconds, the callback excludes this user's information; if all remote users stop publishing audio streams for 20 seconds, the SDK stops triggering the callback for remote users. + * By default, this callback is disabled. You can enable it by calling enableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback according to the time interval set in enableAudioVolumeIndication. The SDK triggers two independent onAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the muteLocalAudioStream method to mute, the SDK continues to report the volume indication of the local user.If a remote user whose volume is one of the three highest in the channel stops publishing the audio stream for 20 seconds, the callback excludes this user's information; if all remote users stop publishing audio streams for 20 seconds, the SDK stops triggering the callback for remote users. * * @param connection The connection information. See RtcConnection . - * @param speakers The volume information of the users, see AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or is sending a stream. + * @param speakers The volume information of the users. See AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or is sending a stream. * @param speakerNumber The total number of users.In the callback for the local user, if the local user is sending streams, the value of speakerNumber is 1.In the callback for remote users, the value range of speakerNumber is [0,3]. If the number of remote users who send streams is greater than or equal to three, the value of speakerNumber is 3. * @param totalVolume The volume of the speaker. The value range is [0,255].In the callback for the local user, totalVolume is the volume of the local user who sends a stream.In the callback for remote users, totalVolume is the sum of the volume of all remote users (up to three) whose instantaneous volume is the highest. */ @@ -1397,13 +1395,12 @@ export interface IRtcEngineEventHandler { * * @param connection The connection information. See RtcConnection . * @param stats Statistics of the RTC engine. See RtcStats . - * */ onRtcStats?(connection: RtcConnection, stats: RtcStats): void; /** * Occurs when the video device state changes. - * This callback reports the change of system video devices, such as being unplugged or removed. On a Windows device with an external camera for video capturing, the video disables once the external camera is unplugged.This callback is for Windows and macOS only. + * This callback reports the change of system video devices, such as being unplugged or removed. On a Windows device with an external camera for video capturing, the video disables once the external camera is unplugged. * * @param deviceId The device ID. * @param deviceType Media device types. See MediaDeviceType . @@ -1416,10 +1413,13 @@ export interface IRtcEngineEventHandler { ): void; /** - * Reports current playback progress. - * When playing media files, the SDK triggers this callback every one second to report current playback progress. + * Reports the playback progress of a music file. + * After you called the startAudioMixing method to play a music file, the SDK triggers this callback every two seconds to report the playback progress. + * + * @param position The playback progress (ms). * - * @param position The playback position (ms) of media files. + * @returns + * 0: Success.< 0: Failure. */ onAudioMixingPositionChanged?(position: number): void; @@ -1439,7 +1439,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the video device state changes. - * This callback reports the change of system video devices, such as being unplugged or removed. On a Windows device with an external camera for video capturing, the video disables once the external camera is unplugged.This callback is for Windows and macOS only. + * This callback reports the change of system video devices, such as being unplugged or removed. On a Windows device with an external camera for video capturing, the video disables once the external camera is unplugged. * * @param deviceId The device ID. * @param deviceType Media device types. See MediaDeviceType . @@ -1456,9 +1456,9 @@ export interface IRtcEngineEventHandler { * This callback reports the last mile network conditions of each user in the channel. Last mile refers to the connection between the local device and Agora's edge server.The SDK triggers this callback once every two seconds. If a channel includes multiple users, the SDK triggers this callback as many times.txQuality is Unknown when the user is not sending a stream; rxQuality is Unknown when the user is not receiving a stream. * * @param connection The connection information. See RtcConnection . - * @param remoteUid The user ID. The network quality of the user with this user ID is reported. - * @param txQuality Uplink network quality rating of the user in terms of the transmission bit rate, packet loss rate, average RTT (Round-Trip Time) and jitter of the uplink network. This parameter is a quality rating helping you understand how well the current uplink network conditions can support the selected video encoder configuration. For example, a 1000 Kbps uplink network may be adequate for video frames with a resolution of 640 × 480 and a frame rate of 15 fps in the LIVE_BROADCASTING profile, but may be inadequate for resolutions higher than 1280 × 720. QualityUnknown(0): The quality is unknown.QualityExcellent(1): The quality is excellent.QualityGood(2): The network quality seems excellent, but the bitrate can be slightly lower than excellent.QualityPoor(3): Users can feel the communication is slightly impaired.QualityBad(4): Users cannot communicate smoothly.QualityVbad(5): The quality is so bad that users can barely communicate.QualityDown(6): The network is down, and users cannot communicate at all.See QualityType . - * @param rxQuality Downlink network quality rating of the user in terms of packet loss rate, average RTT, and jitter of the downlink network. QualityUnknown(0): The quality is unknown.QualityExcellent(1): The quality is excellent.QualityGood(2): The network quality seems excellent, but the bitrate can be slightly lower than excellent.QualityPoor(3): Users can feel the communication is slightly impaired.QualityBad(4): Users cannot communicate smoothly.QualityVbad(5): The quality is so bad that users can barely communicate.QualityDown(6): The network is down, and users cannot communicate at all.See QualityType . + * @param remoteUid The user ID. The network quality of the user with this user ID is reported. If the uid is 0, the local network quality is reported. + * @param txQuality Uplink network quality rating of the user in terms of the transmission bit rate, packet loss rate, average RTT (Round-Trip Time) and jitter of the uplink network. This parameter is a quality rating helping you understand how well the current uplink network conditions can support the selected video encoder configuration. For example, a 1000 Kbps uplink network may be adequate for video frames with a resolution of 640 × 480 and a frame rate of 15 fps in the LIVE_BROADCASTING profile, but might be inadequate for resolutions higher than 1280 × 720. See QualityType . + * @param rxQuality Downlink network quality rating of the user in terms of packet loss rate, average RTT, and jitter of the downlink network. See QualityType . */ onNetworkQuality?( connection: RtcConnection, @@ -1468,13 +1468,15 @@ export interface IRtcEngineEventHandler { ): void; /** - * Stops recording the local audio and video. - * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. + * Enables tracing the video frame rendering process. + * By default, the SDK starts tracing the video rendering event automatically when the local user successfully joins the channel. You can call this method at an appropriate time according to the actual application scenario to customize the tracing process. + * After the local user leaves the current channel, the SDK automatically resets the time point to the next time when the user successfully joins the channel. + * The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the onVideoRenderingTracingResult callback. * * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. + * 0: Success.< 0: Failure. */ onIntraRequestReceived?(connection: RtcConnection): void; @@ -1506,8 +1508,7 @@ export interface IRtcEngineEventHandler { * Occurs when the first local video frame is displayed on the local video view. * The SDK triggers this callback when the first local video frame is displayed on the local video view. * - * @param source The capture type of the custom video source. See VideoSourceType . - * @param connection The connection information. See RtcConnection . + * @param source The type of the video source. See VideoSourceType . * @param width The width (px) of the first local video frame. * @param height The height (px) of the first local video frame. * @param elapsed Time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. If you call startPreview before calling joinChannel, then this parameter is the time elapsed from calling the startPreview method until the SDK triggers this callback. @@ -1520,11 +1521,11 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when a user joins a channel. - * This callback notifies the application that a user joins a specified channel. + * Occurs when the first video frame is published. + * The SDK triggers this callback under one of the following circumstances:The local client enables the video module and calls joinChannel successfully.The local client calls muteLocalVideoStream (true) and muteLocalVideoStream(false) in sequence.The local client calls disableVideo and enableVideo in sequence. * * @param connection The connection information. See RtcConnection . - * @param elapsed The time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. + * @param elapsed Time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. */ onFirstLocalVideoFramePublished?( connection: RtcConnection, @@ -1536,7 +1537,7 @@ export interface IRtcEngineEventHandler { * The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the video stream.The remote user stops sending the video stream and re-sends it after 15 seconds. Reasons for such an interruption include:The remote user leaves the channel.The remote user drops offline.The remote user calls muteLocalVideoStream to stop sending the video stream.The remote user calls disableVideo to disable video. * * @param connection The connection information. See RtcConnection . - * @param remoteUid The ID of the remote user sending the video stream. + * @param remoteUid The user ID of the remote user sending the video stream. * @param width The width (px) of the video stream. * @param height The height (px) of the video stream. * @param elapsed The time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. @@ -1553,7 +1554,7 @@ export interface IRtcEngineEventHandler { * Occurs when the video size or rotation of a specified user changes. * * @param connection The connection information. See RtcConnection . - * @param sourceType The capture type of the custom video source. See VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * @param uid The ID of the user whose video size or rotation changes. (The uid for the local user is 0. The video is the local user's video preview). * @param width The width (pixels) of the video stream. * @param height The height (pixels) of the video stream. @@ -1570,9 +1571,9 @@ export interface IRtcEngineEventHandler { /** * Occurs when the local video stream state changes. - * When the state of the local video stream changes (including the state of the video capture and encoding), the SDK triggers this callback to report the current state. This callback indicates the state of the local video stream, including camera capturing and video encoding, and allows you to troubleshoot issues when exceptions occur.The SDK triggers the onLocalVideoStateChanged callback with the state code of LocalVideoStreamStateFailed and error code of LocalVideoStreamErrorCaptureFailure in the following situations:The camera starts normally, but does not output video frames for four consecutive seconds.When the camera outputs the captured video frames, if the video frames are the same for 15 consecutive frames, the SDK triggers the onLocalVideoStateChanged callback with the state code of LocalVideoStreamStateCapturing and error code of LocalVideoStreamErrorCaptureFailure. Note that the video frame duplication detection is only available for video frames with a resolution greater than 200 × 200, a frame rate greater than or equal to 10 fps, and a bitrate less than 20 Kbps.For some device models, the SDK does not trigger this callback when the state of the local video changes while the local video capturing device is in use, so you have to make your own timeout judgment. + * When the state of the local video stream changes (including the state of the video capture and encoding), the SDK triggers this callback to report the current state. This callback indicates the state of the local video stream, including camera capturing and video encoding, and allows you to troubleshoot issues when exceptions occur.The SDK triggers the onLocalVideoStateChanged callback with the state code of LocalVideoStreamStateFailed and error code of LocalVideoStreamErrorCaptureFailure in the following situations:The app switches to the background, and the system gets the camera resource.The camera starts normally, but does not output video frames for four consecutive seconds.When the camera outputs the captured video frames, if the video frames are the same for 15 consecutive frames, the SDK triggers the onLocalVideoStateChanged callback with the state code of LocalVideoStreamStateCapturing and error code of LocalVideoStreamErrorCaptureFailure. Note that the video frame duplication detection is only available for video frames with a resolution greater than 200 × 200, a frame rate greater than or equal to 10 fps, and a bitrate less than 20 Kbps.For some device models, the SDK does not trigger this callback when the state of the local video changes while the local video capturing device is in use, so you have to make your own timeout judgment. * - * @param source The capture type of the custom video source. See VideoSourceType . + * @param source The type of the video source. See VideoSourceType . * @param state The state of the local video, see LocalVideoStreamState . * @param error The detailed error information, see LocalVideoStreamError . */ @@ -1588,8 +1589,8 @@ export interface IRtcEngineEventHandler { * * @param connection The connection information. See RtcConnection . * @param remoteUid The ID of the remote user whose video state changes. - * @param state The state of the remote video, see RemoteVideoState . - * @param reason The reason for the remote video state change, see RemoteVideoStateReason . + * @param state The state of the remote video. See RemoteVideoState . + * @param reason The reason for the remote video state change. See RemoteVideoStateReason . * @param elapsed Time elapsed (ms) from the local user calling the joinChannel method until the SDK triggers this callback. */ onRemoteVideoStateChanged?( @@ -1605,7 +1606,7 @@ export interface IRtcEngineEventHandler { * The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the video stream.The remote user stops sending the video stream and re-sends it after 15 seconds. Reasons for such an interruption include:The remote user leaves the channel.The remote user drops offline.The remote user calls muteLocalVideoStream to stop sending the video stream.The remote user calls disableVideo to disable video. * * @param connection The connection information. See RtcConnection . - * @param remoteUid The ID of the remote user sending the video stream. + * @param remoteUid The user ID of the remote user sending the video stream. * @param width The width (px) of the video stream. * @param height The height (px) of the video stream. * @param elapsed The time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. @@ -1619,8 +1620,8 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when a remote user (COMMUNICATION)/ host (LIVE_BROADCASTING) joins the channel. - * In a communication channel, this callback indicates that a remote user joins the channel. The SDK also triggers this callback to report the existing users in the channel when a user joins the channel.In a live-broadcast channel, this callback indicates that a host joins the channel. The SDK also triggers this callback to report the existing hosts in the channel when a host joins the channel. Agora recommends limiting the number of hosts to 17.The SDK triggers this callback under one of the following circumstances:A remote user/host joins the channel by calling the joinChannel method.A remote user switches the user role to the host after joining the channel.A remote user/host rejoins the channel after a network interruption. + * Occurs when a remote user (in the communication profile)/ host (in the live streaming profile) leaves the channel. + * In a communication channel, this callback indicates that a remote user joins the channel. The SDK also triggers this callback to report the existing users in the channel when a user joins the channel.In a live-broadcast channel, this callback indicates that a host joins the channel. The SDK also triggers this callback to report the existing hosts in the channel when a host joins the channel. Agora recommends limiting the number of hosts to 17.The SDK triggers this callback under one of the following circumstances:A remote user/host joins the channel.A remote user switches the user role to the host after joining the channel.A remote user/host rejoins the channel after a network interruption. * * @param connection The connection information. See RtcConnection . * @param remoteUid The ID of the user or host who joins the channel. @@ -1703,7 +1704,7 @@ export interface IRtcEngineEventHandler { * * @param connection The connection information. See RtcConnection . * @param remoteUid The user ID of the remote user. - * @param enabled Whether the specified remote user enables/disables the local video capturing function:true: Enable. Other users in the channel can see the video of this remote user.false: Disable. Other users in the channel can no longer receive the video stream from this remote user, while this remote user can still receive the video streams from other users. + * @param enabled Whether the specified remote user enables/disables the local video capturing function:true: The video module is enabled. Other users in the channel can see the video of this remote user.false: The video module is disabled. Other users in the channel can no longer receive the video stream from this remote user, while this remote user can still receive the video streams from other users. */ onUserEnableLocalVideo?( connection: RtcConnection, @@ -1721,20 +1722,20 @@ export interface IRtcEngineEventHandler { onLocalAudioStats?(connection: RtcConnection, stats: LocalAudioStats): void; /** - * Reports the statistics of the audio stream sent by each remote users. - * The SDK triggers this callback once every two seconds. If a channel includes multiple users, the SDK triggers this callback as many times. + * Reports the transport-layer statistics of each remote audio stream. + * The SDK triggers this callback once every two seconds for each remote user who is sending audio streams. If a channel includes multiple remote users, the SDK triggers this callback as many times. * * @param connection The connection information. See RtcConnection . - * @param stats Statistics of the received remote audio stream. See RemoteAudioStats . + * @param stats The statistics of the received remote audio streams. See RemoteAudioStats . */ onRemoteAudioStats?(connection: RtcConnection, stats: RemoteAudioStats): void; /** - * Reports the statistics of the video stream sent by each remote users. - * Reports the statistics of the video stream from the remote users. The SDK triggers this callback once every two seconds for each remote user. If a channel has multiple users/hosts sending video streams, the SDK triggers this callback as many times. + * Reports the statistics of the local video stream. + * The SDK triggers this callback once every two seconds to report the statistics of the local video stream. * * @param connection The connection information. See RtcConnection . - * @param stats Statistics of the remote video stream. + * @param stats The statistics of the local video stream. See LocalVideoStats . */ onLocalVideoStats?(connection: RtcConnection, stats: LocalVideoStats): void; @@ -1743,7 +1744,7 @@ export interface IRtcEngineEventHandler { * Reports the statistics of the video stream from the remote users. The SDK triggers this callback once every two seconds for each remote user. If a channel has multiple users/hosts sending video streams, the SDK triggers this callback as many times. * * @param connection The connection information. See RtcConnection . - * @param stats Statistics of the remote video stream. + * @param stats Statistics of the remote video stream. See RemoteVideoStats . */ onRemoteVideoStats?(connection: RtcConnection, stats: RemoteVideoStats): void; @@ -1812,7 +1813,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the SDK cannot reconnect to Agora's edge server 10 seconds after its connection to the server is interrupted. - * The SDK triggers this callback when it cannot connect to the server 10 seconds after calling the joinChannel method, regardless of whether it is in the channel. If the SDK fails to rejoin the channel within 20 minutes after disconnecting, the SDK will stop trying to reconnect. + * The SDK triggers this callback when it cannot connect to the server 10 seconds after calling the joinChannel method, regardless of whether it is in the channel. If the SDK fails to rejoin the channel 20 minutes after being disconnected from Agora's edge server, the SDK stops rejoining the channel. * * @param connection The connection information. See RtcConnection . */ @@ -1820,7 +1821,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the connection between the SDK and the server is interrupted. - * Deprecated:Use onConnectionStateChanged instead.The SDK triggers this callback when it loses connection with the server for more than four seconds after the connection is established. After triggering this callback, the SDK tries to reconnect to the server. You can use this callback to implement pop-up reminders. The difference between this callback and onConnectionLost is:The SDK triggers the onConnectionInterrupted callback when it loses connection with the server for more than four seconds after it successfully joins the channel.The SDK triggers the onConnectionLost callback when it loses connection with the server for more than 10 seconds, whether or not it joins the channel.If the SDK fails to rejoin the channel 20 minutes after being disconnected from Agora's edge server, the SDK stops rejoining the channel. + * Deprecated:Use onConnectionStateChanged instead.The SDK triggers this callback when it loses connection with the server for more than four seconds after the connection is established. After triggering this callback, the SDK tries to reconnect to the server. You can use this callback to implement pop-up reminders. The differences between this callback and onConnectionLost are as follow:The SDK triggers the onConnectionInterrupted callback when it loses connection with the server for more than four seconds after it successfully joins the channel.The SDK triggers the onConnectionLost callback when it loses connection with the server for more than 10 seconds, whether or not it joins the channel.If the SDK fails to rejoin the channel 20 minutes after being disconnected from Agora's edge server, the SDK stops rejoining the channel. * * @param connection The connection information. See RtcConnection . */ @@ -1828,7 +1829,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the connection is banned by the Agora server. - * Deprecated:Please use onConnectionStateChanged instead. + * Deprecated:Use onConnectionStateChanged instead. * * @param connection The connection information. See RtcConnection . */ @@ -1841,7 +1842,7 @@ export interface IRtcEngineEventHandler { * @param connection The connection information. See RtcConnection . * @param remoteUid The ID of the remote user sending the message. * @param streamId The stream ID of the received message. - * @param data received data. + * @param data The data received. * @param length The data length (byte). * @param sentTs The time when the data stream is sent. */ @@ -1876,7 +1877,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the token expires. - * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call joinChannel to rejoin the channel. + * When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, you need to generate a new token on your app server, and call joinChannel to rejoin the channel. * * @param connection The connection information. See RtcConnection . */ @@ -1884,7 +1885,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the token expires in 30 seconds. - * When the token is about to expire in 30 seconds, the SDK triggers this callback to remind the app to renew the token.Upon receiving this callback, generate a new token on your server, and call renewToken to pass the new token to the SDK. + * When the token is about to expire in 30 seconds, the SDK triggers this callback to remind the app to renew the token.Upon receiving this callback, you need to generate a new token on your server, and call renewToken to pass the new token to the SDK. * * @param connection The connection information. See RtcConnection . * @param token The token that expires in 30 seconds. @@ -1901,7 +1902,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the first audio frame is published. - * The SDK triggers this callback under one of the following circumstances:The local client enables the audio module and calls joinChannel successfully.The local client calls muteLocalAudioStream (true) and muteLocalAudioStream(false) in sequence.The local client calls disableAudio and enableAudio in sequence. + * The SDK triggers this callback under one of the following circumstances:The local client enables the audio module and calls joinChannel successfully.The local client calls muteLocalAudioStream (true) and muteLocalAudioStreamfalse() in sequence.The local client calls disableAudio and enableAudio in sequence. * * @param connection The connection information. See RtcConnection . * @param elapsed Time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. @@ -1912,12 +1913,12 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the first audio frame sent by a specified remote user is received. + * Occurs when the SDK receives the first audio frame from a specific remote user. * Deprecated:Use onRemoteAudioStateChanged instead. * * @param connection The connection information. See RtcConnection . - * @param userId The ID of the remote user sending the audio frames. - * @param elapsed The time elapsed (ms) from the local user calling the joinChannel method until the SDK triggers this callback. + * @param userId The user ID of the remote user. + * @param elapsed The time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. */ onFirstRemoteAudioFrame?( connection: RtcConnection, @@ -1927,11 +1928,11 @@ export interface IRtcEngineEventHandler { /** * Occurs when the SDK decodes the first remote audio frame for playback. - * Deprecated:Use onRemoteAudioStateChanged instead.The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the audio stream.The remote user stops sending the audio stream and re-sends it after 15 seconds, and the possible reasons include:The remote user leaves the channel.The remote user is offline.The remote user calls muteLocalAudioStream to stop sending the video stream.The remote user calls disableAudio to disable video. + * Deprecated:Use onRemoteAudioStateChanged instead.The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the audio stream for the first time.The remote user's audio is offline and then goes online to re-send audio. It means the local user cannot receive audio in 15 seconds. Reasons for such an interruption include:The remote user leaves channel.The remote user drops offline.The remote user calls muteLocalAudioStream to stop sending the audio stream.The remote user calls disableAudio to disable audio. * * @param connection The connection information. See RtcConnection . * @param uid The user ID of the remote user. - * @param elapsed The time elapsed (ms) from the local user calling the joinChannel method until the SDK triggers this callback. + * @param elapsed The time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. */ onFirstRemoteAudioDecoded?( connection: RtcConnection, @@ -1973,10 +1974,10 @@ export interface IRtcEngineEventHandler { /** * Occurs when the most active remote speaker is detected. - * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user, who is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. + * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user whose volume is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. * * @param connection The connection information. See RtcConnection . - * @param uid The user ID of the most active remote speaker. + * @param uid The user ID of the most active speaker. */ onActiveSpeaker?(connection: RtcConnection, uid: number): void; @@ -2022,8 +2023,8 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the user role switch fails in the interactive live streaming. - * In the live broadcasting channel profile, when the local user calls setClientRole [1/2] to switch their user role after joining the channel but the switch fails, the SDK triggers this callback to report the reason for the failure and the current user role. + * Occurs when the user role switching fails in the interactive live streaming. + * In the live broadcasting channel profile, when the local user calls to switch the user role after joining the channel but the switch fails, the SDK triggers this callback to report the reason for the failure and the current user role. * * @param connection The connection information. See RtcConnection . * @param reason The reason for a user role switch failure. See ClientRoleChangeFailedReason . @@ -2037,7 +2038,7 @@ export interface IRtcEngineEventHandler { /** * Reports the volume change of the audio device or app. - * Occurs when the volume on the playback device, audio capture device, or the volume in the application changes.This callback is for Windows and macOS only. + * Occurs when the volume on the playback device, audio capture device, or the volume in the application changes. * * @param deviceType The device type. See MediaDeviceType . * @param volume The volume value. The range is [0, 255]. @@ -2050,12 +2051,12 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the media push state changes. - * When the media push state changes, the SDK triggers this callback and reports the URL address and the current state of the media push. This callback indicates the state of the media push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter. + * Occurs when the state of Media Push changes. + * When the state of Media Push changes, the SDK triggers this callback and reports the URL address and the current state of the Media Push. This callback indicates the state of the Media Push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter. * - * @param url The URL address where the state of the media push changes. - * @param state The current state of the media push. See RtmpStreamPublishState . - * @param errCode The detailed error information for the media push. See RtmpStreamPublishErrorType . + * @param url The URL address where the state of the Media Push changes. + * @param state The current state of the Media Push. See RtmpStreamPublishState . + * @param errCode The detailed error information for the Media Push. See RtmpStreamPublishErrorType . */ onRtmpStreamingStateChanged?( url: string, @@ -2064,25 +2065,24 @@ export interface IRtcEngineEventHandler { ): void; /** - * Reports events during the media push. + * Reports events during the Media Push. * - * @param url The URL of media push. - * @param eventCode The event code of media push. See RtmpStreamingEvent . + * @param url The URL for Media Push. + * @param eventCode The event code of Media Push. See RtmpStreamingEvent . */ onRtmpStreamingEvent?(url: string, eventCode: RtmpStreamingEvent): void; /** * Occurs when the publisher's transcoding is updated. - * When the LiveTranscoding class in the setLiveTranscoding method updates, the SDK triggers the onTranscodingUpdated callback to report the update information.If you call the setLiveTranscoding method to set the LiveTranscoding class for the first time, the SDK does not trigger this callback. + * When the LiveTranscoding class in the method updates, the SDK triggers the onTranscodingUpdated callback to report the update information.If you call the method to set the LiveTranscoding class for the first time, the SDK does not trigger this callback. */ onTranscodingUpdated?(): void; /** * Occurs when the local audio route changes. - * This method applies to iOS only. + * This callback applies to macOS only. * - * @param routing The current audio routing. - * (-1): Default audio route.(0): The audio route is a headset with a microphone.(1): The audio route is an earpiece.2: The audio route is a headset without a microphone.3: The audio route is the speaker that comes with the device.4: The audio route is an external speaker. (iOS and macOS only)(5): The audio route is a Bluetooth headset. + * @param routing The current audio routing.-1: The default audio route.0: The audio route is a headset with a microphone.1: The audio route is an earpiece.2: The audio route is a headset without a microphone.3: The audio route is the speaker that comes with the device.4: The audio route is an external speaker. (For iOS and macOS only)(5): The audio route is a Bluetooth headset. */ onAudioRoutingChanged?(routing: number): void; @@ -2100,6 +2100,7 @@ export interface IRtcEngineEventHandler { /** * Reports events during the media stream relay. + * Deprecated:This callback is deprecated. * * @param code The event code of channel media relay. See ChannelMediaRelayEvent . */ @@ -2138,7 +2139,7 @@ export interface IRtcEngineEventHandler { /** * Reports the transport-layer statistics of each remote video stream. - * Deprecated:This callback is deprecated; use onRemoteVideoStats instead.This callback reports the transport-layer statistics, such as the packet loss rate and network time delay, once every two seconds after the local user receives a video packet from a remote user.During a call, when the user receives the video packet sent by the remote user/host, the callback is triggered every 2 seconds. + * Deprecated:This callback is deprecated. Use onRemoteVideoStats instead.This callback reports the transport-layer statistics, such as the packet loss rate and network time delay after the local user receives a video packet from a remote user.During a call, when the user receives the video packet sent by the remote user/host, the callback is triggered every 2 seconds. * * @param connection The connection information. See RtcConnection . * @param remoteUid The ID of the remote user sending the video packets. @@ -2158,8 +2159,9 @@ export interface IRtcEngineEventHandler { * Occurs when the network connection state changes. * When the network connection state changes, the SDK triggers this callback and reports the current connection state and the reason for the change. * - * @param state The current connection state. - * @param reason The reason for a connection state change. + * @param connection The connection information. See RtcConnection . + * @param state The current connection state. See ConnectionStateType . + * @param reason The reason for a connection state change. See ConnectionChangedReasonType . */ onConnectionStateChanged?( connection: RtcConnection, @@ -2200,7 +2202,7 @@ export interface IRtcEngineEventHandler { * When encryption is enabled by calling enableEncryption , the SDK triggers this callback if an error occurs in encryption or decryption on the sender or the receiver side. * * @param connection The connection information. See RtcConnection . - * + * @param errorType Details about the error type. See EncryptionErrorType . */ onEncryptionError?( connection: RtcConnection, @@ -2248,8 +2250,8 @@ export interface IRtcEngineEventHandler { * * @param channel The channel name. * @param uid The user ID of the remote user. - * @param oldState The previous subscribing status, see StreamSubscribeState for details. - * @param newState The current subscribing status, see StreamSubscribeState for details. + * @param oldState The previous subscribing status. See StreamSubscribeState . + * @param newState The current subscribing status. See StreamSubscribeState. * @param elapseSinceLastState The time elapsed (ms) from the previous state to the current state. */ onAudioSubscribeStateChanged?( @@ -2281,8 +2283,8 @@ export interface IRtcEngineEventHandler { * Occurs when the audio publishing state changes. * * @param channel The channel name. - * @param oldState The previous subscribing status. See StreamPublishState . - * @param newState The current subscribing status. See StreamPublishState. + * @param oldState The previous publishing state. See StreamPublishState . + * @param newState The current publishing stat. See StreamPublishState. * @param elapseSinceLastState The time elapsed (ms) from the previous state to the current state. */ onAudioPublishStateChanged?( @@ -2295,10 +2297,10 @@ export interface IRtcEngineEventHandler { /** * Occurs when the video publishing state changes. * - * @param source The capture type of the custom video source. See VideoSourceType . + * @param source The type of the video source. See VideoSourceType . * @param channel The channel name. - * @param oldState For the previous publishing state, see StreamPublishState . - * @param newState For the current publishing state, see StreamPublishState. + * @param oldState The previous publishing state. See StreamPublishState . + * @param newState The current publishing stat. See StreamPublishState. * @param elapseSinceLastState The time elapsed (ms) from the previous state to the current state. */ onVideoPublishStateChanged?( @@ -2335,8 +2337,8 @@ export interface IRtcEngineEventHandler { onExtensionStarted?(provider: string, extension: string): void; /** - * Occurs when the extension is disabled. - * After a successful call of enableExtension (false), this callback is triggered. + * Occurs when the extension is enabled. + * After a successful call of enableExtension (true), the extension triggers this callback. * * @param provider The name of the extension provider. * @param extension The name of the extension. @@ -2369,7 +2371,11 @@ export interface IRtcEngineEventHandler { ): void; /** - * @ignore + * Occurs when there's an error during the local video mixing. + * When you fail to call startLocalVideoTranscoder or updateLocalTranscoderConfiguration , the SDK triggers this callback to report the reason. + * + * @param stream The video streams that cannot be mixed during video mixing. See TranscodingVideoStream . + * @param error The reason for local video mixing error. See VideoTranscoderError . */ onLocalVideoTranscoderError?( stream: TranscodingVideoStream, @@ -2377,7 +2383,12 @@ export interface IRtcEngineEventHandler { ): void; /** - * @ignore + * Video frame rendering event callback. + * After calling the startMediaRenderingTracing method or joining the channel, the SDK triggers this callback to report the events of video frame rendering and the indicators during the rendering process. Developers can optimize the indicators to improve the efficiency of the first video frame rendering. + * + * @param uid The user ID. + * @param currentEvent The current video frame rendering event. See MediaTraceEvent . + * @param tracingInfo The indicators during the video frame rendering process. Developers need to reduce the value of indicators as much as possible in order to improve the efficiency of the first video frame rendering. See VideoRenderingTracingInfo . */ onVideoRenderingTracingResult?( connection: RtcConnection, @@ -2510,7 +2521,7 @@ export class RtcEngineContext { */ domainLimit?: boolean; /** - * @ignore + * Whether to automatically register the Agora extensions when initializing IRtcEngine :true: (Default) Automatically register the Agora extensions when initializing IRtcEngine.false: Do not register the Agora extensions when initializing IRtcEngine. You need to call enableExtension to register the Agora extensions. */ autoRegisterAgoraExtensions?: boolean; } @@ -2576,7 +2587,7 @@ export interface IMetadataObserver { /** * Occurs when the local user receives the metadata. * - * @param metadata The metadata received, see Metadata . + * @param metadata The metadata received. See Metadata . */ onMetadataReceived?(metadata: Metadata): void; } @@ -2766,7 +2777,7 @@ export abstract class IRtcEngine { * Gets the SDK version. * * @returns - * An SDKBuildInfo object. + * One SDKBuildInfo object. */ abstract getVersion(): SDKBuildInfo; @@ -2781,7 +2792,10 @@ export abstract class IRtcEngine { abstract getErrorDescription(code: number): string; /** - * @ignore + * Queries the current device's supported video codec capabilities. + * + * @returns + * If the call is successful, an object containing the following attributes is returned:codecInfo: The CodecCapInfo array, indicating the video codec capabillity of the device.size: The size of the CodecCapInfo array.If the call timeouts, please modify the call logic and do not invoke the method in the main thread. */ abstract queryCodecCapability(): { codecInfo: CodecCapInfo[]; size: number }; @@ -2795,7 +2809,7 @@ export abstract class IRtcEngine { * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again.-3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method.-17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.-102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel.-121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. + * 0: Success.< 0: Failure.-2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again.-3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method.-17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recommends that you use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.-102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel.-121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. */ abstract joinChannel( token: string, @@ -2810,7 +2824,7 @@ export abstract class IRtcEngine { * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure.-2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. + * 0: Success.< 0: Failure.-2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recommends that you use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. */ abstract updateChannelMediaOptions(options: ChannelMediaOptions): number; @@ -2840,7 +2854,7 @@ export abstract class IRtcEngine { /** * Sets the channel profile. - * After initializing the SDK, the default channel profile is the live streaming profile. You can call this method to set the usage scenario of the channel. For example, it prioritizes smoothness and low latency for a video call, and prioritizes video quality for the interactive live video streaming.To ensure the quality of real-time communication, Agora recommends that all users in a channel use the same channel profile.This method must be called and set before joinChannel, and cannot be set again after joining the channel.The default video encoding bitrate are different in different channel profiles. + * After initializing the SDK, the default channel profile is the live streaming profile. You can call this method to set the usage scenario of the channel. For example, it prioritizes smoothness and low latency for a video call, and prioritizes video quality for the interactive live video streaming.To ensure the quality of real-time communication, Agora recommends that all users in a channel use the same channel profile.This method must be called and set before joinChannel, and cannot be set again after joining the channel.The default video encoding bitrate are different in different channel profiles. See setVideoEncoderConfiguration . * * @param profile The channel profile. See ChannelProfileType . * @@ -2865,10 +2879,10 @@ export abstract class IRtcEngine { ): number; /** - * Starts an audio and video call loop test. - * Before joining a channel, to test whether the user's local sending and receiving streams are normal, you can call this method to perform an audio and video call loop test, which tests whether the audio and video devices and the user's upstream and downstream networks are working properly.After starting the test, the user needs to make a sound or face the camera. The audio or video is output after about two seconds. If the audio playback is normal, the audio device and the user's upstream and downstream networks are working properly; if the video playback is normal, the video device and the user's upstream and downstream networks are working properly.Call this method before joining a channel.After calling this method, call stopEchoTest to end the test; otherwise, the user cannot perform the next audio and video call loop test and cannot join the channel.In live streaming scenarios, this method only applies to hosts. + * Sets the video encoder configuration. + * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. * - * @param config The configuration of the audio and video call loop test. See EchoTestConfiguration . + * @param config Video profile. See VideoEncoderConfiguration . * * @returns * 0: Success.< 0: Failure. @@ -2886,7 +2900,7 @@ export abstract class IRtcEngine { /** * Enables or disables multi-camera capture. - * In scenarios where there are existing cameras to capture video, Agora recommends that you use the following steps to capture and publish video with multiple cameras:Call this method to enable multi-channel camera capture.Call startPreview [1/2] to start the local video preview.Call startSecondaryCameraCapture to start video capture with the second camera.Call joinChannelEx , and set publishSecondaryCameraTrack to true to publish the video stream captured by the second camera in the channel.If you want to disable multi-channel camera capture, use the following steps:Call stopSecondaryCameraCapture .Call this method with enabled set to false.You can call this method before and after startPreview [1/2] to enable multi-camera capture:If it is enabled before startPreview [1/2], the local video preview shows the image captured by the two cameras at the same time.If it is enabled after startPreview [1/2], the SDK stops the current camera capture first, and then enables the primary camera and the second camera. The local video preview appears black for a short time, and then automatically returns to normal.When using this function, ensure that the system version is 13.0 or later.The minimum iOS device types that support multi-camera capture are as follows:iPhone XRiPhone XSiPhone XS MaxiPad Pro 3rd generation and later + * In scenarios where there are existing cameras to capture video, Agora recommends that you use the following steps to capture and publish video with multiple cameras:Call this method to enable multi-channel camera capture.Call to start the local video preview.Call startCameraCapture , and set sourceType to start video capture with the second camera.Call joinChannelEx , and set publishSecondaryCameraTrack to true to publish the video stream captured by the second camera in the channel.If you want to disable multi-channel camera capture, use the following steps:Call stopCameraCapture .Call this method with enabled set to false.You can call this method before and after to enable multi-camera capture:If it is enabled before , the local video preview shows the image captured by the two cameras at the same time.If it is enabled after , the SDK stops the current camera capture first, and then enables the primary camera and the second camera. The local video preview appears black for a short time, and then automatically returns to normal.When using this function, ensure that the system version is 13.0 or later.The minimum iOS device types that support multi-camera capture are as follows:iPhone XRiPhone XSiPhone XS MaxiPad Pro 3rd generation and later * * @param enabled Whether to enable multi-camera video capture mode:true: Enable multi-camera capture mode; the SDK uses multiple cameras to capture video.false: Disable multi-camera capture mode; the SDK uses a single camera to capture video. * @param config Capture configuration for the second camera. See CameraCapturerConfiguration . @@ -2919,9 +2933,9 @@ export abstract class IRtcEngine { /** * Enables the local video preview and specifies the video source for the preview. - * This method starts the local video preview before joining the channel. Before calling this method, ensure that you do the following:Call setView to set the local preview window.Call enableVideo to enable the video.The local preview enables the mirror mode by default.After the local video preview is enabled, if you call leaveChannel to exit the channel, the local preview remains until you call stopPreview to disable it.The video source type set in this method needs to be consistent with the video source type of VideoCanvas you set in setupLocalVideo . + * You can call this method to enable local video preview. Before calling this method, ensure that you do the following:Call setView to set the local preview window.Call enableVideo to enable the video.The local preview enables the mirror mode by default.After the local video preview is enabled, if you call leaveChannel to exit the channel, the local preview remains until you call stopPreview to disable it.The video source type set in this method needs to be consistent with the video source type of VideoCanvas you set in setupLocalVideo . * - * @param sourceType The type of the video frame, see VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * * @returns * 0: Success.< 0: Failure. @@ -2932,7 +2946,7 @@ export abstract class IRtcEngine { * Stops the local video preview. * After calling startPreview to start the preview, if you want to close the local video preview, call this method.Call this method before joining a channel or after leaving a channel. * - * @param sourceType The type of the video frame, see VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * * @returns * < 0: Failure. @@ -2972,12 +2986,12 @@ export abstract class IRtcEngine { ): number; /** - * Sets the image enhancement options. - * Enables or disables image enhancement, and sets the options.Call this method before calling enableVideo or startPreview [1/2] .This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Sets low-light enhancement. + * The low-light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .Dark light enhancement has certain requirements for equipment performance. The low-light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-light enhancement, Agora recommends modifying the low-light enhancement options to a less performance-consuming level or disabling low-light enhancement entirely.Both this method and setExtensionProperty can turn on low-light enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * - * @param enabled Whether to enable the image enhancement function:true: Enable the image enhancement function.false: (Default) Disable the image enhancement function. - * @param options The image enhancement options. See BeautyOptions . - * @param type The type of the video source, see MediaSourceType . + * @param enabled Whether to enable low-light enhancement function:true: Enable low-light enhancement function.false: (Default) Disable low-light enhancement function. + * @param options The low-light enhancement options. See LowlightEnhanceOptions . + * @param type The type of the video source. See MediaSourceType . * * @returns * 0: Success.< 0: Failure. @@ -3006,12 +3020,12 @@ export abstract class IRtcEngine { ): number; /** - * Sets the image enhancement options. - * Enables or disables image enhancement, and sets the options.Call this method before calling enableVideo or startPreview [1/2] .This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Sets low-light enhancement. + * The low-light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .Dark light enhancement has certain requirements for equipment performance. The low-light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-light enhancement, Agora recommends modifying the low-light enhancement options to a less performance-consuming level or disabling low-light enhancement entirely.Both this method and setExtensionProperty can turn on low-light enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * - * @param enabled Whether to enable the image enhancement function:true: Enable the image enhancement function.false: (Default) Disable the image enhancement function. - * @param options The image enhancement options. See BeautyOptions . - * @param type The type of the video source, see MediaSourceType . + * @param enabled Whether to enable low-light enhancement function:true: Enable low-light enhancement function.false: (Default) Disable low-light enhancement function. + * @param options The low-light enhancement options. See LowlightEnhanceOptions . + * @param type The type of the video source. See MediaSourceType . * * @returns * 0: Success.< 0: Failure. @@ -3023,12 +3037,12 @@ export abstract class IRtcEngine { ): number; /** - * Sets the image enhancement options. - * Enables or disables image enhancement, and sets the options.Call this method before calling enableVideo or startPreview [1/2] .This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Sets low-light enhancement. + * The low-light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .Dark light enhancement has certain requirements for equipment performance. The low-light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-light enhancement, Agora recommends modifying the low-light enhancement options to a less performance-consuming level or disabling low-light enhancement entirely.Both this method and setExtensionProperty can turn on low-light enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * - * @param enabled Whether to enable the image enhancement function:true: Enable the image enhancement function.false: (Default) Disable the image enhancement function. - * @param options The image enhancement options. See BeautyOptions . - * @param type The type of the video source, see MediaSourceType . + * @param enabled Whether to enable low-light enhancement function:true: Enable low-light enhancement function.false: (Default) Disable low-light enhancement function. + * @param options The low-light enhancement options. See LowlightEnhanceOptions . + * @param type The type of the video source. See MediaSourceType . * * @returns * 0: Success.< 0: Failure. @@ -3041,10 +3055,10 @@ export abstract class IRtcEngine { /** * Enables/Disables the virtual background. - * The virtual background function allows you to replace the original background image of the local user or to blur the background. After successfully enabling the virtual background function, all users in the channel can see the customized background.Call this method before calling enableVideo or startPreview [1/2] .This feature requires high performance devices. Agora recommends that you implement it on devices equipped with the following chips:Devices with an i5 CPU and betterAgora recommends that you use this feature in scenarios that meet the following conditions:A high-definition camera device is used, and the environment is uniformly lit.There are few objects in the captured video. Portraits are half-length and unobstructed. Ensure that the background is a solid color that is different from the color of the user's clothing.This method relies on the virtual background dynamic library libagora_segmentation_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * The virtual background feature enables the local user to replace their original background with a static image, dynamic video, blurred background, or portrait-background segmentation to achieve picture-in-picture effect. Once the virtual background feature is enabled, all users in the channel can see the custom background.Call this method before calling enableVideo or .This feature requires high performance devices. Agora recommends that you implement it on devices equipped with the following chips:Devices with an i5 CPU and betterAgora recommends that you use this feature in scenarios that meet the following conditions:A high-definition camera device is used, and the environment is uniformly lit.There are few objects in the captured video. Portraits are half-length and unobstructed. Ensure that the background is a solid color that is different from the color of the user's clothing.This method relies on the virtual background dynamic library libagora_segmentation_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * * @param enabled Whether to enable virtual background:true: Enable virtual background.false: Disable virtual background. - * @param backgroundSource The custom background image. See VirtualBackgroundSource . To adapt the resolution of the custom background image to that of the video captured by the SDK, the SDK scales and crops the custom background image while ensuring that the content of the custom background image is not distorted. + * @param backgroundSource The custom background. See VirtualBackgroundSource . To adapt the resolution of the custom background image to that of the video captured by the SDK, the SDK scales and crops the custom background image while ensuring that the content of the custom background image is not distorted. * @param segproperty Processing properties for background images. See SegmentationProperty . * @param type The type of the video source. See MediaSourceType .In this method, this parameter supports only the following two settings:The default value is PrimaryCameraSource.If you want to use the second camera to capture video, set this parameter to SecondaryCameraSource. * @@ -3081,7 +3095,13 @@ export abstract class IRtcEngine { abstract setupLocalVideo(canvas: VideoCanvas): number; /** - * @ignore + * Sets video application scenarios. + * After successfully calling this method, the SDK will automatically enable the best practice strategies and adjust key performance metrics based on the specified scenario, to optimize the video experience.Ensure that you call this method before joining a channel. + * + * @param scenarioType The type of video application scenario. See VideoApplicationScenarioType .If set to ApplicationScenarioMeeting (1), the SDK automatically enables the following strategies:In meeting scenarios where low-quality video streams are required to have a high bitrate, the SDK automatically enables multiple technologies used to deal with network congestions, to enhance the performance of the low-quality streams and to ensure the smooth reception by subscribers.The SDK monitors the number of subscribers to the high-quality video stream in real time and dynamically adjusts its configuration based on the number of subscribers.If nobody subscribers to the high-quality stream, the SDK automatically reduces its bitrate and frame rate to save upstream bandwidth.If someone subscribes to the high-quality stream, the SDK resets the high-quality stream to the VideoEncoderConfiguration configuration used in the most recent calling of setVideoEncoderConfiguration . If no configuration has been set by the user previously, the following values are used:Resolution: 1280 × 720Frame rate: 15 fpsBitrate: 1600 KbpsThe SDK monitors the number of subscribers to the low-quality video stream in real time and dynamically enables or disables it based on the number of subscribers.If the user has called setDualStreamMode to set that never send low-quality video stream (DisableSimulcastStream), the dynamic adjustment of the low-quality stream in meeting scenarios will not take effect.If nobody subscribes to the low-quality stream, the SDK automatically disables it to save upstream bandwidth.If someone subscribes to the low-quality stream, the SDK enables the low-quality stream and resets it to the SimulcastStreamConfig configuration used in the most recent calling of setDualStreamMode. If no configuration has been set by the user previously, the following values are used:Resolution: 480 × 272Frame rate: 15 fpsBitrate: 500 Kbps + * + * @returns + * 0: Success.< 0: Failure. */ abstract setVideoScenario(scenarioType: VideoApplicationScenarioType): number; @@ -3122,6 +3142,8 @@ export abstract class IRtcEngine { * Sets audio scenarios. * You can call this method either before or after joining a channel. * + * @param scenario The audio scenarios. See AudioScenarioType . Under different audio scenarios, the device uses different volume types. + * * @returns * 0: Success.< 0: Failure. */ @@ -3161,13 +3183,13 @@ export abstract class IRtcEngine { abstract muteAllRemoteAudioStreams(mute: boolean): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. + * Stops or resumes publishing the local audio stream. + * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. + * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract setDefaultMuteAllRemoteAudioStreams(mute: boolean): number; @@ -3217,13 +3239,13 @@ export abstract class IRtcEngine { abstract muteAllRemoteVideoStreams(mute: boolean): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. + * Stops or resumes publishing the local audio stream. + * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. + * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract setDefaultMuteAllRemoteVideoStreams(mute: boolean): number; @@ -3241,7 +3263,7 @@ export abstract class IRtcEngine { /** * Sets the stream type of the remote video. - * Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamMode (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request.The result of this method returns in the onApiCallExecuted callback.You can call this method either before or after joining a channel. If you call both setRemoteVideoStreamType and setRemoteDefaultVideoStreamType , the setting of setRemoteVideoStreamType takes effect. + * Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamMode (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request.You can call this method either before or after joining a channel. If you call both setRemoteVideoStreamType and setRemoteDefaultVideoStreamType , the setting of setRemoteVideoStreamType takes effect. * * @param uid The user ID. * @param streamType The video stream type: VideoStreamType . @@ -3271,7 +3293,8 @@ export abstract class IRtcEngine { /** * Sets the default stream type of subscrption for remote video streams. - * The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request.Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamMode (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The result of this method returns in the onApiCallExecuted callback.Call this method before joining a channel. The SDK does not support changing the default subscribed video stream type after joining a channel.If you call both this method and setRemoteVideoStreamType , the SDK applies the settings in the setRemoteVideoStreamType method. + * The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request. + * Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamMode (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.Call this method before joining a channel. The SDK does not support changing the default subscribed video stream type after joining a channel.If you call both this method and setRemoteVideoStreamType , the SDK applies the settings in the setRemoteVideoStreamType method. * * @param streamType The default video-stream type. See VideoStreamType . * @@ -3297,7 +3320,9 @@ export abstract class IRtcEngine { /** * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. + * You can call this method either before or after joining a channel. + * The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. * * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. @@ -3311,10 +3336,13 @@ export abstract class IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you do not want to subscribe to.You can call this method either before or after joining a channel.The blocklist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams , and autoSubscribeAudio in ChannelMediaOptions .Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. + * Set the blocklist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you do not want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. + * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method either before or after joining a channel. + * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * - * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the audio streams of a user that you do not want to subscribe to, add the user ID in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeAudioBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * * @returns @@ -3326,10 +3354,13 @@ export abstract class IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you do not want to subscribe to.You can call this method either before or after joining a channel.The blocklist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams , and autoSubscribeAudio in ChannelMediaOptions .Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. + * Set the blocklist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you do not want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. + * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * You can call this method either before or after joining a channel. + * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * - * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the audio streams of a user that you do not want to subscribe to, add the user ID in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeAudioBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * * @returns @@ -3392,7 +3423,7 @@ export abstract class IRtcEngine { * Creates a media player instance. * * @returns - * The IMediaPlayer instance, if the method call succeeds.An empty pointer , if the method call fails. + * The IMediaPlayer instance, if the method call succeeds.An empty pointer, if the method call fails. */ abstract createMediaPlayer(): IMediaPlayer; @@ -3407,15 +3438,24 @@ export abstract class IRtcEngine { abstract destroyMediaPlayer(mediaPlayer: IMediaPlayer): number; /** - * Occurs when the uplink network information changes. - * The SDK triggers this callback when the uplink network information changes.This callback only applies to scenarios where you push externally encoded video data in H.264 format to the SDK. + * Creates a recording object for audio and video recording. + * Before you start recording, you need to call this method to create a recording object. Agora SDKs support recording the audio and video streams of both local and remote users. You can call this method as needed to create muitiple recording objects and specify the streams that you want to record through the info parameter.After successfully creating a recording object, you need to call setMediaRecorderObserver to register a recording observer to listen for recording callbacks, and then call startRecording to start recording. * - * @param info The uplink network information. See UplinkNetworkInfo . + * @param info The information about the media streams you want to record. See RecorderStreamInfo . + * + * @returns + * The IMediaRecorder object, if the method call succeeds.An empty pointer, if the method call fails. */ abstract createMediaRecorder(info: RecorderStreamInfo): IMediaRecorder; /** - * @ignore + * Destroys a recording object for audio and video recording. + * When you do not need to record any audio and video streams, you can call this method to destroy the recording object. Before you call this method, if you are recording a media stream, you need to call stopRecording to stop recording. + * + * @param mediaRecorder The recording object to be destroyed. + * + * @returns + * 0: Success.< 0: Failure. */ abstract destroyMediaRecorder(mediaRecorder: IMediaRecorder): number; @@ -3427,7 +3467,6 @@ export abstract class IRtcEngine { * @param filePath File path: * Windows: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: C:\music\audio.mp4. * macOS: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: /var/mobile/Containers/Data/audio.mp4. - * * @param loopback Whether to only play music files on the local client:true: Only play music files on the local client so that only the local user can hear the music.false: Publish music files to remote clients so that both the local user and remote users can hear the music. * @param cycle The number of times the music file plays.≥ 0: The number of playback times. For example, 0 means that the SDK does not play the music file while 1 means that the SDK plays once.-1: Play the audio file in an infinite loop. * @param startPos The playback position (ms) of the music file. @@ -3470,7 +3509,13 @@ export abstract class IRtcEngine { abstract resumeAudioMixing(): number; /** - * @ignore + * Selects the audio track used during playback. + * After getting the track index of the audio file, you can call this method to specify any track to play. For example, if different tracks of a multi-track file store songs in different languages, you can call this method to set the playback language.For the supported formats of audio files, see .You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged (AudioMixingStatePlaying) callback. + * + * @param index The audio track you want to specify. The value range is [0, getAudioTrackCount ()]. + * + * @returns + * 0: Success.< 0: Failure. */ abstract selectAudioTrack(index: number): number; @@ -3507,10 +3552,10 @@ export abstract class IRtcEngine { /** * Retrieves the audio mixing volume for publishing. - * This method helps to troubleshoot audio volume‑related issues.You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged(AudioMixingStatePlaying) callback. + * This method helps troubleshoot audio volume‑related issues.You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged(AudioMixingStatePlaying) callback. * * @returns - * The audio mixing volume, if this method call succeeds. The value range is [0,100].< 0: Failure. + * ≥ 0: The audio mixing volume, if this method call succeeds. The value range is [0,100].< 0: Failure. */ abstract getAudioMixingPublishVolume(): number; @@ -3527,16 +3572,16 @@ export abstract class IRtcEngine { /** * Retrieves the audio mixing volume for local playback. - * This method retrieves the audio mixing volume for local playback. You can use it to troubleshoot audio volume related issues.You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged(AudioMixingStatePlaying) callback. + * This method helps troubleshoot audio volume‑related issues.You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged(AudioMixingStatePlaying) callback. * * @returns - * The audio mixing volume, if this method call succeeds. The value range is [0,100].< 0: Failure. + * ≥ 0: The audio mixing volume, if this method call succeeds. The value range is [0,100].< 0: Failure. */ abstract getAudioMixingPlayoutVolume(): number; /** * Retrieves the duration (ms) of the music file. - * Retrieves the total duration (ms) of the audio file.You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged (AudioMixingStatePlaying) callback. + * Retrieves the total duration (ms) of the audio.You need to call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged (AudioMixingStatePlaying) callback. * * @returns * ≥ 0: The audio mixing duration, if this method call succeeds.< 0: Failure. @@ -3730,7 +3775,7 @@ export abstract class IRtcEngine { /** * Stops playing a specified audio effect. * - * @param soundId The audio effect ID. The ID of each audio effect file is unique. + * @param soundId The ID of the audio effect. Each audio effect has a unique ID. * * @returns * 0: Success.< 0: Failure. @@ -3767,7 +3812,9 @@ export abstract class IRtcEngine { * Retrieves the duration of the audio effect file. * Call this method after joining a channel. * - * @param filePath File path:Windows: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: C:\music\audio.mp4.macOS: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: /var/mobile/Containers/Data/audio.mp4. + * @param filePath File path: + * Windows: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: C:\music\audio.mp4. + * macOS: The absolute path or URL address (including the suffixes of the filename) of the audio effect file. For example: /var/mobile/Containers/Data/audio.mp4. * * @returns * The total duration (ms) of the specified audio effect file, if the method call succeeds.< 0: Failure. @@ -3863,7 +3910,7 @@ export abstract class IRtcEngine { /** * Sets an SDK preset audio effect. - * Call this method to set an SDK preset audio effect for the local user who sends an audio stream. This audio effect does not change the gender characteristics of the original voice. After setting an audio effect, all users in the channel can hear the effect.To get better audio effect quality, Agora recommends setting the scenario parameter of setAudioProfile as AudioScenarioGameStreaming(3) before calling this method.You can call this method either before or after joining a channel.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1) or AudioProfileIot(6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.If you call setAudioEffectPreset and set enumerators except for RoomAcoustics3dVoice or PitchCorrection, do not call setAudioEffectParameters ; otherwise, setAudioEffectPreset is overridden.After calling setAudioEffectPreset, Agora does not recommend you to call the following methods, otherwise the effect set by setAudioEffectPreset will be overwritten: setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceBeautifierParameters setVoiceConversionPreset This method relies on the voice beautifier dynamic library libagora_audio_beauty_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Call this method to set an SDK preset audio effect for the local user who sends an audio stream. This audio effect does not change the gender characteristics of the original voice. After setting an audio effect, all users in the channel can hear the effect.To get better audio effect quality, Agora recommends setting the scenario parameter of setAudioProfile as AudioScenarioGameStreaming(3) before calling this method.You can call this method either before or after joining a channel.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1)AudioProfileIot or (6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.If you call setAudioEffectPreset and set enumerators except for RoomAcoustics3dVoice or PitchCorrection, do not call setAudioEffectParameters ; otherwise, setAudioEffectPreset is overridden.After calling setAudioEffectPreset, Agora does not recommend you to call the following methods, otherwise the effect set by setAudioEffectPreset will be overwritten: setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceBeautifierParameters setVoiceConversionPreset This method relies on the voice beautifier dynamic library libagora_audio_beauty_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * * @param preset The options for SDK preset audio effects. See AudioEffectPreset . * @@ -3874,7 +3921,7 @@ export abstract class IRtcEngine { /** * Sets a preset voice beautifier effect. - * Call this method to set a preset voice beautifier effect for the local user who sends an audio stream. After setting an audio effect, all users in the channel can hear the effect. You can set different voice beautifier effects for different scenarios. To achieve better audio effect quality, Agora recommends that you call setAudioProfile and set the profile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) and scenario to AudioScenarioGameStreaming(3) before calling this method.You can call this method either before or after joining a channel.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1) or AudioProfileIot(6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setVoiceConversionPreset, Agora does not recommend you to call the following methods, otherwise the effect set by setVoiceConversionPreset will be overwritten: setAudioEffectPreset setAudioEffectParameters setVoiceBeautifierPreset setVoiceBeautifierParameters setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb This method relies on the voice beautifier dynamic library libagora_audio_beauty_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Call this method to set a preset voice beautifier effect for the local user who sends an audio stream. After setting an audio effect, all users in the channel can hear the effect. You can set different voice beautifier effects for different scenarios. To achieve better audio effect quality, Agora recommends that you call setAudioProfile and set the profile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) and scenario to AudioScenarioGameStreaming(3) before calling this method.You can call this method either before or after joining a channel.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1) or AudioProfileIot(6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setVoiceConversionPreset, Agora does not recommend you to call the following methods, otherwise the effect set by setVoiceConversionPreset will be overwritten: setAudioEffectPreset setAudioEffectParameters setVoiceBeautifierPreset setVoiceBeautifierParameters setLocalVoicePitch setLocalVoiceFormant setLocalVoiceEqualization setLocalVoiceReverb This method relies on the voice beautifier dynamic library libagora_audio_beauty_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * * @param preset The options for the preset voice beautifier effects: VoiceConversionPreset . * @@ -3885,7 +3932,7 @@ export abstract class IRtcEngine { /** * Sets parameters for SDK preset audio effects. - * Call this method to set the following parameters for the local user who sends an audio stream:3D voice effect: Sets the cycle period of the 3D voice effect.Pitch correction effect: Sets the basic mode and tonic pitch of the pitch correction effect. Different songs have different modes and tonic pitches. Agora recommends bounding this method with interface elements to enable users to adjust the pitch correction interactively.After setting the audio parameters, all users in the channel can hear the effect.You can call this method either before or after joining a channel.To get better audio effect quality, Agora recommends setting the scenario parameter of setAudioProfile as AudioScenarioGameStreaming(3) before calling this method.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1) or AudioProfileIot(6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setAudioEffectParameters, Agora does not recommend you to call the following methods, otherwise the effect set by setAudioEffectParameters will be overwritten: setAudioEffectPreset setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceBeautifierParameters setVoiceConversionPreset + * Call this method to set the following parameters for the local user who sends an audio stream:3D voice effect: Sets the cycle period of the 3D voice effect.Pitch correction effect: Sets the basic mode and tonic pitch of the pitch correction effect. Different songs have different modes and tonic pitches. Agora recommends bounding this method with interface elements to enable users to adjust the pitch correction interactively.After setting the audio parameters, all users in the channel can hear the effect.You can call this method either before or after joining a channel.To get better audio effect quality, Agora recommends setting the scenario parameter of setAudioProfile as AudioScenarioGameStreaming(3) before calling this method.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1)AudioProfileIot or (6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setAudioEffectParameters, Agora does not recommend you to call the following methods, otherwise the effect set by setAudioEffectParameters will be overwritten: setAudioEffectPreset setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceBeautifierParameters setVoiceConversionPreset * * @param preset The options for SDK preset audio effects:RoomAcoustics3dVoice, 3D voice effect:Call setAudioProfile and set the profile parameter in to AudioProfileMusicStandardStereo(3) or AudioProfileMusicHighQualityStereo(5) before setting this enumerator; otherwise, the enumerator setting does not take effect.If the 3D voice effect is enabled, users need to use stereo audio playback devices to hear the anticipated voice effect.PitchCorrection, Pitch correction effect: To achieve better audio effect quality, Agora recommends setting the profile parameter in setAudioProfile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) before setting this enumerator. * @param param1 If you set preset to RoomAcoustics3dVoice, param1 sets the cycle period of the 3D voice effect. The value range is [1,60] and the unit is seconds. The default value is 10, indicating that the voice moves around you every 10 seconds.If you set preset to PitchCorrection, param1 indicates the basic mode of the pitch correction effect:1: (Default) Natural major scale.2: Natural minor scale.3: Japanese pentatonic scale. @@ -3918,12 +3965,12 @@ export abstract class IRtcEngine { ): number; /** - * Sets parameters for the preset voice beautifier effects. - * Call this method to set a gender characteristic and a reverberation effect for the singing beautifier effect. This method sets parameters for the local user who sends an audio stream. After setting the audio parameters, all users in the channel can hear the effect.For better voice effects, Agora recommends that you call setAudioProfile and set scenario to AudioScenarioGameStreaming(3) and profile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) before calling this method.You can call this method either before or after joining a channel.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1) or AudioProfileIot(6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setVoiceBeautifierParameters, Agora does not recommend calling the following methods, otherwise the effect set by setVoiceBeautifierParameters will be overwritten: setAudioEffectPreset setAudioEffectParameters setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceConversionPreset + * Sets parameters for SDK preset audio effects. + * Call this method to set the following parameters for the local user who sends an audio stream:3D voice effect: Sets the cycle period of the 3D voice effect.Pitch correction effect: Sets the basic mode and tonic pitch of the pitch correction effect. Different songs have different modes and tonic pitches. Agora recommends bounding this method with interface elements to enable users to adjust the pitch correction interactively.After setting the audio parameters, all users in the channel can hear the effect.You can call this method either before or after joining a channel.To get better audio effect quality, Agora recommends setting the scenario parameter of setAudioProfile as AudioScenarioGameStreaming(3) before calling this method.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1)AudioProfileIot or (6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setAudioEffectParameters, Agora does not recommend you to call the following methods, otherwise the effect set by setAudioEffectParameters will be overwritten: setAudioEffectPreset setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceBeautifierParameters setVoiceConversionPreset * - * @param preset The option for the preset audio effect:SINGING_BEAUTIFIER: The singing beautifier effect. - * @param param1 The gender characteristics options for the singing voice:1: A male-sounding voice.2: A female-sounding voice. - * @param param2 The reverberation effect options for the singing voice:1: The reverberation effect sounds like singing in a small room.2: The reverberation effect sounds like singing in a large room.3: The reverberation effect sounds like singing in a hall. + * @param preset The options for SDK preset audio effects:RoomAcoustics3dVoice, 3D voice effect:Call setAudioProfile and set the profile parameter in to AudioProfileMusicStandardStereo(3) or AudioProfileMusicHighQualityStereo(5) before setting this enumerator; otherwise, the enumerator setting does not take effect.If the 3D voice effect is enabled, users need to use stereo audio playback devices to hear the anticipated voice effect.PitchCorrection, Pitch correction effect: To achieve better audio effect quality, Agora recommends setting the profile parameter in setAudioProfile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) before setting this enumerator. + * @param param1 If you set preset to RoomAcoustics3dVoice, param1 sets the cycle period of the 3D voice effect. The value range is [1,60] and the unit is seconds. The default value is 10, indicating that the voice moves around you every 10 seconds.If you set preset to PitchCorrection, param1 indicates the basic mode of the pitch correction effect:1: (Default) Natural major scale.2: Natural minor scale.3: Japanese pentatonic scale. + * @param param2 If you set preset to RoomAcoustics3dVoice , you need to set param2 to 0.If you set preset to PitchCorrection, param2 indicates the tonic pitch of the pitch correction effect:1: A2: A#3: B4: (Default) C5: C#6: D7: D#8: E9: F10: F#11: G12: G# * * @returns * 0: Success.< 0: Failure. @@ -3946,7 +3993,13 @@ export abstract class IRtcEngine { abstract setLocalVoicePitch(pitch: number): number; /** - * @ignore + * Set the formant ratio to change the timbre of human voice. + * Formant ratio affects the timbre of voice. The smaller the value, the deeper the sound will be, and the larger, the sharper.You can call this method to set the formant ratio of local audio to change the timbre of human voice. After you set the formant ratio, all users in the channel can hear the changed voice. If you want to change the timbre and pitch of voice at the same time, Agora recommends using this method together with setLocalVoicePitch .You can call this method either before or after joining a channel. + * + * @param formantRatio The formant ratio. The value range is [-1.0, 1.0]. The default value is 0.0, which means do not change the timbre of the voice.Agora recommends setting this value within the range of [-0.4, 0.6]. Otherwise, the voice may be seriously distorted. + * + * @returns + * 0: Success.< 0: Failure. */ abstract setLocalVoiceFormant(formantRatio: number): number; @@ -4053,7 +4106,14 @@ export abstract class IRtcEngine { abstract uploadLogFile(requestId: string): number; /** - * @ignore + * Updates the display mode of the local video view. + * After initializing the local video view, you can call this method to update its rendering and mirror modes. It affects only the video view that the local user sees, not the published local video stream.Ensure that you have called the setupLocalVideo method to initialize the local video view before calling this method.During a call, you can call this method as many times as necessary to update the display mode of the local video view. + * + * @param renderMode The local video display mode. See RenderModeType . + * @param mirrorMode The mirror mode of the local video view. See VideoMirrorModeType .If you use a front camera, the SDK enables the mirror mode by default; if you use a rear camera, the SDK disables the mirror mode by default. + * + * @returns + * 0: Success. < 0: Failure. */ abstract setLocalRenderMode( renderMode: RenderModeType, @@ -4061,7 +4121,15 @@ export abstract class IRtcEngine { ): number; /** - * @ignore + * Updates the display mode of the video view of a remote user. + * After initializing the video view of a remote user, you can call this method to update its rendering and mirror modes. This method affects only the video view that the local user sees.Call this method after initializing the remote view by calling the setupRemoteVideo method.During a call, you can call this method as many times as necessary to update the display mode of the video view of a remote user. + * + * @param uid The user ID of the remote user. + * @param renderMode The rendering mode of the remote user view. + * @param mirrorMode The mirror mode of the remote user view. See VideoMirrorModeType . + * + * @returns + * 0: Success.< 0: Failure. */ abstract setRemoteRenderMode( uid: number, @@ -4070,17 +4138,19 @@ export abstract class IRtcEngine { ): number; /** - * @ignore + * Sets the local video mirror mode. + * Deprecated:This method is deprecated.Use setupLocalVideo or setLocalRenderMode instead. + * + * @param mirrorMode The local video mirror mode. See VideoMirrorModeType . + * + * @returns + * 0: Success.< 0: Failure. */ abstract setLocalVideoMirrorMode(mirrorMode: VideoMirrorModeType): number; /** * Enables or disables the dual-stream mode on the sender and sets the low-quality video stream. - * You can call this method to enable or disable the dual-stream mode on the publisher side. Dual streams are a pairing of a high-quality video stream and a low-quality video stream: - * High-quality video stream: High bitrate, high resolution. - * Low-quality video stream: Low bitrate, low resolution. After you enable dual-stream mode, you can call setRemoteVideoStreamType to choose to receive either the high-quality video stream or the low-quality video stream on the subscriber side. This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-collected video streams. - * If you need to enable dual video streams in a multi-channel scenario, you can call the enableDualStreamModeEx method. - * You can call this method either before or after joining a channel. + * Deprecated:This method is deprecated as of v4.2.0. Use setDualStreamMode instead.You can call this method to enable or disable the dual-stream mode on the publisher side. Dual streams are a pairing of a high-quality video stream and a low-quality video stream:High-quality video stream: High bitrate, high resolution.Low-quality video stream: Low bitrate, low resolution.After you enable dual-stream mode, you can call setRemoteVideoStreamType to choose to receive either the high-quality video stream or the low-quality video stream on the subscriber side.This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-collected video streams.If you need to enable dual video streams in a multi-channel scenario, you can call the enableDualStreamModeEx method.You can call this method either before or after joining a channel. * * @param enabled Whether to enable dual-stream mode:true: Enable dual-stream mode.false: (Default) Disable dual-stream mode. * @param streamConfig The configuration of the low-quality video stream. See SimulcastStreamConfig . @@ -4095,10 +4165,7 @@ export abstract class IRtcEngine { /** * Sets dual-stream mode configuration on the sender, and sets the low-quality video stream. - * The difference and connection between this method and enableDualStreamMode [1/3] is as follows: - * When calling this method and setting mode to DisableSimulcastStream, it has the same effect as enableDualStreamMode [1/3](false). - * When calling this method and setting mode to EnableSimulcastStream, it has the same effect as enableDualStreamMode [1/3](true). - * Both methods can be called before and after joining a channel. If they are used at the same time, the settings in the method called later shall prevail. The SDK enables the low-quality video stream auto mode on the sender by default, which is equivalent to calling this method and setting the mode to AutoSimulcastStream. If you want to modify this behavior, you can call this method and modify the mode to DisableSimulcastStream(never send low-quality video streams) or EnableSimulcastStream (always send low-quality video streams). + * The difference and connection between this method and is as follows:When calling this method and setting mode to DisableSimulcastStream, it has the same effect as (false).When calling this method and setting mode to EnableSimulcastStream, it has the same effect as (true).Both methods can be called before and after joining a channel. If both methods are used, the settings in the method called later takes precedence.The SDK enables the low-quality video stream auto mode on the sender by default, which is equivalent to calling this method and setting the mode to AutoSimulcastStream. If you want to modify this behavior, you can call this method and modify the mode to DisableSimulcastStream (never send low-quality video streams) or EnableSimulcastStream (always send low-quality video streams). * * @param mode The mode in which the video stream is sent. See SimulcastStreamMode . * @param streamConfig The configuration of the low-quality video stream. See SimulcastStreamConfig .When setting mode to DisableSimulcastStream, setting streamConfig will not take effect. @@ -4241,9 +4308,9 @@ export abstract class IRtcEngine { ): number; /** - * Unregisters the encoded audio frame observer. + * Unregisters the video frame observer. * - * @param observer The encoded audio observer. See IAudioEncodedFrameObserver . + * @param observer The video observer, reporting the reception of each video frame. See IVideoFrameObserver . * * @returns * 0: Success.< 0: Failure. @@ -4256,7 +4323,7 @@ export abstract class IRtcEngine { * Adjusts the capturing signal volume. * You can call this method either before or after joining a channel. * - * @param volume The volume of the user. The value range is [0,400].0: Mute.100: (Default) The original volume.400: Four times the original volume (amplifying the audio signals by four times). + * @param volume The volume of the user. The value range is [0,400].0: Mute.If you only need to mute the audio signal, Agora recommends that you use muteRecordingSignal instead.100: (Default) The original volume.400: Four times the original volume (amplifying the audio signals by four times). * * @returns * 0: Success.< 0: Failure. @@ -4266,7 +4333,7 @@ export abstract class IRtcEngine { /** * Whether to mute the recording signal. * - * @param mute true: Mute the recording signal.false: (Default) Unmute the recording signal. + * @param mute true: The media file is muted.false: (Default) Do not mute the recording signal.If you have already called adjustRecordingSignalVolume to adjust the volume, then when you call this method and set it to true, the SDK will record the current volume and mute it. To restore the previous volume, call this method again and set it to false. * * @returns * 0: Success.< 0: Failure. @@ -4277,7 +4344,10 @@ export abstract class IRtcEngine { * Adjusts the playback signal volume of all remote users. * This method adjusts the playback volume that is the mixed volume of all remote users.You can call this method either before or after joining a channel. * - * @param volume The volume of the user. The value range is [0,400].0: Mute.100: (Default) The original volume.400: Four times the original volume (amplifying the audio signals by four times). + * @param volume The volume of the user. The value range is [0,400]. + * 0: Mute.If you only need to mute the audio signal, Agora recommends that you use muteRecordingSignal instead. + * 100: (Default) The original volume. + * 400: Four times the original volume (amplifying the audio signals by four times). * * @returns * 0: Success. < 0: Failure. @@ -4319,7 +4389,7 @@ export abstract class IRtcEngine { /** * Enables loopback audio capturing. - * If you enable loopback audio capturing, the output of the sound card is mixed into the audio stream sent to the other end.This method applies to the macOS and Windows platforms only.macOS does not support loopback audio capture of the default sound card. If you need to use this function, use a virtual sound card and pass its name to the deviceName parameter. Agora recommends using AgoraALD as the virtual sound card for audio capturing.You can call this method either before or after joining a channel. + * If you enable loopback audio capturing, the output of the sound card is mixed into the audio stream sent to the other end.macOS does not support loopback audio capture of the default sound card. If you need to use this function, use a virtual sound card and pass its name to the deviceName parameter. Agora recommends using AgoraALD as the virtual sound card for audio capturing.You can call this method either before or after joining a channel. * * @param enabled Whether to enable loopback audio capturing.true: Enable loopback audio capturing.false: (Default) Disable loopback audio capturing. * @param deviceName macOS: The device name of the virtual sound card. The default value is set to NULL, which means using AgoraALD for loopback audio capturing.Windows: The device name of the sound card. The default is set to NULL, which means the SDK uses the sound card of your device for loopback audio capturing. @@ -4376,6 +4446,7 @@ export abstract class IRtcEngine { /** * Adds an extension to the SDK. + * This method applies to Windows only. * * @param path The extension library path and name. For example: /library/libagora_segmentation_extension.dll. * @param unloadAfterUse Whether to uninstall the current extension when you no longer using it:true: Uninstall the extension when the IRtcEngine is destroyed.false: (Rcommended) Do not uninstall the extension until the process terminates. @@ -4483,7 +4554,13 @@ export abstract class IRtcEngine { ): string; /** - * @ignore + * Sets the video encoder configuration. + * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. + * + * @param config Video profile. See VideoEncoderConfiguration . + * + * @returns + * 0: Success.< 0: Failure. */ abstract setCameraCapturerConfiguration( config: CameraCapturerConfiguration @@ -4559,13 +4636,7 @@ export abstract class IRtcEngine { abstract setCameraZoomFactor(factor: number): number; /** - * Enables/Disables the local video capture. - * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. - * - * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract enableFaceDetection(enabled: boolean): number; @@ -4588,13 +4659,7 @@ export abstract class IRtcEngine { abstract setCameraTorchOn(isOn: boolean): number; /** - * Enables/Disables the local video capture. - * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. - * - * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setCameraAutoFocusFaceModeEnabled(enabled: boolean): number; @@ -4617,13 +4682,7 @@ export abstract class IRtcEngine { abstract isCameraAutoExposureFaceModeSupported(): boolean; /** - * Enables/Disables the local video capture. - * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. - * - * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setCameraAutoExposureFaceModeEnabled(enabled: boolean): number; @@ -4669,7 +4728,7 @@ export abstract class IRtcEngine { ): number; /** - * Shares the screen by specifying the display ID. + * Captures the screen by specifying the display ID. * This method shares a screen or part of the screen.There are two ways to start screen sharing, you can choose one according to your needs:Call this method before joining a channel, and then call joinChannel to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.Call this method after joining a channel, and then call updateChannelMediaOptions and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing. * * @param displayId The display ID of the screen to be shared. @@ -4686,7 +4745,7 @@ export abstract class IRtcEngine { ): number; /** - * Shares the whole or part of a screen by specifying the screen rect. + * Captures the whole or part of a screen by specifying the screen rect. * There are two ways to start screen sharing, you can choose one according to your needs:Call this method before joining a channel, and then call joinChannel to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.Call this method after joining a channel, and then call updateChannelMediaOptions and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.Deprecated:This method is deprecated. Use startScreenCaptureByDisplayId instead. Agora strongly recommends using startScreenCaptureByDisplayId if you need to start screen sharing on a device connected to another display.This method shares a screen or part of the screen. You need to specify the area of the screen to be shared.This method applies to Windows only. * * @param screenRect Sets the relative location of the screen to the virtual screen. @@ -4705,23 +4764,22 @@ export abstract class IRtcEngine { /** * Gets the audio device information. * After calling this method, you can get whether the audio device supports ultra-low-latency capture and playback.You can call this method either before or after joining a channel. + * + * @returns + * The DeviceInfo object that identifies the audio device information.Not null: Success.Null: Failure. */ abstract getAudioDeviceInfo(): DeviceInfo; /** - * Shares the whole or part of a window by specifying the window ID. - * There are two ways to start screen sharing, you can choose one according to your needs: - * Call this method before joining a channel, and then call joinChannel to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing. - * Call this method after joining a channel, and then call updateChannelMediaOptions and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing. This method shares a window or part of the window. You need to specify the ID of the window to be shared.This method applies to the macOS and Windows platforms only.The window sharing feature of the Agora SDK relies on WGC (Windows Graphics Capture) or GDI (Graphics Device Interface) capture, and WGC cannot be set to disable mouse capture on systems earlier than Windows 10 2004. Therefore, captureMouseCursor(false) might not work when you start window sharing on a device with a system earlier than Windows 10 2004. See ScreenCaptureParameters .This method supports window sharing of UWP (Universal Windows Platform) applications. Agora tests the mainstream UWP applications by using the lastest SDK, see details as follows: + * Captures the whole or part of a window by specifying the window ID. + * There are two ways to start screen sharing, you can choose one according to your needs:Call this method before joining a channel, and then call joinChannel to join a channel and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.Call this method after joining a channel, and then call updateChannelMediaOptions and set publishScreenTrack or publishSecondaryScreenTrack to true to start screen sharing.This method captures a window or part of the window. You need to specify the ID of the window to be captured.The window sharing feature of the Agora SDK relies on WGC (Windows Graphics Capture) or GDI (Graphics Device Interface) capture, and WGC cannot be set to disable mouse capture on systems earlier than Windows 10 2004. Therefore, captureMouseCursor(false) might not work when you start window sharing on a device with a system earlier than Windows 10 2004. See ScreenCaptureParameters .This method supports window sharing of UWP (Universal Windows Platform) applications. Agora tests the mainstream UWP applications by using the lastest SDK, see details as follows: * * @param windowId The ID of the window to be shared. * @param regionRect (Optional) Sets the relative location of the region to the screen. If you do not set this parameter, the SDK shares the whole screen. See Rectangle . If the specified region overruns the window, the SDK shares only the region within it; if you set width or height as 0, the SDK shares the whole window. * @param captureParams Screen sharing configurations. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters . * * @returns - * 0: Success.< 0: Failure. - * -2: The parameter is invalid. - * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract startScreenCaptureByWindowId( windowId: any, @@ -4736,28 +4794,24 @@ export abstract class IRtcEngine { * @param contentHint The content hint for screen sharing. See VideoContentHint . * * @returns - * 0: Success.< 0: Failure. - * -2: The parameter is invalid. - * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract setScreenCaptureContentHint(contentHint: VideoContentHint): number; /** - * Updates the screen sharing region. + * Updates the screen capturing region. * Call this method after starting screen sharing or window sharing. * * @param regionRect The relative location of the screen-share area to the screen or window. If you do not set this parameter, the SDK shares the whole screen or window. See Rectangle . If the specified region overruns the screen or window, the SDK shares only the region within it; if you set width or height as 0, the SDK shares the whole screen or window. * * @returns - * 0: Success.< 0: Failure. - * -2: The parameter is invalid. - * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * 0: Success.< 0: Failure.-2: The parameter is invalid.-8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. */ abstract updateScreenCaptureRegion(regionRect: Rectangle): number; /** - * Updates the screen sharing parameters. - * This method is for Windows and macOS only.Call this method after starting screen sharing or window sharing. + * Updates the screen capturing parameters. + * Call this method after starting screen sharing or window sharing. * * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters * @@ -4771,8 +4825,8 @@ export abstract class IRtcEngine { ): number; /** - * Updates the screen sharing parameters. - * This method is for Windows and macOS only.Call this method after starting screen sharing or window sharing. + * Updates the screen capturing parameters. + * Call this method after starting screen sharing or window sharing. * * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters * @@ -4784,7 +4838,11 @@ export abstract class IRtcEngine { abstract startScreenCapture(captureParams: ScreenCaptureParameters2): number; /** - * @ignore + * Starts screen capture. + * This method, as well as startScreenCaptureByDisplayId and startScreenCaptureByWindowId , all have the capability to start screen capture, with the following differences:startScreenCaptureByDisplayId and startScreenCaptureByWindowId only support capturing video from a single screen or window. By calling this method and specifying the sourceType parameter, you can capture multiple video streams used for local video mixing or multi-channel publishing.If you call this method to start screen capture, Agora recommends that you call stopScreenCaptureBySourceType to stop the capture and avoid using stopScreenCapture . + * + * @param sourceType The type of the video source. See VideoSourceType .Windows supports up to four screen capture video streams.macOS supports only one screen capture video stream. You can only set this parameter to VideoSourceScreen(2). + * @param config The configuration of the captured screen. See ScreenCaptureConfiguration . */ abstract startScreenCaptureBySourceType( sourceType: VideoSourceType, @@ -4792,8 +4850,8 @@ export abstract class IRtcEngine { ): number; /** - * Updates the screen sharing parameters. - * This method is for Windows and macOS only.Call this method after starting screen sharing or window sharing. + * Updates the screen capturing parameters. + * Call this method after starting screen sharing or window sharing. * * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters * @@ -4811,7 +4869,7 @@ export abstract class IRtcEngine { /** * Sets the screen sharing scenario. - * When you start screen sharing or window sharing, you can call this method to set the screen sharing scenario. The SDK adjusts the video quality and experience of the sharing according to the scenario.This method applies to macOS and Windows only. + * When you start screen sharing or window sharing, you can call this method to set the screen sharing scenario. The SDK adjusts the video quality and experience of the sharing according to the scenario.Agora recommends that you call this method before joining a channel. * * @param screenScenario The screen sharing scenario. See ScreenScenarioType . * @@ -4821,7 +4879,7 @@ export abstract class IRtcEngine { abstract setScreenCaptureScenario(screenScenario: ScreenScenarioType): number; /** - * Stops screen sharing. + * Stops screen capture. * * @returns * 0: Success.< 0: Failure. @@ -4829,13 +4887,13 @@ export abstract class IRtcEngine { abstract stopScreenCapture(): number; /** - * Stops the local video preview. - * After calling startPreview to start the preview, if you want to close the local video preview, call this method.Call this method before joining a channel or after leaving a channel. + * Stops screen capture. + * After calling startScreenCaptureBySourceType to start capturing video from one or more screens, you can call this method and set the sourceType parameter to stop capturing from the specified screens.If you call startScreenCaptureByWindowId or startScreenCaptureByDisplayId to start screen capture, Agora recommends that you call stopScreenCapture to stop the capture and do not use this one. * - * @param sourceType The type of the video frame, see VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * * @returns - * < 0: Failure. + * 0: Success.< 0: Failure. */ abstract stopScreenCaptureBySourceType(sourceType: VideoSourceType): number; @@ -4931,9 +4989,9 @@ export abstract class IRtcEngine { /** * Starts the local video mixing. - * After calling this method, you can merge multiple video streams into one video stream locally. Common scenarios include the following:In a live streaming scenario with cohosts or when using the Media Push function, you can locally mix the videos of multiple hosts into one.In scenarios where you capture multiple local video streams (for example, video captured by cameras, screen sharing streams, video files, or pictures), you can merge them into one video stream and then publish the mixed video stream after joining the channel. + * After calling this method, you can merge multiple video streams into one video stream locally. For example, you can merge the video streams captured by the camera, screen sharing, media player, remote video, video files, images, etc. into one video stream, and then publish the mixed video stream to the channel.Local video mixing requires more CPU resources. Therefore, Agora recommends enabling this function on devices with higher performance.If you need to mix locally captured video streams, the SDK supports the following capture combinations:On the Windows platform, it supports up to 4 video streams captured by cameras + 4 screen sharing streams.On the macOS platform, it supports up to 4 video streams captured by cameras + 1 screen sharing stream.If you need to mix the locally collected video streams, you need to call this method after startCameraCapture or startScreenCaptureBySourceType If you want to publish the mixed video stream to the channel, you need to set publishTranscodedVideoTrack in ChannelMediaOptions to true when calling joinChannel or updateChannelMediaOptions . * - * @param config Configuration of the local video mixing, see LocalTranscoderConfiguration .The maximum resolution of each video stream participating in the local video mixing is 4096 × 2160. If this limit is exceeded, video mixing does not take effect. + * @param config Configuration of the local video mixing, see LocalTranscoderConfiguration .The maximum resolution of each video stream participating in the local video mixing is 4096 × 2160. If this limit is exceeded, video mixing does not take effect.The maximum resolution of the mixed video stream is 4096 × 2160. * * @returns * 0: Success.< 0: Failure. @@ -4944,7 +5002,7 @@ export abstract class IRtcEngine { /** * Updates the local video mixing configuration. - * After calling startLocalVideoTranscoder , call this method if you want to update the local video mixing configuration. + * After calling startLocalVideoTranscoder , call this method if you want to update the local video mixing configuration.If you want to update the video source type used for local video mixing, such as adding a second camera or screen to capture video, you need to call this method after startCameraCapture or startScreenCaptureBySourceType * * @param config Configuration of the local video mixing, see LocalTranscoderConfiguration . * @@ -4962,7 +5020,11 @@ export abstract class IRtcEngine { abstract stopLocalVideoTranscoder(): number; /** - * @ignore + * Starts camera capture. + * You can call this method to start capturing video from one or more cameras by specifying sourceType. + * + * @param sourceType The type of the video source. See VideoSourceType .On Windows and macOS platforms, you can capture video from up to 4 cameras. + * @param config The configuration of the video capture. See CameraCapturerConfiguration . */ abstract startCameraCapture( sourceType: VideoSourceType, @@ -4970,19 +5032,19 @@ export abstract class IRtcEngine { ): number; /** - * Stops the local video preview. - * After calling startPreview to start the preview, if you want to close the local video preview, call this method.Call this method before joining a channel or after leaving a channel. + * Stops camera capture. + * After calling startCameraCapture to start capturing video through one or more cameras, you can call this method and set the sourceType parameter to stop the capture from the specified cameras.If you are using the local video mixing function, calling this method can cause the local video mixing to be interrupted. * - * @param sourceType The type of the video frame, see VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * * @returns - * < 0: Failure. + * 0: Success.< 0: Failure. */ abstract stopCameraCapture(sourceType: VideoSourceType): number; /** * Sets the rotation angle of the captured video. - * When the video capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video. + * This method applies to Windows only.When the video capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video. * * @param type The video source type. See VideoSourceType . * @param orientation The clockwise rotation angle. See VideoOrientation . @@ -4997,7 +5059,7 @@ export abstract class IRtcEngine { /** * Sets the rotation angle of the captured video. - * When the video capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video. + * This method applies to Windows only.When the video capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video. * * @param type The video source type. See VideoSourceType . * @param orientation The clockwise rotation angle. See VideoOrientation . @@ -5015,7 +5077,7 @@ export abstract class IRtcEngine { * You can call this method either before or after joining a channel. * * @returns - * The current connection state. + * The current connection state. See ConnectionStateType . */ abstract getConnectionState(): ConnectionStateType; @@ -5117,7 +5179,7 @@ export abstract class IRtcEngine { /** * Adds a watermark image to the local video. - * This method adds a PNG watermark image to the local video in the live streaming. Once the watermark image is added, all the audience in the channel (CDN audience included), and the capturing device can see and capture it. The Agora SDK supports adding only one watermark image onto a local video or CDN live stream. The newly added watermark image replaces the previous one.The watermark coordinates are dependent on the settings in the setVideoEncoderConfiguration method:If the orientation mode of the encoding video ( OrientationMode ) is fixed landscape mode or the adaptive landscape mode, the watermark uses the landscape orientation.If the orientation mode of the encoding video (OrientationMode) is fixed portrait mode or the adaptive portrait mode, the watermark uses the portrait orientation.When setting the watermark position, the region must be less than the dimensions set in the setVideoEncoderConfiguration method; otherwise, the watermark image will be cropped.Ensure that calling this method after enableVideo .If you only want to add a watermark to the media push, you can call this method or the setLiveTranscoding method.This method supports adding a watermark image in the PNG file format only. Supported pixel formats of the PNG image are RGBA, RGB, Palette, Gray, and Alpha_gray.If the dimensions of the PNG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.If you have enabled the local video preview by calling the startPreview method, you can use the visibleInPreview member to set whether or not the watermark is visible in the preview.If you have enabled the mirror mode for the local video, the watermark on the local video is also mirrored. To avoid mirroring the watermark, Agora recommends that you do not use the mirror and watermark functions for the local video at the same time. You can implement the watermark function in your application layer. + * This method adds a PNG watermark image to the local video in the live streaming. Once the watermark image is added, all the audience in the channel (CDN audience included), and the capturing device can see and capture it. The Agora SDK supports adding only one watermark image onto a local video or CDN live stream. The newly added watermark image replaces the previous one.The watermark coordinates are dependent on the settings in the setVideoEncoderConfiguration method:If the orientation mode of the encoding video ( OrientationMode ) is fixed landscape mode or the adaptive landscape mode, the watermark uses the landscape orientation.If the orientation mode of the encoding video (OrientationMode) is fixed portrait mode or the adaptive portrait mode, the watermark uses the portrait orientation.When setting the watermark position, the region must be less than the dimensions set in the setVideoEncoderConfiguration method; otherwise, the watermark image will be cropped.Ensure that calling this method after enableVideo .If you only want to add a watermark to the media push, you can call this method or the method.This method supports adding a watermark image in the PNG file format only. Supported pixel formats of the PNG image are RGBA, RGB, Palette, Gray, and Alpha_gray.If the dimensions of the PNG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.If you have enabled the local video preview by calling the startPreview method, you can use the visibleInPreview member to set whether or not the watermark is visible in the preview.If you have enabled the mirror mode for the local video, the watermark on the local video is also mirrored. To avoid mirroring the watermark, Agora recommends that you do not use the mirror and watermark functions for the local video at the same time. You can implement the watermark function in your application layer. * * @param watermarkUrl The local file path of the watermark image to be added. This method supports adding a watermark image from the local absolute or relative file path. * @param options The options of the watermark image to be added. See WatermarkOptions . @@ -5188,9 +5250,7 @@ export abstract class IRtcEngine { ): number; /** - * Registers the metadata observer. - * You need to implement the IMetadataObserver class and specify the metadata type in this method. This method enables you to add synchronized metadata in the video stream for more diversified - * live interactive streaming, such as sending shopping links, digital coupons, and online quizzes.Call this method before joinChannel. + * Unregisters the specified metadata observer. * * @param observer The metadata observer. See IMetadataObserver . * @param type The metadata type. The SDK currently only supports VideoMetadata. See MetadataType . @@ -5226,7 +5286,14 @@ export abstract class IRtcEngine { ): number; /** - * @ignore + * Sets whether to enable the AI ​​noise reduction function and set the noise reduction mode. + * You can call this method to enable AI noise reduction function. Once enabled, the SDK automatically detects and reduce stationary and non-stationary noises from your audio on the premise of ensuring the quality of human voice. Stationary noises refers to noise signal with constant average statistical properties and negligibly small fluctuations of level within the period of observation. Common sources of stationary noises are:Television;Air conditioner;Machinery, etc.Non-stationary noises refers to noise signal with huge fluctuations of level within the period of observation, Common source of non-stationary noises are:Thunder;Explosion;Cracking, etc. + * + * @param enabled Whether to enable the AI noise reduction function:true: Enable the AI noise reduction.false: (Default) Disable the AI noise reduction. + * @param mode The AI noise reduction modes. See AudioAinsMode . + * + * @returns + * 0: Success.< 0: Failure. */ abstract setAINSMode(enabled: boolean, mode: AudioAinsMode): number; @@ -5252,7 +5319,7 @@ export abstract class IRtcEngine { * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again.-3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method.-17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.-102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel.-121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. + * 0: Success.< 0: Failure. */ abstract joinChannelWithUserAccount( token: string, @@ -5271,7 +5338,7 @@ export abstract class IRtcEngine { * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again.-3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method.-17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state.-102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel.-121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. + * 0: Success.< 0: Failure. */ abstract joinChannelWithUserAccountEx( token: string, @@ -5281,13 +5348,14 @@ export abstract class IRtcEngine { ): number; /** - * Gets the user information by passing in the User Account. + * Gets the user information by passing in the user account. * After a remote user joins the channel, the SDK gets the user ID and account of the remote user, caches them in a mapping table object, and triggers the onUserInfoUpdated callback on the local client. After receiving the callback, you can call this method to get the user account of the remote user from the UserInfo object by passing in the user ID. * * @param userAccount The user account. * * @returns - * A pointer to the UserInfo instance, if the method call succeeds.If the call fails, returns NULL. + * A pointer to the UserInfo instance, if the method call succeeds. + * If the call fails, returns NULL. */ abstract getUserInfoByUserAccount(userAccount: string): UserInfo; @@ -5303,7 +5371,13 @@ export abstract class IRtcEngine { abstract getUserInfoByUid(uid: number): UserInfo; /** - * @ignore + * Starts relaying media streams across channels or updates channels for media relay. + * The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged callback, and this callback returns the state of the media stream relay. Common states are as follows:If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), it means that the SDK starts relaying media streams from the source channel to the destination channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. + * + * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . + * + * @returns + * 0: Success.< 0: Failure.-1: A general error occurs (no specified reason).-2: The parameter is invalid.-7: The method call was rejected. It may be because the SDK has not been initialized successfully, or the user role is not an host.-8: Internal state error. Probably because the user is not an audience member. */ abstract startOrUpdateChannelMediaRelay( configuration: ChannelMediaRelayConfiguration @@ -5311,7 +5385,7 @@ export abstract class IRtcEngine { /** * Starts relaying media streams across channels. This method can be used to implement scenarios such as co-host across channels. - * After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks, and these callbacks return the state and events of the media stream relay.If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), and the onChannelMediaRelayEvent callback returns RelayEventPacketSentToDestChannel (4), it means that the SDK starts relaying media streams between the source channel and the target channel.If the onChannelMediaRelayStateChanged callback returnsRelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.After a successful method call, if you want to call this method again, ensure that you call the stopChannelMediaRelay method to quit the current relay.The relaying media streams across channels function needs to be enabled by contacting .We do not support string user accounts in this API. + * Deprecated:This method is deprecated. Use startOrUpdateChannelMediaRelay instead.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks, and these callbacks return the state and events of the media stream relay.If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), and the onChannelMediaRelayEvent callback returns RelayEventPacketSentToDestChannel (4), it means that the SDK starts relaying media streams between the source channel and the target channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.After a successful method call, if you want to call this method again, ensure that you call the stopChannelMediaRelay method to quit the current relay.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. * * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . * @@ -5324,7 +5398,7 @@ export abstract class IRtcEngine { /** * Updates the channels for media stream relay. - * After the media relay starts, if you want to relay the media stream to more channels, or leave the current relay channel, you can call this method.After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback with the RelayEventPacketUpdateDestChannel (7) state code.Call the method after successfully calling the startChannelMediaRelay method and receiving onChannelMediaRelayStateChanged (RelayStateRunning, RelayOk); otherwise, the method call fails. + * Deprecated:This method is deprecated. Use startOrUpdateChannelMediaRelay instead.After the media relay starts, if you want to relay the media stream to more channels, or leave the current relay channel, you can call this method.After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback with the RelayEventPacketUpdateDestChannel (7) state code.Call the method after successfully calling the startChannelMediaRelay method and receiving onChannelMediaRelayStateChanged (RelayStateRunning, RelayOk); otherwise, the method call fails. * * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . * @@ -5346,7 +5420,7 @@ export abstract class IRtcEngine { /** * Pauses the media stream relay to all target channels. - * After the cross-channel media stream relay starts, you can call this method to pause relaying media streams to all target channels; after the pause, if you want to resume the relay, call resumeAllChannelMediaRelay .After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback to report whether the media stream relay is successfully paused.Call this method after startChannelMediaRelay . + * After the cross-channel media stream relay starts, you can call this method to pause relaying media streams to all target channels; after the pause, if you want to resume the relay, call resumeAllChannelMediaRelay .Call this method after startOrUpdateChannelMediaRelay . * * @returns * 0: Success.< 0: Failure. @@ -5355,7 +5429,7 @@ export abstract class IRtcEngine { /** * Resumes the media stream relay to all target channels. - * After calling the pauseAllChannelMediaRelay method, you can call this method to resume relaying media streams to all destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback to report whether the media stream relay is successfully resumed.Call this method after pauseAllChannelMediaRelay . + * After calling the pauseAllChannelMediaRelay method, you can call this method to resume relaying media streams to all destination channels.Call this method after pauseAllChannelMediaRelay . * * @returns * 0: Success.< 0: Failure. @@ -5375,7 +5449,13 @@ export abstract class IRtcEngine { ): number; /** - * @ignore + * Sets the video profile of the media streams directly pushed to the CDN by the host. + * This method only affects video streams captured by cameras or screens, or from custom video capture sources. That is, when you set publishCameraTrack or publishCustomVideoTrack in DirectCdnStreamingMediaOptions as true to capture videos, you can call this method to set the video profiles.If your local camera does not support the video resolution you set,the SDK automatically adjusts the video resolution to a value that is closest to your settings for capture, encoding or streaming, with the same aspect ratio as the resolution you set. You can get the actual resolution of the video streams through the onDirectCdnStreamingStats callback. + * + * @param config Video profile. See VideoEncoderConfiguration .During CDN live streaming, Agora only supports setting OrientationMode as OrientationFixedLandscape or OrientationFixedPortrait. + * + * @returns + * 0: Success.< 0: Failure. */ abstract setDirectCdnStreamingVideoConfiguration( config: VideoEncoderConfiguration @@ -5383,7 +5463,7 @@ export abstract class IRtcEngine { /** * Starts pushing media streams to the CDN directly. - * Aogra does not support pushing media streams to one URL repeatedly.Media optionsAgora does not support setting the value of publishCameraTrack and publishCustomVideoTrack as true, or the value of publishMicrophoneTrack and publishCustomAudioTrack as true at the same time. When choosing media setting options ( DirectCdnStreamingMediaOptions ), you can refer to the following examples:If you want to push audio and video streams published by the host to the CDN, the media setting options should be set as follows:publishCustomAudioTrack is set as true and call the pushAudioFrame methodpublishCustomVideoTrack is set as true and call the pushVideoFrame methodpublishCameraTrack is set as false (the default value)publishMicrophoneTrack is set as false (the default value) + * Aogra does not support pushing media streams to one URL repeatedly.Media optionsAgora does not support setting the value of publishCameraTrack and publishCustomVideoTrack as true, or the value of publishMicrophoneTrack and publishCustomAudioTrack as true at the same time. When choosing media setting options ( DirectCdnStreamingMediaOptions ), you can refer to the following examples:If you want to push audio and video streams published by the host to the CDN, the media setting options should be set as follows:publishCustomAudioTrack is set as true and call the pushAudioFrame methodpublishCustomVideoTrack is set as true and call the pushVideoFrame methodpublishCameraTrack is set as false (the default value)publishMicrophoneTrack is set as false (the default value)As of v4.2.0, Agora SDK supports audio-only live streaming. You can set publishCustomAudioTrack or publishMicrophoneTrack in DirectCdnStreamingMediaOptions as true and call pushAudioFrame to push audio streams. Agora only supports pushing one audio and video streams or one audio streams to CDN. * * @param eventHandler See onDirectCdnStreamingStateChanged and onDirectCdnStreamingStats . * @param publishUrl The CDN live streaming URL. @@ -5407,12 +5487,10 @@ export abstract class IRtcEngine { abstract stopDirectCdnStreaming(): number; /** - * Sets channel options and leaves the channel. - * If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback. - * If you have called joinChannelEx to join multiple channels, calling this method will leave the channels when calling joinChannel and joinChannelEx at the same time. - * This method will release all resources related to the session, leave the channel, that is, hang up or exit the call. This method can be called whether or not a call is currently in progress.After joining the channel, you must call this method or to end the call, otherwise, the next call cannot be started.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback. + * Sets audio advanced options. + * If you have advanced audio processing requirements, such as capturing and sending stereo audio, you can call this method to set advanced audio options.Call this method after calling joinChannel , enableAudio and enableLocalAudio . * - * @param options The options for leaving the channel. See LeaveChannelOptions . + * @param options The advanced options for audio. See AdvancedAudioOptions . * * @returns * 0: Success.< 0: Failure. @@ -5436,7 +5514,13 @@ export abstract class IRtcEngine { abstract stopRhythmPlayer(): number; /** - * @ignore + * Sets the video encoder configuration. + * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. + * + * @param config Video profile. See VideoEncoderConfiguration . + * + * @returns + * 0: Success.< 0: Failure. */ abstract configRhythmPlayer(config: AgoraRhythmPlayerConfig): number; @@ -5469,9 +5553,9 @@ export abstract class IRtcEngine { /** * Adjusts the volume of the custom external audio source when it is published in the channel. - * Ensure you have called the setExternalAudioSource method to create an external audio track before calling this method.If you want to change the volume of the audio to be published, you need to call this method again. + * Ensure you have called the createCustomAudioTrack method to create an external audio track before calling this method.If you want to change the volume of the audio to be published, you need to call this method again. * - * @param sourceId The ID of external audio source. If you want to publish a custom external audio source, set this parameter to the ID of the corresponding custom audio track you want to publish. + * @param trackId The audio track ID. Set this parameter to the custom audio track ID returned in createCustomAudioTrack. * @param volume The volume of the audio source. The value can range from 0 to 100. 0 means mute; 100 means the original volume. * * @returns @@ -5483,7 +5567,14 @@ export abstract class IRtcEngine { ): number; /** - * @ignore + * Adjusts the volume of the custom external audio source when it is published in the channel. + * Ensure you have called the createCustomAudioTrack method to create an external audio track before calling this method.If you want to change the volume of the audio to be published, you need to call this method again. + * + * @param trackId The audio track ID. Set this parameter to the custom audio track ID returned in createCustomAudioTrack. + * @param volume The volume of the audio source. The value can range from 0 to 100. 0 means mute; 100 means the original volume. + * + * @returns + * 0: Success.< 0: Failure. */ abstract adjustCustomAudioPlayoutVolume( trackId: number, @@ -5541,18 +5632,16 @@ export abstract class IRtcEngine { ): number; /** - * @ignore + * Gets the current Monotonic Time of the SDK. + * Monotonic Time refers to a monotonically increasing time series whose value increases over time. The unit is milliseconds.In custom video capture and custom audio capture scenarios, in order to ensure audio and video synchronization, Agora recommends that you call this method to obtain the current Monotonic Time of the SDK, and then pass this value into the timestamp parameter in the captured video frame ( VideoFrame ) and audio frame ( AudioFrame ). + * + * @returns + * ≥0: The method call is successful, and returns the current Monotonic Time of the SDK (in milliseconds).< 0: Failure. */ abstract getCurrentMonotonicTimeInMs(): number; /** - * Enables/Disables the local video capture. - * This method disables or re-enables the local video capture, and does not affect receiving the remote video stream.After calling enableVideo , the local video capture is enabled by default. You can call enableLocalVideo (false) to disable the local video capture. If you want to re-enable the local video capture, call enableLocalVideo(true).After the local video capturer is successfully disabled or re-enabled, the SDK triggers the onRemoteVideoStateChanged callback on the remote client.You can call this method either before or after joining a channel.This method enables the internal engine and is valid after leaving the channel. - * - * @param enabled Whether to enable the local video capture.true: (Default) Enable the local video capture.false: Disable the local video capture. Once the local video is disabled, the remote users cannot receive the video stream of the local user, while the local user can still receive the video streams of remote users. When set to false, this method does not require a local camera. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract enableWirelessAccelerate(enabled: boolean): number; @@ -5576,17 +5665,29 @@ export abstract class IRtcEngine { abstract setParameters(parameters: string): number; /** - * @ignore + * Enables tracing the video frame rendering process. + * The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the onVideoRenderingTracingResult callback.By default, the SDK starts tracing the video rendering event automatically when the local user successfully joins the channel. You can call this method at an appropriate time according to the actual application scenario to customize the tracing process.After the local user leaves the current channel, the SDK automatically resets the time point to the next time when the user successfully joins the channel. + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. */ abstract startMediaRenderingTracing(): number; /** - * @ignore + * Enables audio and video frame instant rendering. + * After successfully calling this method, the SDK enables the instant frame rendering mode, which can speed up the first frame rendering speed after the user joins the channel.Once the instant rendering function is enabled, it can only be canceled by calling the release method to destroy the IRtcEngine object.In this mode, the SDK uses Agora's custom encryption algorithm to shorten the time required to establish transmission links, and the security is reduced compared to the standard DTLS (Datagram Transport Layer Security). If the application scenario requires higher security standards, Agora recommends that you do not use this method. + * + * @returns + * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. */ abstract enableInstantMediaRendering(): number; /** - * @ignore + * Gets the current NTP (Network Time Protocol) time. + * In the real-time chorus scenario, especially when the downlink connections are inconsistent due to network issues among multiple receiving ends, you can call this method to obtain the current NTP time as the reference time, in order to align the lyrics and music of multiple receiving ends and achieve chorus synchronization. + * + * @returns + * The Unix timestamp (ms) of the current NTP time. */ abstract getNtpWallTimeInMs(): number; @@ -5637,7 +5738,7 @@ export abstract class IRtcEngine { * If the metadata is sent successfully, the SDK triggers the onMetadataReceived callback on the receiver. * * @param metadata Media metadata See Metadata . - * @param sourceType The type of the video frame, see VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * * @returns * 0: Success.< 0: Failure. @@ -5668,7 +5769,7 @@ export abstract class IRtcEngine { /** * Destroys multiple video renderer objects at one time. * - * @param sourceType The type of the video frame, see VideoSourceType . + * @param sourceType The type of the video source. See VideoSourceType . * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters:All lowercase English letters: a to z.All uppercase English letters: A to Z.All numeric characters: 0 to 9.Space"!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," * @param uid The user ID of the remote user. */ @@ -5691,8 +5792,8 @@ export abstract class IRtcEngine { ): number; /** - * Gets the C++ handle of the native SDK. - * This method retrieves the C++ handle of the SDK, for example for registering the audio and video frame observer. + * Gets the C++ handle of the Native SDK. + * This method retrieves the C++ handle of the SDK, which is used for registering the audio and video frame observer. * * @returns * The native handle of the SDK. diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 757f7b915..78498a599 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -58,7 +58,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { * -3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object. * -7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method. * -8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method. - * -17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state. + * -17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recommends that you use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state. * -102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel. * -121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. */ @@ -70,7 +70,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Sets channel options and leaves the channel. - * This method lets the user leave the channel, for example, by hanging up or exiting the call.After calling joinChannelEx to join the channel, this method must be called to end the call before starting the next call.This method can be called whether or not a call is currently in progress. This method releases all resources related to the session.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After you leave the channel, the SDK triggers the onLeaveChannel callback.After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback.If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback.Calling leaveChannel [1/2] will leave the channels when calling joinChannel and joinChannelEx at the same time. + * This method lets the user leave the channel, for example, by hanging up or exiting the call.After calling joinChannelEx to join the channel, this method must be called to end the call before starting the next call.This method can be called whether or not a call is currently in progress. This method releases all resources related to the session.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After you leave the channel, the SDK triggers the onLeaveChannel callback.After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback.If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback.Calling will leave the channels when calling joinChannel and joinChannelEx at the same time. * * @param connection The connection information. See RtcConnection . * @param options The options for leaving the channel. See LeaveChannelOptions .This parameter only supports the stopMicrophoneRecording member in the LeaveChannelOptions settings; setting other members does not take effect. @@ -90,7 +90,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter.-7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method.-8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recomments that you can use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. + * 0: Success. + * < 0: Failure. + * -2: The value of a member in the ChannelMediaOptions structure is invalid. For example, the token or the user ID is invalid. You need to fill in a valid parameter. + * -7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method. + * -8: The internal state of the IRtcEngine object is wrong. The possible reason is that the user is not in the channel. Agora recommends that you use the onConnectionStateChanged callback to determine whether the user exists in the channel. If you receive the ConnectionStateDisconnected (1) or ConnectionStateFailed (5) state, the user is not in the channel. You need to call joinChannel to join a channel before calling this method. */ abstract updateChannelMediaOptionsEx( options: ChannelMediaOptions, @@ -114,7 +118,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Initializes the video view of a remote user. - * This method initializes the video view of a remote stream on the local device. It affects only the video view that the local user sees. Call this method to bind the remote video stream to a video view and to set the rendering and mirror modes of the video view.The application specifies the uid of the remote video in the VideoCanvas method before the remote user joins the channel.If the remote uid is unknown to the application, set it after the application receives the onUserJoined callback. If the Video Recording function is enabled, the Video Recording Service joins the channel as a dummy client, causing other clients to also receive the onUserJoined callback. Do not bind the dummy client to the application view because the dummy client does not send any video streams.To unbind the remote user from the view, set the view parameter to NULL.Once the remote user leaves the channel, the SDK unbinds the remote user. + * This method initializes the video view of a remote stream on the local device. It affects only the video view that the local user sees. Call this method to bind the remote video stream to a video view and to set the rendering and mirror modes of the video view.The application specifies the uid of the remote video in the VideoCanvas method before the remote user joins the channel.If the remote uid is unknown to the application, set it after the application receives the onUserJoined callback. If the Video Recording function is enabled, the Video Recording Service joins the channel as a dummy client, causing other clients to also receive the onUserJoined callback. Do not bind the dummy client to the application view because the dummy client does not send any video streams.To unbind the remote user from the view, set the view parameter to NULL.Once the remote user leaves the channel, the SDK unbinds the remote user.To update the rendering or mirror mode of the remote video view during a call, use the setRemoteRenderModeEx method. * * @param canvas The remote video view settings. See VideoCanvas . * @param connection The connection information. See RtcConnection . @@ -128,14 +132,15 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes receiving the audio stream of a specified user. + * Stops or resumes receiving the video stream of a specified user. + * This method is used to stop or resume receiving the video stream of a specified user. You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid. * - * @param uid The ID of the specified user. - * @param mute Whether to stop receiving the audio stream of the specified user:true: Stop receiving the audio stream of the specified user.false: (Default) Resume receiving the audio stream of the specified user. + * @param uid The user ID of the remote user. + * @param mute Whether to stop receiving the video stream of the specified user:true: Stop receiving the video stream of the specified user.false: (Default) Resume receiving the video stream of the specified user. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteRemoteAudioStreamEx( uid: number, @@ -144,14 +149,15 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes receiving the audio stream of a specified user. + * Stops or resumes receiving the video stream of a specified user. + * This method is used to stop or resume receiving the video stream of a specified user. You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid. * - * @param uid The ID of the specified user. - * @param mute Whether to stop receiving the audio stream of the specified user:true: Stop receiving the audio stream of the specified user.false: (Default) Resume receiving the audio stream of the specified user. + * @param uid The user ID of the remote user. + * @param mute Whether to stop receiving the video stream of the specified user:true: Stop receiving the video stream of the specified user.false: (Default) Resume receiving the video stream of the specified user. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteRemoteVideoStreamEx( uid: number, @@ -161,7 +167,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Sets the stream type of the remote video. - * Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamModeEx (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request.The result of this method returns in the onApiCallExecuted callback. + * Under limited network conditions, if the publisher has not disabled the dual-stream mode using enableDualStreamModeEx (false), the receiver can choose to receive either the high-quality video stream or the low-quality video stream. The high-quality video stream has a higher resolution and bitrate, and the low-quality video stream has a lower resolution and bitrate.By default, users receive the high-quality video stream. Call this method if you want to switch to the low-quality video stream. This method allows the app to adjust the corresponding video stream type based on the size of the video window to reduce the bandwidth and resources. The aspect ratio of the low-quality video stream is the same as the high-quality video stream. Once the resolution of the high-quality video stream is set, the system automatically sets the resolution, frame rate, and bitrate of the low-quality video stream.The SDK enables the low-quality video stream auto mode on the sender by default (not actively sending low-quality video streams). The host at the receiving end can call this method to initiate a low-quality video stream stream request on the receiving end, and the sender automatically switches to the low-quality video stream mode after receiving the request. * * @param uid The user ID. * @param streamType The video stream type: VideoStreamType . @@ -177,14 +183,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract muteLocalAudioStreamEx( mute: boolean, @@ -192,14 +198,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract muteLocalVideoStreamEx( mute: boolean, @@ -207,14 +213,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract muteAllRemoteAudioStreamsEx( mute: boolean, @@ -222,14 +228,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract muteAllRemoteVideoStreamsEx( mute: boolean, @@ -237,11 +243,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the allowlist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . + * Sets the allowlist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -255,11 +260,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the allowlist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . + * Sets the allowlist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -273,11 +277,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the allowlist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . + * Sets the allowlist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -291,11 +294,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Set the allowlist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . + * Sets the allowlist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -317,7 +319,8 @@ export abstract class IRtcEngineEx extends IRtcEngine { * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. + * < 0: Failure. */ abstract setRemoteVideoSubscriptionOptionsEx( uid: number, @@ -354,7 +357,16 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * @ignore + * Sets the video display mode of a specified remote user. + * After initializing the video view of a remote user, you can call this method to update its rendering and mirror modes. This method affects only the video view that the local user sees.Call this method after initializing the remote view by calling the setupRemoteVideo method.During a call, you can call this method as many times as necessary to update the display mode of the video view of a remote user. + * + * @param uid The user ID of the remote user. + * @param renderMode The video display mode of the remote user. See RenderModeType . + * @param mirrorMode The mirror mode of the remote user view. See VideoMirrorModeType . + * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success.< 0: Failure. */ abstract setRemoteRenderModeEx( uid: number, @@ -365,11 +377,12 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Enables loopback audio capturing. - * If you enable loopback audio capturing, the output of the sound card is mixed into the audio stream sent to the other end.This method applies to the macOS and Windows platforms only.macOS does not support loopback audio capture of the default sound card. If you need to use this function, use a virtual sound card and pass its name to the deviceName parameter. Agora recommends using AgoraALD as the virtual sound card for audio capturing.This method only supports using one sound card for audio capturing. + * If you enable loopback audio capturing, the output of the sound card is mixed into the audio stream sent to the other end.macOS does not support loopback audio capture of the default sound card. If you need to use this function, use a virtual sound card and pass its name to the deviceName parameter. Agora recommends using AgoraALD as the virtual sound card for audio capturing.This method only supports using one sound card for audio capturing. * * @param connection The connection information. See RtcConnection . * @param enabled Sets whether to enable loopback audio capture:true: Enable loopback audio capturing.false: (Default) Disable loopback audio capturing. - * @param deviceName macOS: The device name of the virtual sound card. The default value is set to NULL, which means using AgoraALD for loopback audio capturing.Windows: The device name of the sound card. The default is set to NULL, which means the SDK uses the sound card of your device for loopback audio capturing. + * @param deviceName macOS: The device name of the virtual sound card. The default value is set to NULL, which means using AgoraALD for loopback audio capturing. + * Windows: The device name of the sound card. The default is set to NULL, which means the SDK uses the sound card of your device for loopback audio capturing. * * @returns * 0: Success.< 0: Failure. @@ -389,14 +402,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the video streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. + * Stops or resumes subscribing to the audio streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . * - * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract muteRecordingSignalEx( mute: boolean, @@ -427,7 +440,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { * @param connection The connection information. See RtcConnection . * * @returns - * The current connection state. + * The current connection state. See ConnectionStateType . */ abstract getConnectionStateEx(connection: RtcConnection): ConnectionStateType; @@ -477,7 +490,8 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Adds a watermark image to the local video. - * This method adds a PNG watermark image to the local video in the live streaming. Once the watermark image is added, all the audience in the channel (CDN audience included), and the capturing device can see and capture it. The Agora SDK supports adding only one watermark image onto a local video or CDN live stream. The newly added watermark image replaces the previous one.The watermark coordinates are dependent on the settings in the setVideoEncoderConfigurationEx method:If the orientation mode of the encoding video ( OrientationMode ) is fixed landscape mode or the adaptive landscape mode, the watermark uses the landscape orientation.If the orientation mode of the encoding video (OrientationMode) is fixed portrait mode or the adaptive portrait mode, the watermark uses the portrait orientation.When setting the watermark position, the region must be less than the dimensions set in the setVideoEncoderConfigurationEx method; otherwise, the watermark image will be cropped.Ensure that you have called enableVideo before calling this method.This method supports adding a watermark image in the PNG file format only. Supported pixel formats of the PNG image are RGBA, RGB, Palette, Gray, and Alpha_gray.If the dimensions of the PNG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.If you have enabled the local video preview by calling the startPreview method, you can use the visibleInPreview member to set whether or not the watermark is visible in the preview.If you have enabled the mirror mode for the local video, the watermark on the local video is also mirrored. To avoid mirroring the watermark, Agora recommends that you do not use the mirror and watermark functions for the local video at the same time. You can implement the watermark function in your application layer. + * This method adds a PNG watermark image to the local video in the live streaming. Once the watermark image is added, all the audience in the channel (CDN audience included), and the capturing device can see and capture it. The Agora SDK supports adding only one watermark image onto a local video or CDN live stream. The newly added watermark image replaces the previous one. + * The watermark coordinates are dependent on the settings in the setVideoEncoderConfigurationEx method:If the orientation mode of the encoding video ( OrientationMode ) is fixed landscape mode or the adaptive landscape mode, the watermark uses the landscape orientation.If the orientation mode of the encoding video (OrientationMode) is fixed portrait mode or the adaptive portrait mode, the watermark uses the portrait orientation.When setting the watermark position, the region must be less than the dimensions set in the setVideoEncoderConfigurationEx method; otherwise, the watermark image will be cropped.Ensure that you have called enableVideo before calling this method.This method supports adding a watermark image in the PNG file format only. Supported pixel formats of the PNG image are RGBA, RGB, Palette, Gray, and Alpha_gray.If the dimensions of the PNG image differ from your settings in this method, the image will be cropped or zoomed to conform to your settings.If you have enabled the local video preview by calling the startPreview method, you can use the visibleInPreview member to set whether or not the watermark is visible in the preview.If you have enabled the mirror mode for the local video, the watermark on the local video is also mirrored. To avoid mirroring the watermark, Agora recommends that you do not use the mirror and watermark functions for the local video at the same time. You can implement the watermark function in your application layer. * * @param watermarkUrl The local file path of the watermark image to be added. This method supports adding a watermark image from the local absolute or relative file path. * @param options The options of the watermark image to be added. See WatermarkOptions . @@ -519,14 +533,9 @@ export abstract class IRtcEngineEx extends IRtcEngine { * Enables the reporting of users' volume indication. * This method enables the SDK to regularly report the volume information to the app of the local user who sends a stream and remote users (three users at most) whose instantaneous volumes are the highest. Once you call this method and users send streams in the channel, the SDK triggers the onAudioVolumeIndication callback at the time interval set in this method. * - * @param interval Sets the time interval between two consecutive volume indications: - * ≤ 0: Disables the volume indication. - * > 0: Time interval (ms) between two consecutive volume indications. The lowest value is 50. - * + * @param interval Sets the time interval between two consecutive volume indications:≤ 0: Disables the volume indication.> 0: Time interval (ms) between two consecutive volume indications. The lowest value is 50. * @param smooth The smoothing factor that sets the sensitivity of the audio volume indicator. The value ranges between 0 and 10. The recommended value is 3. The greater the value, the more sensitive the indicator. - * @param reportVad true: Enables the voice activity detection of the local user. Once it is enabled, the vad parameter of the onAudioVolumeIndication callback reports the voice activity status of the local user. - * false: (Default) Disables the voice activity detection of the local user. Once it is disabled, the vad parameter of the onAudioVolumeIndication callback does not report the voice activity status of the local user, except for the scenario where the engine automatically detects the voice activity of the local user. - * + * @param reportVad true: Enables the voice activity detection of the local user. Once it is enabled, the vad parameter of the onAudioVolumeIndication callback reports the voice activity status of the local user.false: (Default) Disables the voice activity detection of the local user. Once it is disabled, the vad parameter of the onAudioVolumeIndication callback does not report the voice activity status of the local user, except for the scenario where the engine automatically detects the voice activity of the local user. * @param connection The connection information. See RtcConnection . * * @returns @@ -568,7 +577,6 @@ export abstract class IRtcEngineEx extends IRtcEngine { * * @param url The address of Media Push. The format is RTMP or RTMPS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported. * @param transcoding The transcoding configuration for Media Push. See LiveTranscoding . - * * @param connection The connection information. See RtcConnection . * * @returns @@ -585,7 +593,6 @@ export abstract class IRtcEngineEx extends IRtcEngine { * Agora recommends that you use the server-side Media Push function. After you start pushing media streams to CDN with transcoding, you can dynamically update the transcoding configuration according to the scenario. The SDK triggers the onTranscodingUpdated callback after the transcoding configuration is updated. * * @param transcoding The transcoding configuration for Media Push. See LiveTranscoding . - * * @param connection The connection information. See RtcConnection . * * @returns @@ -617,7 +624,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { abstract stopRtmpStreamEx(url: string, connection: RtcConnection): number; /** - * @ignore + * Starts relaying media streams across channels or updates channels for media relay. + * The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged callback, and this callback returns the state of the media stream relay. Common states are as follows:If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), it means that the SDK starts relaying media streams from the source channel to the destination channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. + * + * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . + * @param connection The connection information. See RtcConnection . + * + * @returns + * 0: Success.< 0: Failure.-1: A general error occurs (no specified reason).-2: The parameter is invalid.-7: The method call was rejected. It may be because the SDK has not been initialized successfully, or the user role is not an host.-8: Internal state error. Probably because the user is not an audience member. */ abstract startOrUpdateChannelMediaRelayEx( configuration: ChannelMediaRelayConfiguration, @@ -625,8 +639,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Starts relaying media streams across channels. This method can be used to implement scenarios such as co-host across channels. - * After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks, and these callbacks return the state and events of the media stream relay.If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), and the onChannelMediaRelayEvent callback returns RelayEventPacketSentToDestChannel (4), it means that the SDK starts relaying media streams between the source channel and the target channel.If the onChannelMediaRelayStateChanged callback returnsRelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.After a successful method call, if you want to call this method again, ensure that you call the stopChannelMediaRelayEx method to quit the current relay.The relaying media streams across channels function needs to be enabled by contacting .We do not support string user accounts in this API. + * Starts relaying media streams across channels or updates channels for media relay. + * The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged callback, and this callback returns the state of the media stream relay. Common states are as follows:If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), it means that the SDK starts relaying media streams from the source channel to the destination channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. + * + * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . + * @param connection The connection information. See RtcConnection . * * @returns * 0: Success.< 0: Failure.-1: A general error occurs (no specified reason).-2: The parameter is invalid.-7: The method call was rejected. It may be because the SDK has not been initialized successfully, or the user role is not an host.-8: Internal state error. Probably because the user is not an audience member. @@ -637,11 +654,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Updates the channels for media stream relay. - * After the media relay starts, if you want to relay the media stream to more channels, or leave the current relay channel, you can call this method.After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback with the RelayEventPacketUpdateDestChannel (7) state code.Call the method after successfully calling the startChannelMediaRelayEx method and receiving onChannelMediaRelayStateChanged (RelayStateRunning, RelayOk); otherwise, the method call fails. + * Starts relaying media streams across channels or updates channels for media relay. + * The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged callback, and this callback returns the state of the media stream relay. Common states are as follows:If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), it means that the SDK starts relaying media streams from the source channel to the destination channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. + * + * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . + * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success.< 0: Failure.-1: A general error occurs (no specified reason).-2: The parameter is invalid.-7: The method call was rejected. It may be because the SDK has not been initialized successfully, or the user role is not an host.-8: Internal state error. Probably because the user is not an audience member. */ abstract updateChannelMediaRelayEx( configuration: ChannelMediaRelayConfiguration, @@ -661,7 +681,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Pauses the media stream relay to all target channels. - * After the cross-channel media stream relay starts, you can call this method to pause relaying media streams to all target channels; after the pause, if you want to resume the relay, call resumeAllChannelMediaRelay .After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback to report whether the media stream relay is successfully paused.Call this method after startChannelMediaRelayEx . + * After the cross-channel media stream relay starts, you can call this method to pause relaying media streams to all target channels; after the pause, if you want to resume the relay, call resumeAllChannelMediaRelay .Call this method after startOrUpdateChannelMediaRelayEx . * * @param connection The connection information. See RtcConnection . * @@ -672,7 +692,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Resumes the media stream relay to all target channels. - * After calling the pauseAllChannelMediaRelayEx method, you can call this method to resume relaying media streams to all destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback to report whether the media stream relay is successfully resumed.Call this method after pauseAllChannelMediaRelayEx . + * After calling the pauseAllChannelMediaRelayEx method, you can call this method to resume relaying media streams to all destination channels.Call this method after pauseAllChannelMediaRelayEx . * * @param connection The connection information. See RtcConnection . * @@ -691,9 +711,9 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Occurs when the most active remote speaker is detected. - * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user, who is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. + * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user whose volume is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. * - * @param uid The user ID of the most active remote speaker. + * @param uid The user ID of the most active speaker. * @param connection The connection information. See RtcConnection . */ abstract getUserInfoByUidEx(uid: number, connection: RtcConnection): UserInfo; @@ -702,7 +722,9 @@ export abstract class IRtcEngineEx extends IRtcEngine { * Enables or disables dual-stream mode on the sender side. * After you enable dual-stream mode, you can call setRemoteVideoStreamType to choose to receive either the high-quality video stream or the low-quality video stream on the subscriber side.You can call this method to enable or disable the dual-stream mode on the publisher side. Dual streams are a pairing of a high-quality video stream and a low-quality video stream:High-quality video stream: High bitrate, high resolution.Low-quality video stream: Low bitrate, low resolution.This method is applicable to all types of streams from the sender, including but not limited to video streams collected from cameras, screen sharing streams, and custom-collected video streams. * - * @param enabled Whether to enable dual-stream mode:true: Enable dual-stream mode.false: (Default) Disable dual-stream mode. + * @param enabled Whether to enable dual-stream mode: + * true: Enable dual-stream mode. + * false: (Default) Disable dual-stream mode. * @param streamConfig The configuration of the low-quality video stream. See SimulcastStreamConfig . * @param connection The connection information. See RtcConnection . * @@ -716,12 +738,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Sets dual-stream mode on the sender side. - * The SDK enables the low-quality video stream auto mode on the sender by default, which is equivalent to calling this method and setting the mode to AutoSimulcastStream. If you want to modify this behavior, you can call this method and modify the mode to DisableSimulcastStream(never send low-quality video streams) or EnableSimulcastStream (always send low-quality video streams).The difference and connection between this method and enableDualStreamModeEx is as follows:When calling this method and setting mode to DisableSimulcastStream, it has the same effect as enableDualStreamModeEx(false).When calling this method and setting mode to EnableSimulcastStream, it has the same effect as enableDualStreamModeEx(true).Both methods can be called before and after joining a channel. If they are used at the same time, the settings in the method called later shall prevail. + * Sets the dual-stream mode on the sender side. + * The SDK enables the low-quality video stream auto mode on the sender by default, which is equivalent to calling this method and setting the mode to AutoSimulcastStream. If you want to modify this behavior, you can call this method and modify the mode to DisableSimulcastStream (never send low-quality video streams) or EnableSimulcastStream (always send low-quality video streams).The difference and connection between this method and enableDualStreamModeEx is as follows:When calling this method and setting mode to DisableSimulcastStream, it has the same effect as enableDualStreamModeEx(false).When calling this method and setting mode to EnableSimulcastStream, it has the same effect as enableDualStreamModeEx(true).Both methods can be called before and after joining a channel. If both methods are used, the settings in the method called later takes precedence. * * @param mode The mode in which the video stream is sent. See SimulcastStreamMode . * @param streamConfig The configuration of the low-quality video stream. See SimulcastStreamConfig . - * * @param connection The connection information. See RtcConnection . * * @returns @@ -745,17 +766,11 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Takes a snapshot of a video stream. - * The method is asynchronous, and the SDK has not taken the snapshot when the method call returns. After a successful method call, the SDK triggers the onSnapshotTaken callback to report whether the snapshot is successfully taken, as well as the details for that snapshot. - * This method takes a snapshot of a video stream from the specified user, generates a JPG image, and saves it to the specified path. - * Call this method after the joinChannelEx method.This method takes a snapshot of the published video stream specified in ChannelMediaOptions .If the user's video has been preprocessed, for example, watermarked or beautified, the resulting snapshot includes the pre-processing effect. + * The method is asynchronous, and the SDK has not taken the snapshot when the method call returns. After a successful method call, the SDK triggers the onSnapshotTaken callback to report whether the snapshot is successfully taken, as well as the details for that snapshot.This method takes a snapshot of a video stream from the specified user, generates a JPG image, and saves it to the specified path.Call this method after the joinChannelEx method.This method takes a snapshot of the published video stream specified in ChannelMediaOptions .If the user's video has been preprocessed, for example, watermarked or beautified, the resulting snapshot includes the pre-processing effect. * * @param connection The connection information. See RtcConnection . * @param uid The user ID. Set uid as 0 if you want to take a snapshot of the local user's video. - * @param filePath The local path (including filename extensions) of the snapshot. For example: - * Windows: C:\Users\\AppData\Local\Agora\\example.jpg - * macOS: ~/Library/Logs/example.jpg - * Ensure that the path you specify exists and is writable. - * + * @param filePath The local path (including filename extensions) of the snapshot. For example:Windows: C:\Users\\AppData\Local\Agora\\example.jpgmacOS: ~/Library/Logs/example.jpgEnsure that the path you specify exists and is writable. * * @returns * 0: Success.< 0: Failure. @@ -767,13 +782,15 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops recording the local audio and video. - * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. + * Enables tracing the video frame rendering process. + * By default, the SDK starts tracing the video rendering event automatically when the local user successfully joins the channel. You can call this method at an appropriate time according to the actual application scenario to customize the tracing process. + * After the local user leaves the current channel, the SDK automatically resets the time point to the next time when the user successfully joins the channel. + * The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the onVideoRenderingTracingResult callback. * * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. + * 0: Success.< 0: Failure. */ abstract startMediaRenderingTracingEx(connection: RtcConnection): number; } diff --git a/ts/Private/IAgoraSpatialAudio.ts b/ts/Private/IAgoraSpatialAudio.ts index 85264c349..864460008 100644 --- a/ts/Private/IAgoraSpatialAudio.ts +++ b/ts/Private/IAgoraSpatialAudio.ts @@ -155,7 +155,7 @@ export abstract class IBaseSpatialAudioEngine { * Stops or resumes publishing the local audio stream. * This method does not affect any ongoing audio recording, because it does not disable the audio capture device.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio stream of a specified user, Agora recommends calling this method instead of the muteLocalAudioStream method in IRtcEngine . * - * @param mute Whether to stop publishing the local audio stream:: Stop publishing the local audio stream.true: Publish the local audio stream.false + * @param mute Whether to stop publishing the local audio stream:true: Stop publishing the local audio stream.false: Publish the local audio stream. * * @returns * 0: Success.< 0: Failure. @@ -178,6 +178,7 @@ export abstract class IBaseSpatialAudioEngine { * In virtual interactive scenarios, you can use this method to set the sound insulation area and sound attenuation coefficient. When the sound source (which can be the user or the media player) and the listener belong to the inside and outside of the sound insulation area, they can experience the attenuation effect of sound similar to the real environment when it encounters a building partition.When the sound source and the listener belong to the inside and outside of the sound insulation area, the sound attenuation effect is determined by the sound attenuation coefficient in SpatialAudioZone .If the user or media player is in the same sound insulation area, it is not affected by SpatialAudioZone, and the sound attenuation effect is determined by the attenuation parameter in setPlayerAttenuation or setRemoteAudioAttenuation. If you do not call setPlayerAttenuation or setRemoteAudioAttenuation, the default sound attenuation coefficient of the SDK is 0.5, which simulates the attenuation of the sound in the real environment.If the sound source and the receiver belong to two sound insulation areas, the receiver cannot hear the sound source.If this method is called multiple times, the last sound insulation area set takes effect. * * @param zones Sound insulation area settings. See SpatialAudioZone. + * @param zoneCount The number of sound insulation areas. * * @returns * 0: Success.< 0: Failure. @@ -264,9 +265,9 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { /** * Occurs when the most active remote speaker is detected. - * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user, who is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. + * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user whose volume is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. * - * @param uid The user ID of the most active remote speaker. + * @param uid The user ID of the most active speaker. * @param connection The connection information. See RtcConnection . */ abstract removeRemotePositionEx( @@ -284,13 +285,15 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { abstract clearRemotePositions(): number; /** - * Stops recording the local audio and video. - * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. + * Enables tracing the video frame rendering process. + * By default, the SDK starts tracing the video rendering event automatically when the local user successfully joins the channel. You can call this method at an appropriate time according to the actual application scenario to customize the tracing process. + * After the local user leaves the current channel, the SDK automatically resets the time point to the next time when the user successfully joins the channel. + * The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the onVideoRenderingTracingResult callback. * * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. + * 0: Success.< 0: Failure. */ abstract clearRemotePositionsEx(connection: RtcConnection): number; @@ -298,16 +301,8 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { * Sets the sound attenuation effect for the specified user. * * @param uid The user ID. This parameter must be the same as the user ID passed in when the user joined the channel. - * @param attenuation For the user's sound attenuation coefficient, the value range is [0,1]. The values are as follows: - * 0: Broadcast mode, where the volume and timbre are not attenuated with distance, and the volume and timbre heard by local users do not change regardless of distance. - * (0,0.5): Weak attenuation mode, that is, the volume and timbre are only weakly attenuated during the propagation process, and the sound can travel farther than the real environment. - * 0.5: (Default) simulates the attenuation of the volume in the real environment; the effect is equivalent to not setting the speaker_attenuation parameter. - * (0.5,1]: Strong attenuation mode, that is, the volume and timbre attenuate rapidly during the propagation process. - * - * @param forceSet Whether to force the user's sound attenuation effect:true: Force attenuation to set the sound attenuation of the user. At this time, the attenuation coefficient of the sound insulation area set in the audioAttenuation of the SpatialAudioZone does not take effect for the user. - * If the sound source and listener are inside and outside the sound isolation area, the sound attenuation effect is determined by the audioAttenuation in SpatialAudioZone. - * If the sound source and the listener are in the same sound insulation area or outside the same sound insulation area, the sound attenuation effect is determined by attenuation in this method. - * false: Do not force attenuation to set the user's sound attenuation effect, as shown in the following two cases. + * @param attenuation For the user's sound attenuation coefficient, the value range is [0,1]. The values are as follows:0: Broadcast mode, where the volume and timbre are not attenuated with distance, and the volume and timbre heard by local users do not change regardless of distance.(0,0.5): Weak attenuation mode, that is, the volume and timbre are only weakly attenuated during the propagation process, and the sound can travel farther than the real environment.0.5: (Default) simulates the attenuation of the volume in the real environment; the effect is equivalent to not setting the speaker_attenuation parameter.(0.5,1]: Strong attenuation mode, that is, the volume and timbre attenuate rapidly during the propagation process. + * @param forceSet Whether to force the user's sound attenuation effect:true: Force attenuation to set the sound attenuation of the user. At this time, the attenuation coefficient of the sound insulation area set in the audioAttenuation of the SpatialAudioZone does not take effect for the user.If the sound source and listener are inside and outside the sound isolation area, the sound attenuation effect is determined by the audioAttenuation in SpatialAudioZone.If the sound source and the listener are in the same sound insulation area or outside the same sound insulation area, the sound attenuation effect is determined by attenuation in this method.false: Do not force attenuation to set the user's sound attenuation effect, as shown in the following two cases. * * @returns * 0: Success.< 0: Failure. diff --git a/ts/Private/IAudioDeviceManager.ts b/ts/Private/IAudioDeviceManager.ts index 6966c14a3..0aef341d0 100644 --- a/ts/Private/IAudioDeviceManager.ts +++ b/ts/Private/IAudioDeviceManager.ts @@ -59,13 +59,13 @@ export abstract class IAudioDeviceManager { abstract getPlaybackDeviceInfo(): AudioDeviceInfo; /** - * Sets the volume of the in-ear monitor. - * Users must use wired earphones to hear their own voices.You can call this method either before or after joining a channel. + * Adjusts the volume of audio mixing for publishing. + * This method adjusts the volume of audio mixing for publishing (sending to other users).Call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged(AudioMixingStatePlaying) callback. * - * @param volume The volume of the in-ear monitor. The value ranges between 0 and 100. The default value is 100. + * @param volume The volume of audio mixing for local playback. The value ranges between 0 and 100 (default). 100 represents the original volume. * * @returns - * < 0: Failure. + * 0: Success.< 0: Failure. */ abstract setPlaybackDeviceVolume(volume: number): number; @@ -103,9 +103,9 @@ export abstract class IAudioDeviceManager { /** * Sets the volume of the audio capture device. - * This method applies to Windows only. + * This method is for Windows and macOS only. * - * @param volume The volume of the audio recording device. The value ranges between 0 (lowest volume) and 255 (highest volume). 0 means no sound, 255 means maximum volume. + * @param volume The volume of the audio recording device. The value range is [0,255]. 0 means no sound, 255 means maximum volume. * * @returns * 0: Success.< 0: Failure. @@ -119,7 +119,7 @@ export abstract class IAudioDeviceManager { /** * Sets the loopback device. - * The SDK uses the current playback device as the loopback device by default. If you want to specify another audio device as the loopback device, call this method, and set deviceId to the loopback device you want to specify.You can call this method to change the audio route currently being used, but this does not change the default audio route. For example, if the default audio route is microphone, you call this method to set the audio route as a sound card before joinging a channel and then start a device test, the SDK conducts device test on the sound card. After the device test is completed and you join a channel, the SDK still uses the microphone for audio capturing.This method applies to Windows only.The scenarios where this method is applicable are as follows:Use app A to play music through a Bluetooth headset; when using app B for a video conference, play through the speakers.If the loopback device is set as the Bluetooth headset, the SDK publishes the music in app A to the remote end.If the loopback device is set as the speaker, the SDK does not publish the music in app A to the remote end.If you set the loopback device as the Bluetooth headset, and then use a wired headset to play the music in app A, you need to call this method again, set the loopback device as the wired headset, and the SDK continues to publish the music in app A to remote end. + * The SDK uses the current playback device as the loopback device by default. If you want to specify another audio device as the loopback device, call this method, and set deviceId to the loopback device you want to specify.You can call this method to change the audio route currently being used, but this does not change the default audio route. For example, if the default audio route is microphone, you call this method to set the audio route as a sound card before joinging a channel and then start a device test, the SDK conducts device test on the sound card. After the device test is completed and you join a channel, the SDK still uses the microphone for audio capturing.This method is for Windows and macOS only.The scenarios where this method is applicable are as follows:Use app A to play music through a Bluetooth headset; when using app B for a video conference, play through the speakers.If the loopback device is set as the Bluetooth headset, the SDK publishes the music in app A to the remote end.If the loopback device is set as the speaker, the SDK does not publish the music in app A to the remote end.If you set the loopback device as the Bluetooth headset, and then use a wired headset to play the music in app A, you need to call this method again, set the loopback device as the wired headset, and the SDK continues to publish the music in app A to remote end. * * @param deviceId Specifies the loopback device of the SDK. You can get the device ID by calling enumeratePlaybackDevices . Connecting or disconnecting the audio device does not change the value of deviceId.The maximum length is MaxDeviceIdLengthType . * @@ -130,7 +130,7 @@ export abstract class IAudioDeviceManager { /** * Gets the current loopback device. - * This method applies to Windows only. + * This method is for Windows and macOS only. * * @returns * The ID of the current loopback device. @@ -138,13 +138,13 @@ export abstract class IAudioDeviceManager { abstract getLoopbackDevice(): string; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. + * Stops or resumes publishing the local audio stream. + * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. + * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract setPlaybackDeviceMute(mute: boolean): number; @@ -154,13 +154,13 @@ export abstract class IAudioDeviceManager { abstract getPlaybackDeviceMute(): boolean; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users.Call this method after joinChannel .When using the spatial audio effect, if you need to set whether to stop subscribing to the audio streams of all remote users, Agora recommends calling this method instead of the muteAllRemoteAudioStreams method in IRtcEngine .After calling this method, you need to call updateSelfPosition and updateRemotePosition to update the spatial location of the local user and the remote user; otherwise, the settings in this method do not take effect. + * Stops or resumes publishing the local audio stream. + * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stop subscribing to the audio streams of all remote users.false: Subscribe to the audio streams of all remote users. + * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract setRecordingDeviceMute(mute: boolean): number; @@ -251,7 +251,7 @@ export abstract class IAudioDeviceManager { /** * Sets whether the loopback device follows the system default playback device. - * This method applies to Windows only. + * This method is for Windows and macOS only. * * @param enable Whether to follow the system default audio playback device:true: Follow the system default audio playback device. When the default playback device of the system is changed, the SDK immediately switches to the loopback device.false: Do not follow the system default audio playback device. The SDK switches the audio loopback device to the system default audio playback device only when the current audio playback device is disconnected. * diff --git a/ts/Types.ts b/ts/Types.ts index b11883f4a..5d018ca60 100644 --- a/ts/Types.ts +++ b/ts/Types.ts @@ -233,6 +233,9 @@ export interface Result { * @ignore */ export interface AgoraElectronBridge { + /** + * @ignore + */ OnEvent( callbackName: string, callback: ( @@ -263,34 +266,13 @@ export interface AgoraElectronBridge { GetBuffer(ptr: number, length: number): Buffer; - /** - * @ignore - */ GetVideoFrame(streamInfo: ShareVideoFrame): { ret: number; - /** - * @ignore - */ isNewFrame: boolean; - /** - * @ignore - */ yStride: number; - /** - * @ignore - */ width: number; - /** - * @ignore - */ height: number; - /** - * @ignore - */ rotation: number; - /** - * @ignore - */ timestamp: number; }; From 25a10ef27fa7a69cd79f5b0766b6fe771d4200d8 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 18 May 2023 11:09:50 +0800 Subject: [PATCH 43/74] chore: optimize --- ci/build/build_mac.sh | 2 +- ci/build/build_windows.bat | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/build/build_mac.sh b/ci/build/build_mac.sh index 9b3bc87d8..150e5e508 100644 --- a/ci/build/build_mac.sh +++ b/ci/build/build_mac.sh @@ -117,7 +117,7 @@ fi if [ "$isBuildDemo" = true ] then - https_proxy=http://10.80.1.174:1080 sh /tmp/jenkins/Electron-SDK/ci/packager-mac.sh $example_sdk_mode $example_electron_version + sh /tmp/jenkins/Electron-SDK/ci/packager-mac.sh $example_sdk_mode $example_electron_version # electronDemo.zip # 执行上传到artifactory echo 执行上传electronDemo.zip到artifactory diff --git a/ci/build/build_windows.bat b/ci/build/build_windows.bat index 6f90dbb68..5e7fadf59 100644 --- a/ci/build/build_windows.bat +++ b/ci/build/build_windows.bat @@ -122,7 +122,6 @@ if %example_sdk_mode% == 1 ( if %isBuildDemo% == true ( echo isBuildDemo: %isBuildDemo% - set https_proxy=http://10.80.1.174:1080 call powershell.exe -executionpolicy remotesigned -File ci\packager-win.ps1 %arch% %example_sdk_mode% %example_electron_version% @REM electronDemo.zip @REM 执行上传到artifactory From f9a3a1a633eb758ea55bb4733738db0ce9a1074f Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 19 May 2023 16:38:03 +0800 Subject: [PATCH 44/74] build: add jest --- .eslintrc | 70 +- package.json | 9 +- ts/__tests__/index.test.tsx | 1 + yarn.lock | 1559 ++++++++++++++++++++++++++++++++++- 4 files changed, 1618 insertions(+), 21 deletions(-) create mode 100644 ts/__tests__/index.test.tsx diff --git a/.eslintrc b/.eslintrc index 3266c7e45..1863c66ad 100644 --- a/.eslintrc +++ b/.eslintrc @@ -18,13 +18,75 @@ "import", "auto-import", "react", - "react-hooks" + "react-hooks", + "jest" ], "settings": { "react": { "version": "detect" } }, + "overrides": [ + { + "files": [ + "*.js" + ], + "parser": "@babel/eslint-parser", + "plugins": [ + "ft-flow" + ], + "rules": { + "ft-flow/define-flow-type": 1, + "ft-flow/use-flow-type": 1 + } + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint/eslint-plugin" + ], + "rules": { + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_" + } + ], + "no-unused-vars": "off", + "no-shadow": "off", + "@typescript-eslint/no-shadow": 1, + "no-undef": "off", + "func-call-spacing": "off", + "@typescript-eslint/func-call-spacing": 1 + } + }, + { + "files": [ + "*.{spec,test}.{js,ts,tsx}", + "**/__{mocks,tests}__/**/*.{js,ts,tsx}" + ], + "env": { + "jest": true, + "jest/globals": true + }, + "rules": { + "react-native/no-inline-styles": 0, + "quotes": [ + 1, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } + } + ], "globals": { "define": false, "obj_attrib": false, @@ -85,6 +147,10 @@ "ignoreDeclarationSort": true, "ignoreMemberSort": false } - ] + ], + "jest/no-disabled-tests": 1, + "jest/no-focused-tests": 1, + "jest/no-identical-title": 1, + "jest/valid-expect": 1 } } diff --git a/package.json b/package.json index b6ecf42e2..0522eb639 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,8 @@ "ts", "types", "scripts", - "gulpfile.*", - "agora_node_ext", - "common", - "extra" + "gulpfile.js", + "!**/__tests__" ], "scripts": { "totalBuild": "cross-env-shell gulp totalBuild \\\"--INIT_CWD=$INIT_CWD\\\"", @@ -59,6 +57,7 @@ "@commitlint/config-conventional": "^17.0.2", "@evilmartians/lefthook": "^1.2.2", "@release-it/conventional-changelog": "^5.0.0", + "@types/jest": "^28.1.2", "@types/json-bigint": "^1.0.1", "@types/lodash.isequal": "^4.5.6", "@typescript-eslint/eslint-plugin": "^5.30.5", @@ -69,10 +68,12 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-auto-import": "^0.1.1", "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jest": "^26.9.0", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "gulp-zip": "^5.1.0", + "jest": "^28.1.1", "patch-package": "^6.5.0", "prettier": "^2.0.5", "release-it": "^15.0.0", diff --git a/ts/__tests__/index.test.tsx b/ts/__tests__/index.test.tsx new file mode 100644 index 000000000..bf84291a5 --- /dev/null +++ b/ts/__tests__/index.test.tsx @@ -0,0 +1 @@ +it.todo('write a test'); diff --git a/yarn.lock b/yarn.lock index 3107c32d5..00bd0db88 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,18 +2,152 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/helper-validator-identifier@^7.18.6": +"@babel/compat-data@^7.21.5": + version "7.21.7" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" + integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" + integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helpers" "^7.21.5" + "@babel/parser" "^7.21.8" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.21.5", "@babel/generator@^7.7.2": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" + integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== + dependencies: + "@babel/types" "^7.21.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" + integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== + dependencies: + "@babel/compat-data" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" + integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" + integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== + dependencies: + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helpers@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" + integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -23,6 +157,141 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" + integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" + integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.5" + "@babel/types" "^7.21.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" + integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== + dependencies: + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -279,11 +548,244 @@ resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -297,6 +799,14 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -450,6 +960,11 @@ conventional-recommended-bump "^6.1.0" semver "7.3.8" +"@sinclair/typebox@^0.24.1": + version "0.24.51" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz#645f33fe4e02defe26f2f5c0410e1c094eac7f5f" + integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -460,6 +975,20 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz#0ec9264cf54a527671d990eb874e030b55b70dcc" integrity sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw== +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@szmarczak/http-timer@^5.0.1": version "5.0.1" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" @@ -504,11 +1033,78 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.18.5" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.5.tgz#c107216842905afafd3b6e774f6f935da6f5db80" + integrity sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q== + dependencies: + "@babel/types" "^7.3.0" + +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + dependencies: + "@types/node" "*" + "@types/http-cache-semantics@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^28.1.2": + version "28.1.8" + resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + dependencies: + expect "^28.0.0" + pretty-format "^28.0.0" + "@types/json-bigint@^1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@types/json-bigint/-/json-bigint-1.0.1.tgz#201062a6990119a8cc18023cfe1fed12fc2fc8a7" @@ -556,16 +1152,38 @@ resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== + "@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "@types/triple-beam@^1.3.2": version "1.3.2" resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^5.30.5": version "5.59.2" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.2.tgz#684a2ce7182f3b4dac342eef7caa1c2bae476abd" @@ -600,6 +1218,14 @@ "@typescript-eslint/types" "5.59.2" "@typescript-eslint/visitor-keys" "5.59.2" +"@typescript-eslint/scope-manager@5.59.6": + version "5.59.6" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.6.tgz#d43a3687aa4433868527cfe797eb267c6be35f19" + integrity sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ== + dependencies: + "@typescript-eslint/types" "5.59.6" + "@typescript-eslint/visitor-keys" "5.59.6" + "@typescript-eslint/type-utils@5.59.2": version "5.59.2" resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.2.tgz#0729c237503604cd9a7084b5af04c496c9a4cdcf" @@ -615,6 +1241,11 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.2.tgz#b511d2b9847fe277c5cb002a2318bd329ef4f655" integrity sha512-LbJ/HqoVs2XTGq5shkiKaNTuVv5tTejdHgfdjqRUGdYhjW1crm/M7og2jhVskMt8/4wS3T1+PfFvL1K3wqYj4w== +"@typescript-eslint/types@5.59.6": + version "5.59.6" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.6.tgz#5a6557a772af044afe890d77c6a07e8c23c2460b" + integrity sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA== + "@typescript-eslint/typescript-estree@5.59.2": version "5.59.2" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.2.tgz#6e2fabd3ba01db5d69df44e0b654c0b051fe9936" @@ -628,6 +1259,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.59.6": + version "5.59.6" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.6.tgz#2fb80522687bd3825504925ea7e1b8de7bb6251b" + integrity sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA== + dependencies: + "@typescript-eslint/types" "5.59.6" + "@typescript-eslint/visitor-keys" "5.59.6" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.59.2": version "5.59.2" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.2.tgz#0c45178124d10cc986115885688db6abc37939f4" @@ -642,6 +1286,20 @@ eslint-scope "^5.1.1" semver "^7.3.7" +"@typescript-eslint/utils@^5.10.0": + version "5.59.6" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.6.tgz#82960fe23788113fc3b1f9d4663d6773b7907839" + integrity sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.6" + "@typescript-eslint/types" "5.59.6" + "@typescript-eslint/typescript-estree" "5.59.6" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.59.2": version "5.59.2" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.2.tgz#37a419dc2723a3eacbf722512b86d6caf7d3b750" @@ -650,6 +1308,14 @@ "@typescript-eslint/types" "5.59.2" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.59.6": + version "5.59.6" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.6.tgz#673fccabf28943847d0c8e9e8d008e3ada7be6bb" + integrity sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q== + dependencies: + "@typescript-eslint/types" "5.59.6" + eslint-visitor-keys "^3.3.0" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -724,6 +1390,13 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-escapes@^6.0.0: version "6.2.0" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" @@ -767,6 +1440,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" @@ -790,6 +1468,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + append-buffer@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" @@ -822,6 +1508,13 @@ arg@^4.1.0: resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -1049,6 +1742,66 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + bach@^1.0.0: version "1.2.0" resolved "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" @@ -1201,6 +1954,23 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" +browserslist@^4.21.3: + version "4.21.5" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -1360,11 +2130,21 @@ camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + camelcase@^7.0.0: version "7.0.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== +caniuse-lite@^1.0.30001449: + version "1.0.30001488" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001488.tgz#d19d7b6e913afae3e98f023db97c19e9ddc5e91f" + integrity sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ== + chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" @@ -1394,6 +2174,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1433,6 +2218,11 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1550,6 +2340,11 @@ cmake-js@6.3.2: which "^1.0.9" yargs "^3.6.0" +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + code-block-writer@^10.1.1: version "10.1.1" resolved "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz#ad5684ed4bfb2b0783c8b131281ae84ee640a42f" @@ -1560,6 +2355,11 @@ code-point-at@^1.0.0: resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + collection-map@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" @@ -1874,7 +2674,7 @@ conventional-recommended-bump@^6.1.0: meow "^8.0.0" q "^1.5.1" -convert-source-map@^1.5.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -1979,7 +2779,7 @@ dateformat@^3.0.0: resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@^4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2085,6 +2885,11 @@ decompress@^4.2.1: pify "^2.3.0" strip-dirs "^2.0.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -2095,6 +2900,11 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + default-browser-id@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" @@ -2202,6 +3012,16 @@ detect-file@^1.0.0: resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + diff@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -2294,6 +3114,16 @@ eastasianwidth@^0.2.0: resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +electron-to-chromium@^1.4.284: + version "1.4.399" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.399.tgz#df8a63d1f572124ad8b5d846e38b0532ad7d9d54" + integrity sha512-+V1aNvVgoWNWYIbMOiQ1n5fRIaY4SlQ/uRlrsCjLrUwr/3OvQgiX2f5vdav4oArVT9TnttJKcPCqjwPNyZqw/A== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2459,6 +3289,11 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -2531,6 +3366,13 @@ eslint-plugin-import@^2.27.5: semver "^6.3.0" tsconfig-paths "^3.14.1" +eslint-plugin-jest@^26.9.0: + version "26.9.0" + resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + eslint-plugin-prettier@^4.0.0: version "4.2.1" resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" @@ -2709,6 +3551,11 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2729,6 +3576,17 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +expect@^28.0.0, expect@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + ext-list@^2.0.0: version "2.2.2" resolved "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" @@ -2847,6 +3705,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -2963,7 +3828,7 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -3178,6 +4043,11 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" +fsevents@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fstream@~1.0.10: version "1.0.12" resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -3227,6 +4097,11 @@ gauge@~1.2.0: lodash.padend "^4.1.0" lodash.padstart "^4.1.0" +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -3246,6 +4121,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ has "^1.0.3" has-symbols "^1.0.3" +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-pkg-repo@^4.0.0: version "4.2.1" resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" @@ -3413,7 +4293,7 @@ glob-watcher@^5.0.3: normalize-path "^3.0.0" object.defaults "^1.1.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3459,6 +4339,11 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.19.0: version "13.20.0" resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" @@ -3555,7 +4440,7 @@ graceful-fs@4.2.10: resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: +graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3752,6 +4637,11 @@ hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -3838,6 +4728,14 @@ import-lazy@^4.0.0: resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4109,6 +5007,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4409,6 +5312,48 @@ issue-parser@6.0.0: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" @@ -4430,6 +5375,364 @@ iterate-value@^1.0.2: es-get-iterator "^1.0.2" iterate-iterator "^1.0.1" +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.1: + version "28.1.3" + resolved "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + js-sdsl@^4.1.4: version "4.4.0" resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" @@ -4440,6 +5743,14 @@ js-sdsl@^4.1.4: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -4447,6 +5758,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-bigint@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" @@ -4501,6 +5817,11 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -4580,6 +5901,11 @@ klaw-sync@^6.0.0: dependencies: graceful-fs "^4.1.11" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + kuler@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" @@ -4621,6 +5947,11 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4880,6 +6211,13 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -4892,6 +6230,13 @@ make-iterator@^1.0.0: dependencies: kind-of "^6.0.2" +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5204,6 +6549,16 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -5547,7 +6902,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -5657,7 +7012,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -5801,7 +7156,12 @@ pend@~1.2.0: resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -picomatch@^2.3.1: +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -5833,6 +7193,18 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + plugin-error@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" @@ -5875,6 +7247,16 @@ prettier@^2.0.5: resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -5902,6 +7284,14 @@ promise.allsettled@1.0.6: get-intrinsic "^1.1.3" iterate-value "^1.0.2" +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -6031,6 +7421,11 @@ react-is@^16.13.1: resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -6298,6 +7693,13 @@ resolve-alpn@^1.2.0: resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -6335,7 +7737,12 @@ resolve-url@^0.2.1: resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.22.1, resolve@^1.4.0: +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.4.0: version "1.22.2" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -6397,7 +7804,7 @@ rimraf@2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -6590,6 +7997,11 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -6689,6 +8101,14 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.1" resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" @@ -6699,7 +8119,7 @@ source-map@^0.5.6: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6761,11 +8181,23 @@ splitargs@0: resolved "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz#fe9f7ae657371b33b10cb80da143cf8249cf6b3b" integrity sha512-UUFYD2oWbNwULH6WoVtLUOw8ch586B+HUqcsAjjjeoBQAM1bD4wZRXu01koaxyd8UeYpybWqW4h+lO1Okv40Tg== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + stack-trace@0.0.10, stack-trace@0.0.x: version "0.0.10" resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -6808,6 +8240,14 @@ strict-uri-encode@^1.0.0: resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -6928,6 +8368,11 @@ strip-bom@^3.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-dirs@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" @@ -6976,13 +8421,28 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -7022,6 +8482,23 @@ tar@^4: safe-buffer "^5.2.1" yallist "^3.1.1" +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" @@ -7095,6 +8572,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + to-absolute-glob@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" @@ -7108,6 +8590,11 @@ to-buffer@^1.1.1: resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -7263,6 +8750,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -7273,6 +8765,11 @@ type-fest@^0.20.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -7476,6 +8973,14 @@ upath@^1.1.1: resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-notifier@6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" @@ -7545,6 +9050,15 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + v8flags@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" @@ -7621,6 +9135,13 @@ vm2@^3.9.17: acorn "^8.7.0" acorn-walk "^8.2.0" +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -7789,6 +9310,14 @@ write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" @@ -7860,7 +9389,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: +yargs@^17.0.0, yargs@^17.3.1: version "17.7.2" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== From 99994f96aede128d7ee0964ab6c982f3131f029e Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 19 May 2023 18:31:26 +0800 Subject: [PATCH 45/74] chore: optimize --- .eslintrc | 23 +- .github/workflows/ci.yml | 34 +- babel.config.js | 6 + package.json | 9 + ts/AgoraSdk.ts | 3 +- .../extension/IAgoraMediaEngineExtension.ts | 2 +- .../extension/IAgoraMediaPlayerExtension.ts | 2 +- .../extension/IAgoraMediaRecorderExtension.ts | 2 +- .../IAgoraMusicContentCenterExtension.ts | 2 +- .../extension/IAgoraRtcEngineExtension.ts | 2 +- .../internal/AudioDeviceManagerInternal.ts | 3 +- ts/Private/internal/IrisApiEngine.ts | 266 +++--- .../LocalSpatialAudioEngineInternal.ts | 4 +- ts/Private/internal/MediaEngineInternal.ts | 37 +- ts/Private/internal/MediaPlayerInternal.ts | 56 +- ts/Private/internal/MediaRecorderInternal.ts | 34 +- .../internal/MusicContentCenterInternal.ts | 87 +- ts/Private/internal/RtcEngineExInternal.ts | 56 +- ts/__tests__/MediaEngineInternal.test.ts | 89 ++ ts/__tests__/MediaPlayerInternal.test.ts | 134 +++ ts/__tests__/MediaRecorderInternal.test.ts | 118 +++ .../MusicContentCenterInternal.test.ts | 125 +++ ts/__tests__/RtcEngineExInternal.test.ts | 139 +++ ts/__tests__/index.test.tsx | 1 - yarn.lock | 812 +++++++++++++++++- 25 files changed, 1753 insertions(+), 293 deletions(-) create mode 100644 babel.config.js create mode 100644 ts/__tests__/MediaEngineInternal.test.ts create mode 100644 ts/__tests__/MediaPlayerInternal.test.ts create mode 100644 ts/__tests__/MediaRecorderInternal.test.ts create mode 100644 ts/__tests__/MusicContentCenterInternal.test.ts create mode 100644 ts/__tests__/RtcEngineExInternal.test.ts delete mode 100644 ts/__tests__/index.test.tsx diff --git a/.eslintrc b/.eslintrc index 1863c66ad..270c6b60a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -27,19 +27,6 @@ } }, "overrides": [ - { - "files": [ - "*.js" - ], - "parser": "@babel/eslint-parser", - "plugins": [ - "ft-flow" - ], - "rules": { - "ft-flow/define-flow-type": 1, - "ft-flow/use-flow-type": 1 - } - }, { "files": [ "*.ts", @@ -51,7 +38,7 @@ ], "rules": { "@typescript-eslint/no-unused-vars": [ - "error", + "warn", { "argsIgnorePattern": "^_", "destructuredArrayIgnorePattern": "^_" @@ -133,6 +120,14 @@ { "pattern": "../internal/IrisApiEngine", "group": "unknown" + }, + { + "pattern": "../impl/**", + "group": "unknown" + }, + { + "pattern": "./Private/impl/**", + "group": "unknown" } ], "alphabetize": { diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 092ca6f1c..c51b40495 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,11 +33,8 @@ jobs: set -e yarn typecheck - test: - strategy: - matrix: - runner: [ windows, macos ] - runs-on: ${{ matrix.runner }}-latest + build: + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -45,11 +42,10 @@ jobs: - name: Setup uses: ./.github/actions/setup - - name: Build - run: | - yarn totalBuild + - name: Build package + run: yarn prepack - build: + test: runs-on: ubuntu-latest steps: - name: Checkout @@ -58,5 +54,21 @@ jobs: - name: Setup uses: ./.github/actions/setup - - name: Build package - run: yarn prepack + - name: Jest + run: yarn test + + build-${{ matrix.runner }}: + strategy: + matrix: + runner: [ windows, macos ] + runs-on: ${{ matrix.runner }}-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup + uses: ./.github/actions/setup + + - name: Build + run: | + yarn totalBuild diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..8165fe455 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,6 @@ +module.exports = { + presets: [ + ['@babel/preset-env', { targets: { node: 'current' } }], + '@babel/preset-typescript', + ], +}; diff --git a/package.json b/package.json index 0522eb639..606d175ec 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,8 @@ "registry": "https://registry.npmjs.org/" }, "devDependencies": { + "@babel/preset-env": "^7.21.5", + "@babel/preset-typescript": "^7.21.5", "@commitlint/config-conventional": "^17.0.2", "@evilmartians/lefthook": "^1.2.2", "@release-it/conventional-changelog": "^5.0.0", @@ -84,6 +86,13 @@ "node": ">= 14.0.0" }, "packageManager": "^yarn@1.22.15", + "jest": { + "modulePathIgnorePatterns": [ + "/example/node_modules", + "/js/", + "/types/" + ] + }, "commitlint": { "extends": [ "@commitlint/config-conventional" diff --git a/ts/AgoraSdk.ts b/ts/AgoraSdk.ts index 35ab235ac..717baaaa6 100644 --- a/ts/AgoraSdk.ts +++ b/ts/AgoraSdk.ts @@ -1,6 +1,5 @@ import { IMediaPlayerCacheManager } from './Private/IAgoraMediaPlayer'; import { IRtcEngineEx } from './Private/IAgoraRtcEngineEx'; -import { IMediaPlayerCacheManagerImpl } from './Private/impl/IAgoraMediaPlayerImpl'; import { RtcEngineExInternal } from './Private/internal/RtcEngineExInternal'; import { AgoraEnvOptions } from './Types'; import { AgoraEnv } from './Utils'; @@ -49,3 +48,5 @@ export function getMediaPlayerCacheManager(): IMediaPlayerCacheManager { } export default createAgoraRtcEngine; + +import { IMediaPlayerCacheManagerImpl } from './Private/impl/IAgoraMediaPlayerImpl'; diff --git a/ts/Private/extension/IAgoraMediaEngineExtension.ts b/ts/Private/extension/IAgoraMediaEngineExtension.ts index 80599fc49..d532270b5 100644 --- a/ts/Private/extension/IAgoraMediaEngineExtension.ts +++ b/ts/Private/extension/IAgoraMediaEngineExtension.ts @@ -45,7 +45,7 @@ declare module '../IAgoraMediaEngine' { */ removeListener( eventType: EventType, - listener: IMediaEngineEvent[EventType] + listener?: IMediaEngineEvent[EventType] ): void; /** diff --git a/ts/Private/extension/IAgoraMediaPlayerExtension.ts b/ts/Private/extension/IAgoraMediaPlayerExtension.ts index aaff0760a..81995c29f 100644 --- a/ts/Private/extension/IAgoraMediaPlayerExtension.ts +++ b/ts/Private/extension/IAgoraMediaPlayerExtension.ts @@ -44,7 +44,7 @@ declare module '../IAgoraMediaPlayer' { */ removeListener( eventType: EventType, - listener: IMediaPlayerEvent[EventType] + listener?: IMediaPlayerEvent[EventType] ): void; /** diff --git a/ts/Private/extension/IAgoraMediaRecorderExtension.ts b/ts/Private/extension/IAgoraMediaRecorderExtension.ts index 1cab3894f..14b73d47e 100644 --- a/ts/Private/extension/IAgoraMediaRecorderExtension.ts +++ b/ts/Private/extension/IAgoraMediaRecorderExtension.ts @@ -39,7 +39,7 @@ declare module '../IAgoraMediaRecorder' { */ removeListener( eventType: EventType, - listener: IMediaRecorderEvent[EventType] + listener?: IMediaRecorderEvent[EventType] ): void; /** diff --git a/ts/Private/extension/IAgoraMusicContentCenterExtension.ts b/ts/Private/extension/IAgoraMusicContentCenterExtension.ts index 85a83f44b..cd73f2812 100644 --- a/ts/Private/extension/IAgoraMusicContentCenterExtension.ts +++ b/ts/Private/extension/IAgoraMusicContentCenterExtension.ts @@ -21,7 +21,7 @@ declare module '../IAgoraMusicContentCenter' { */ removeListener( eventType: EventType, - listener: IMusicContentCenterEvent[EventType] + listener?: IMusicContentCenterEvent[EventType] ): void; /** diff --git a/ts/Private/extension/IAgoraRtcEngineExtension.ts b/ts/Private/extension/IAgoraRtcEngineExtension.ts index 0ad310887..ffb7064a8 100644 --- a/ts/Private/extension/IAgoraRtcEngineExtension.ts +++ b/ts/Private/extension/IAgoraRtcEngineExtension.ts @@ -49,7 +49,7 @@ declare module '../IAgoraRtcEngine' { */ removeListener( eventType: EventType, - listener: IRtcEngineEvent[EventType] + listener?: IRtcEngineEvent[EventType] ): void; /** diff --git a/ts/Private/internal/AudioDeviceManagerInternal.ts b/ts/Private/internal/AudioDeviceManagerInternal.ts index 6a736b5bc..1d3eae465 100644 --- a/ts/Private/internal/AudioDeviceManagerInternal.ts +++ b/ts/Private/internal/AudioDeviceManagerInternal.ts @@ -1,5 +1,4 @@ import { AudioDeviceInfo } from '../IAgoraRtcEngine'; -import { IAudioDeviceManagerImpl } from '../impl/IAudioDeviceManagerImpl'; import { callIrisApi } from './IrisApiEngine'; @@ -44,3 +43,5 @@ export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { }; } } + +import { IAudioDeviceManagerImpl } from '../impl/IAudioDeviceManagerImpl'; diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index 5d5c7381b..354a5ba9d 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -19,31 +19,16 @@ import { IMediaPlayerVideoFrameObserver, } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; -import { IMusicContentCenterEventHandler } from '../IAgoraMusicContentCenter'; +import { + IMusicContentCenterEventHandler, + MusicCollection, +} from '../IAgoraMusicContentCenter'; import { IDirectCdnStreamingEventHandler, IMetadataObserver, IRtcEngineEventHandler, Metadata, } from '../IAgoraRtcEngine'; -import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; -import { - processIAudioFrameObserver, - processIAudioFrameObserverBase, - processIAudioPcmFrameSink, - processIAudioSpectrumObserver, - processIMediaRecorderObserver, - processIVideoEncodedFrameObserver, - processIVideoFrameObserver, -} from '../impl/AgoraMediaBaseImpl'; -import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; -import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; -import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; -import { - processIDirectCdnStreamingEventHandler, - processIMetadataObserver, - processIRtcEngineEventHandler, -} from '../impl/IAgoraRtcEngineImpl'; import { MediaEngineInternal } from './MediaEngineInternal'; import { MediaPlayerInternal } from './MediaPlayerInternal'; @@ -84,29 +69,12 @@ export function isDebuggable() { /** * @internal */ -export type EventProcessor = { +export type EventProcessor = { suffix: string; - type: EVENT_TYPE; + type: (data: any) => EVENT_TYPE; func: Function[]; preprocess?: (event: string, data: any, buffers: Uint8Array[]) => void; - handlers: ( - data: any - ) => - | ( - | IAudioFrameObserver - | IVideoFrameObserver - | IAudioSpectrumObserver - | IAudioEncodedFrameObserver - | IVideoEncodedFrameObserver - | IMediaPlayerSourceObserver - | IAudioPcmFrameSink - | IMediaPlayerVideoFrameObserver - | IMediaRecorderObserver - | IMetadataObserver - | IDirectCdnStreamingEventHandler - | IRtcEngineEventHandler - | IMusicContentCenterEventHandler - )[]; + handlers: (data: any) => (T | undefined)[] | undefined; }; export enum EVENT_TYPE { @@ -117,69 +85,96 @@ export enum EVENT_TYPE { IMusicContentCenter, } +type ProcessorType = + | IAudioFrameObserver + | IVideoFrameObserver + | IAudioSpectrumObserver + | IAudioEncodedFrameObserver + | IVideoEncodedFrameObserver + | IMediaPlayerSourceObserver + | IAudioPcmFrameSink + | IMediaPlayerVideoFrameObserver + | IMediaRecorderObserver + | IMetadataObserver + | IDirectCdnStreamingEventHandler + | IRtcEngineEventHandler + | IMusicContentCenterEventHandler; + +type EventProcessors = { + IAudioFrameObserver: EventProcessor; + IVideoFrameObserver: EventProcessor; + IAudioSpectrumObserver: EventProcessor; + IAudioEncodedFrameObserver: EventProcessor; + IVideoEncodedFrameObserver: EventProcessor; + IMediaPlayerSourceObserver: EventProcessor; + IAudioPcmFrameSink: EventProcessor; + IMediaPlayerVideoFrameObserver: EventProcessor; + IMediaRecorderObserver: EventProcessor; + IMetadataObserver: EventProcessor; + IDirectCdnStreamingEventHandler: EventProcessor; + IRtcEngineEventHandler: EventProcessor; + IMusicContentCenterEventHandler: EventProcessor; +}; + /** * @internal */ -export const EVENT_PROCESSORS = { +export const EVENT_PROCESSORS: EventProcessors = { IAudioFrameObserver: { suffix: 'AudioFrameObserver_', - type: EVENT_TYPE.IMediaEngine, + type: () => EVENT_TYPE.IMediaEngine, func: [processIAudioFrameObserver, processIAudioFrameObserverBase], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { audioFrame?: AudioFrame }, + buffers: Uint8Array[] + ) => { if (data.audioFrame) { - (data.audioFrame as AudioFrame).buffer = buffers[0]; + data.audioFrame.buffer = buffers[0]; } }, handlers: () => MediaEngineInternal._audio_frame_observers, }, IVideoFrameObserver: { suffix: 'VideoFrameObserver_', - type: EVENT_TYPE.IMediaEngine, + type: () => EVENT_TYPE.IMediaEngine, func: [processIVideoFrameObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { videoFrame?: VideoFrame }, + buffers: Uint8Array[] + ) => { if (data.videoFrame) { - (data.videoFrame as VideoFrame).yBuffer = buffers[0]; - (data.videoFrame as VideoFrame).uBuffer = buffers[1]; - (data.videoFrame as VideoFrame).vBuffer = buffers[2]; - (data.videoFrame as VideoFrame).metadata_buffer = buffers[3]; - (data.videoFrame as VideoFrame).alphaBuffer = buffers[4]; + data.videoFrame.yBuffer = buffers[0]; + data.videoFrame.uBuffer = buffers[1]; + data.videoFrame.vBuffer = buffers[2]; + data.videoFrame.metadata_buffer = buffers[3]; + data.videoFrame.alphaBuffer = buffers[4]; } }, handlers: () => MediaEngineInternal._video_frame_observers, }, IAudioSpectrumObserver: { suffix: 'AudioSpectrumObserver_', - type: EVENT_TYPE.IRtcEngine, + type: (data: any) => + data.playerId === 0 ? EVENT_TYPE.IRtcEngine : EVENT_TYPE.IMediaPlayer, func: [processIAudioSpectrumObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { - // if (data.data) { - // (data.data as AudioSpectrumData).audioSpectrumData = buffers[0]; - // } - }, handlers: (data: any) => data.playerId === 0 ? RtcEngineExInternal._audio_spectrum_observers - : undefined, - }, - IMediaPlayerAudioSpectrumObserver: { - suffix: 'AudioSpectrumObserver_', - type: EVENT_TYPE.IMediaPlayer, - func: [processIAudioSpectrumObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { - // if (data.data) { - // (data.data as AudioSpectrumData).audioSpectrumData = buffers[0]; - // } - }, - handlers: (data: any) => - data.playerId !== 0 - ? MediaPlayerInternal._audio_spectrum_observers.get(data.playerId) - : undefined, + : MediaPlayerInternal._audio_spectrum_observers.get(data.playerId), }, IAudioEncodedFrameObserver: { suffix: 'AudioEncodedFrameObserver_', - type: EVENT_TYPE.IRtcEngine, + type: () => EVENT_TYPE.IRtcEngine, func: [processIAudioEncodedFrameObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { + frameBuffer?: Uint8Array; + }, + buffers: Uint8Array[] + ) => { switch (event) { case 'OnRecordAudioEncodedFrame': case 'OnPlaybackAudioEncodedFrame': @@ -192,9 +187,15 @@ export const EVENT_PROCESSORS = { }, IVideoEncodedFrameObserver: { suffix: 'VideoEncodedFrameObserver_', - type: EVENT_TYPE.IMediaEngine, + type: () => EVENT_TYPE.IMediaEngine, func: [processIVideoEncodedFrameObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { + imageBuffer?: Uint8Array; + }, + buffers: Uint8Array[] + ) => { switch (event) { case 'onEncodedVideoFrameReceived': data.imageBuffer = buffers[0]; @@ -205,18 +206,22 @@ export const EVENT_PROCESSORS = { }, IMediaPlayerSourceObserver: { suffix: 'MediaPlayerSourceObserver_', - type: EVENT_TYPE.IMediaPlayer, + type: () => EVENT_TYPE.IMediaPlayer, func: [processIMediaPlayerSourceObserver], handlers: (data: any) => MediaPlayerInternal._source_observers.get(data.playerId), }, - IMediaPlayerAudioFrameObserver: { + IAudioPcmFrameSink: { suffix: 'AudioPcmFrameSink_', - type: EVENT_TYPE.IMediaPlayer, + type: () => EVENT_TYPE.IMediaPlayer, func: [processIAudioPcmFrameSink], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { frame?: AudioPcmFrame }, + buffers: Uint8Array[] + ) => { if (data.frame) { - (data.frame as AudioPcmFrame).data_ = Array.from(buffers[0] ?? []); + data.frame.data_ = Array.from(buffers[0] ?? []); } }, handlers: (data: any) => @@ -224,15 +229,19 @@ export const EVENT_PROCESSORS = { }, IMediaPlayerVideoFrameObserver: { suffix: 'MediaPlayerVideoFrameObserver_', - type: EVENT_TYPE.IMediaPlayer, + type: () => EVENT_TYPE.IMediaPlayer, func: [processIMediaPlayerVideoFrameObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { frame?: VideoFrame }, + buffers: Uint8Array[] + ) => { if (data.frame) { - (data.frame as VideoFrame).yBuffer = buffers[0]; - (data.frame as VideoFrame).uBuffer = buffers[1]; - (data.frame as VideoFrame).vBuffer = buffers[2]; - (data.frame as VideoFrame).metadata_buffer = buffers[3]; - (data.frame as VideoFrame).alphaBuffer = buffers[4]; + data.frame.yBuffer = buffers[0]; + data.frame.uBuffer = buffers[1]; + data.frame.vBuffer = buffers[2]; + data.frame.metadata_buffer = buffers[3]; + data.frame.alphaBuffer = buffers[4]; } }, handlers: (data: any) => @@ -240,7 +249,7 @@ export const EVENT_PROCESSORS = { }, IMediaRecorderObserver: { suffix: 'MediaRecorderObserver_', - type: EVENT_TYPE.IMediaRecorder, + type: () => EVENT_TYPE.IMediaRecorder, func: [processIMediaRecorderObserver], handlers: (data: any) => [ MediaRecorderInternal._observers.get(data.nativeHandle), @@ -248,13 +257,17 @@ export const EVENT_PROCESSORS = { }, IMetadataObserver: { suffix: 'MetadataObserver_', - type: EVENT_TYPE.IRtcEngine, + type: () => EVENT_TYPE.IRtcEngine, func: [processIMetadataObserver], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { metadata?: Metadata }, + buffers: Uint8Array[] + ) => { switch (event) { case 'onMetadataReceived': if (data.metadata) { - (data.metadata as Metadata).buffer = buffers[0]; + data.metadata.buffer = buffers[0]; } break; } @@ -263,15 +276,19 @@ export const EVENT_PROCESSORS = { }, IDirectCdnStreamingEventHandler: { suffix: 'DirectCdnStreamingEventHandler_', - type: EVENT_TYPE.IRtcEngine, + type: () => EVENT_TYPE.IRtcEngine, func: [processIDirectCdnStreamingEventHandler], handlers: () => RtcEngineExInternal._direct_cdn_streaming_event_handler, }, IRtcEngineEventHandler: { suffix: 'RtcEngineEventHandler_', - type: EVENT_TYPE.IRtcEngine, + type: () => EVENT_TYPE.IRtcEngine, func: [processIRtcEngineEventHandler], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { data?: Uint8Array }, + buffers: Uint8Array[] + ) => { switch (event) { case 'onStreamMessage': case 'onStreamMessageEx': @@ -283,9 +300,13 @@ export const EVENT_PROCESSORS = { }, IMusicContentCenterEventHandler: { suffix: 'MusicContentCenterEventHandler_', - type: EVENT_TYPE.IMusicContentCenter, + type: () => EVENT_TYPE.IMusicContentCenter, func: [processIMusicContentCenterEventHandler], - preprocess: (event: string, data: any, buffers: Uint8Array[]) => { + preprocess: ( + event: string, + data: { result: MusicCollection }, + buffers: Uint8Array[] + ) => { switch (event) { case 'onMusicCollectionResult': { const result = data.result; @@ -311,10 +332,10 @@ function handleEvent(...[event, data, buffers]: any) { } let _event: string = event; - let processor: EventProcessor = EVENT_PROCESSORS.IRtcEngineEventHandler; + let processor: EventProcessor = EVENT_PROCESSORS.IRtcEngineEventHandler; Object.values(EVENT_PROCESSORS).some((it) => { - const p = it as EventProcessor; + const p = it as EventProcessor; if ( _event.startsWith(p.suffix) && processor.handlers(_data) !== undefined @@ -332,17 +353,21 @@ function handleEvent(...[event, data, buffers]: any) { } const _buffers: Uint8Array[] = buffers; - if (processor.preprocess) processor.preprocess!(_event, _data, _buffers); + if (processor.preprocess) { + processor.preprocess(_event, _data, _buffers); + } - processor.handlers(_data)?.map((value) => { - if (value) { - processor.func.map((it) => { - it(value, _event, _data); - }); - } - }); + if (processor.handlers) { + processor.handlers(_data)?.map((value) => { + if (value) { + processor.func.map((it) => { + it(value, _event, _data); + }); + } + }); + } - emitEvent(_event, processor.type, _data); + emitEvent(_event, processor, _data); } /** @@ -480,6 +505,29 @@ export function callIrisApi(funcName: string, params: any): any { /** * @internal */ -export function emitEvent(eventType: string, ...params: any[]): void { - DeviceEventEmitter.emit(eventType, ...params); +export function emitEvent( + eventType: EventType, + eventProcessor: EventProcessor, + data: any +): void { + DeviceEventEmitter.emit(eventType as string, eventProcessor, data); } + +import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; +import { + processIAudioFrameObserver, + processIAudioFrameObserverBase, + processIAudioPcmFrameSink, + processIAudioSpectrumObserver, + processIMediaRecorderObserver, + processIVideoEncodedFrameObserver, + processIVideoFrameObserver, +} from '../impl/AgoraMediaBaseImpl'; +import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; +import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; +import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; +import { + processIDirectCdnStreamingEventHandler, + processIMetadataObserver, + processIRtcEngineEventHandler, +} from '../impl/IAgoraRtcEngineImpl'; diff --git a/ts/Private/internal/LocalSpatialAudioEngineInternal.ts b/ts/Private/internal/LocalSpatialAudioEngineInternal.ts index ba3d4ba41..04a43668e 100644 --- a/ts/Private/internal/LocalSpatialAudioEngineInternal.ts +++ b/ts/Private/internal/LocalSpatialAudioEngineInternal.ts @@ -4,8 +4,6 @@ import { SpatialAudioZone, } from '../IAgoraSpatialAudio'; -import { ILocalSpatialAudioEngineImpl } from '../impl/IAgoraSpatialAudioImpl'; - export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImpl { protected override getApiTypeFromRelease(): string { return 'LocalSpatialAudioEngine_release'; @@ -87,3 +85,5 @@ export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImp return 'LocalSpatialAudioEngine_muteRemoteAudioStream'; } } + +import { ILocalSpatialAudioEngineImpl } from '../impl/IAgoraSpatialAudioImpl'; diff --git a/ts/Private/internal/MediaEngineInternal.ts b/ts/Private/internal/MediaEngineInternal.ts index 8a531cf75..d3b052aca 100644 --- a/ts/Private/internal/MediaEngineInternal.ts +++ b/ts/Private/internal/MediaEngineInternal.ts @@ -8,17 +8,14 @@ import { import { IMediaEngineEvent } from '../extension/IAgoraMediaEngineExtension'; -import { - processIAudioFrameObserver, - processIVideoEncodedFrameObserver, - processIVideoFrameObserver, -} from '../impl/AgoraMediaBaseImpl'; -import { IMediaEngineImpl } from '../impl/IAgoraMediaEngineImpl'; - import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); -import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; +import { + DeviceEventEmitter, + EVENT_TYPE, + EventProcessor, +} from './IrisApiEngine'; export class MediaEngineInternal extends IMediaEngineImpl { static _audio_frame_observers: IAudioFrameObserver[] = []; @@ -132,26 +129,26 @@ export class MediaEngineInternal extends IMediaEngineImpl { listener: IMediaEngineEvent[EventType] ) { this._addListenerPreCheck(eventType); - const callback = (...data: any[]) => { - if (data[0] !== EVENT_TYPE.IMediaEngine) { + const callback = (eventProcessor: EventProcessor, data: any) => { + if (eventProcessor.type(data) !== EVENT_TYPE.IMediaEngine) { return; } - processIAudioFrameObserver({ [eventType]: listener }, eventType, data[1]); - processIVideoFrameObserver({ [eventType]: listener }, eventType, data[1]); - processIVideoEncodedFrameObserver( - { [eventType]: listener }, - eventType, - data[1] - ); + eventProcessor.func.map((it) => { + it({ [eventType]: listener }, eventType, data); + }); }; + listener!.prototype.callback = callback; DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, - listener: IMediaEngineEvent[EventType] + listener?: IMediaEngineEvent[EventType] ) { - DeviceEventEmitter.removeListener(eventType, listener); + DeviceEventEmitter.removeListener( + eventType, + listener?.prototype.callback ?? listener + ); } removeAllListeners( @@ -160,3 +157,5 @@ export class MediaEngineInternal extends IMediaEngineImpl { DeviceEventEmitter.removeAllListeners(eventType); } } + +import { IMediaEngineImpl } from '../impl/IAgoraMediaEngineImpl'; diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index edbc9f6d3..573c7697a 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -14,16 +14,6 @@ import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import { IMediaPlayerEvent } from '../extension/IAgoraMediaPlayerExtension'; -import { - processIAudioPcmFrameSink, - processIAudioSpectrumObserver, -} from '../impl/AgoraMediaBaseImpl'; -import { - IMediaPlayerImpl, - processIMediaPlayerVideoFrameObserver, -} from '../impl/IAgoraMediaPlayerImpl'; -import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; - import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; import IAgoraMediaPlayerTI from '../ti/IAgoraMediaPlayer-ti'; import IAgoraMediaPlayerSourceTI from '../ti/IAgoraMediaPlayerSource-ti'; @@ -33,7 +23,11 @@ const checkers = createCheckers( IAgoraMediaPlayerSourceTI ); -import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; +import { + DeviceEventEmitter, + EVENT_TYPE, + EventProcessor, +} from './IrisApiEngine'; export class MediaPlayerInternal extends IMediaPlayerImpl { static _source_observers: Map = new Map< @@ -125,41 +119,29 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { listener: IMediaPlayerEvent[EventType] ): void { this._addListenerPreCheck(eventType); - const callback = (...data: any[]) => { - if (data[0] !== EVENT_TYPE.IMediaPlayer) { + const callback = (eventProcessor: EventProcessor, data: any) => { + if (eventProcessor.type(data) !== EVENT_TYPE.IMediaPlayer) { return; } - if (data[1].playerId === this._mediaPlayerId) { - processIMediaPlayerSourceObserver( - { [eventType]: listener }, - eventType, - data[1] - ); - processIAudioPcmFrameSink( - { [eventType]: listener }, - eventType, - data[1] - ); - processIMediaPlayerVideoFrameObserver( - { [eventType]: listener }, - eventType, - data[1] - ); - processIAudioSpectrumObserver( - { [eventType]: listener }, - eventType, - data[1] - ); + if (data.playerId !== this._mediaPlayerId) { + return; } + eventProcessor.func.map((it) => { + it({ [eventType]: listener }, eventType, data); + }); }; + listener!.prototype.callback = callback; DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, - listener: IMediaPlayerEvent[EventType] + listener?: IMediaPlayerEvent[EventType] ) { - DeviceEventEmitter.removeListener(eventType); + DeviceEventEmitter.removeListener( + eventType, + listener?.prototype.callback ?? listener + ); } removeAllListeners( @@ -348,3 +330,5 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { ); } } + +import { IMediaPlayerImpl } from '../impl/IAgoraMediaPlayerImpl'; diff --git a/ts/Private/internal/MediaRecorderInternal.ts b/ts/Private/internal/MediaRecorderInternal.ts index 29e4546af..34be622af 100644 --- a/ts/Private/internal/MediaRecorderInternal.ts +++ b/ts/Private/internal/MediaRecorderInternal.ts @@ -5,13 +5,14 @@ import { IMediaRecorderObserver } from '../AgoraMediaBase'; import { IMediaRecorderEvent } from '../extension/IAgoraMediaRecorderExtension'; -import { processIMediaRecorderObserver } from '../impl/AgoraMediaBaseImpl'; -import { IMediaRecorderImpl } from '../impl/IAgoraMediaRecorderImpl'; - import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); -import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; +import { + DeviceEventEmitter, + EVENT_TYPE, + EventProcessor, +} from './IrisApiEngine'; export class MediaRecorderInternal extends IMediaRecorderImpl { static _observers: Map = new Map< @@ -65,24 +66,29 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { listener: IMediaRecorderEvent[EventType] ): void { this._addListenerPreCheck(eventType); - const callback = (...data: any[]) => { - if (data[0] !== EVENT_TYPE.IMediaRecorder) { + const callback = (eventProcessor: EventProcessor, data: any) => { + if (eventProcessor.type(data) !== EVENT_TYPE.IMediaRecorder) { + return; + } + if (data.nativeHandle !== this._nativeHandle) { return; } - processIMediaRecorderObserver( - { [eventType]: listener }, - eventType, - data[1] - ); + eventProcessor.func.map((it) => { + it({ [eventType]: listener }, eventType, data); + }); }; + listener!.prototype.callback = callback; DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, - listener: IMediaRecorderEvent[EventType] + listener?: IMediaRecorderEvent[EventType] ) { - DeviceEventEmitter.removeListener(eventType, listener); + DeviceEventEmitter.removeListener( + eventType, + listener?.prototype.callback ?? listener + ); } removeAllListeners( @@ -91,3 +97,5 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { DeviceEventEmitter.removeAllListeners(eventType); } } + +import { IMediaRecorderImpl } from '../impl/IAgoraMediaRecorderImpl'; diff --git a/ts/Private/internal/MusicContentCenterInternal.ts b/ts/Private/internal/MusicContentCenterInternal.ts index 5b6254013..1c0090525 100644 --- a/ts/Private/internal/MusicContentCenterInternal.ts +++ b/ts/Private/internal/MusicContentCenterInternal.ts @@ -4,20 +4,18 @@ import { IMusicContentCenterEventHandler, IMusicPlayer, Music, + MusicCollection, } from '../IAgoraMusicContentCenter'; import { IMusicContentCenterEvent } from '../extension/IAgoraMusicContentCenterExtension'; -import { - IMusicContentCenterImpl, - IMusicPlayerImpl, - MusicCollectionImpl, - processIMusicContentCenterEventHandler, -} from '../impl/IAgoraMusicContentCenterImpl'; - import IAgoraMusicContentCenterTI from '../ti/IAgoraMusicContentCenter-ti'; const checkers = createCheckers(IAgoraMusicContentCenterTI); -import { DeviceEventEmitter, EVENT_TYPE } from './IrisApiEngine'; +import { + DeviceEventEmitter, + EVENT_TYPE, + EventProcessor, +} from './IrisApiEngine'; import { MediaPlayerInternal } from './MediaPlayerInternal'; export class MusicContentCenterInternal extends IMusicContentCenterImpl { @@ -43,24 +41,26 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { listener: IMusicContentCenterEvent[EventType] ): void { this._addListenerPreCheck(eventType); - const callback = (...data: any[]) => { - if (data[0] !== EVENT_TYPE.IMusicContentCenter) { + const callback = (eventProcessor: EventProcessor, data: any) => { + if (eventProcessor.type(data) !== EVENT_TYPE.IMusicContentCenter) { return; } - processIMusicContentCenterEventHandler( - { [eventType]: listener }, - eventType, - data[1] - ); + eventProcessor.func.map((it) => { + it({ [eventType]: listener }, eventType, data); + }); }; + listener!.prototype.callback = callback; DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, - listener: IMusicContentCenterEvent[EventType] + listener?: IMusicContentCenterEvent[EventType] ) { - DeviceEventEmitter.removeListener(eventType, listener); + DeviceEventEmitter.removeListener( + eventType, + listener?.prototype.callback ?? listener + ); } removeAllListeners( @@ -136,39 +136,74 @@ export class MusicPlayerInternal } } -interface _MusicCollection { +class _MusicCollection extends MusicCollection { count: number; music: Music[]; page: number; pageSize: number; total: number; + + constructor(collection: any | _MusicCollection) { + super(); + this.count = collection.count; + this.music = collection.music; + this.page = collection.page; + this.pageSize = collection.pageSize; + this.total = collection.total; + } + + getCount(): number { + return this.count; + } + + getMusic(index: number): Music { + return this.music[index] ?? {}; + } + + getPage(): number { + return this.page; + } + + getPageSize(): number { + return this.pageSize; + } + + getTotal(): number { + return this.total; + } } export class MusicCollectionInternal extends MusicCollectionImpl { - private readonly _musicCollection: _MusicCollection; + private readonly _musicCollection: MusicCollection; - constructor(musicCollection: _MusicCollection) { + constructor(musicCollection: MusicCollection) { super(); - this._musicCollection = musicCollection; + this._musicCollection = new _MusicCollection(musicCollection); } override getCount(): number { - return this._musicCollection.count; + return this._musicCollection.getCount(); } override getMusic(index: number): Music { - return this._musicCollection.music[index] ?? {}; + return this._musicCollection.getMusic(index); } override getPage(): number { - return this._musicCollection.page; + return this._musicCollection.getPage(); } override getPageSize(): number { - return this._musicCollection.pageSize; + return this._musicCollection.getPageSize(); } override getTotal(): number { - return this._musicCollection.total; + return this._musicCollection.getTotal(); } } + +import { + IMusicContentCenterImpl, + IMusicPlayerImpl, + MusicCollectionImpl, +} from '../impl/IAgoraMusicContentCenterImpl'; diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 899c41ec7..3ef630b3c 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -48,22 +48,17 @@ import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; import { IRtcEngineEvent } from '../extension/IAgoraRtcEngineExtension'; -import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; -import { processIAudioSpectrumObserver } from '../impl/AgoraMediaBaseImpl'; -import { IRtcEngineExImpl } from '../impl/IAgoraRtcEngineExImpl'; -import { - IVideoDeviceManagerImpl, - processIDirectCdnStreamingEventHandler, - processIMetadataObserver, - processIRtcEngineEventHandler, -} from '../impl/IAgoraRtcEngineImpl'; - import AgoraBaseTI from '../ti/AgoraBase-ti'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; import IAgoraRtcEngineTI from '../ti/IAgoraRtcEngine-ti'; import { AudioDeviceManagerInternal } from './AudioDeviceManagerInternal'; -import { DeviceEventEmitter, EVENT_TYPE, callIrisApi } from './IrisApiEngine'; +import { + DeviceEventEmitter, + EVENT_TYPE, + EventProcessor, + callIrisApi, +} from './IrisApiEngine'; import { LocalSpatialAudioEngineInternal } from './LocalSpatialAudioEngineInternal'; import { MediaEngineInternal } from './MediaEngineInternal'; import { MediaPlayerInternal } from './MediaPlayerInternal'; @@ -192,40 +187,26 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { listener: IRtcEngineEvent[EventType] ): void { this._addListenerPreCheck(eventType); - const callback = (...data: any[]) => { - if (data[0] !== EVENT_TYPE.IRtcEngine) { + const callback = (eventProcessor: EventProcessor, data: any) => { + if (eventProcessor.type(data) !== EVENT_TYPE.IRtcEngine) { return; } - processIRtcEngineEventHandler( - { [eventType]: listener }, - eventType, - data[1] - ); - processIDirectCdnStreamingEventHandler( - { [eventType]: listener }, - eventType, - data[1] - ); - processIMetadataObserver({ [eventType]: listener }, eventType, data[1]); - processIAudioEncodedFrameObserver( - { [eventType]: listener }, - eventType, - data[1] - ); - processIAudioSpectrumObserver( - { [eventType]: listener }, - eventType, - data[1] - ); + eventProcessor.func.map((it) => { + it({ [eventType]: listener }, eventType, data); + }); }; + listener!.prototype.callback = callback; DeviceEventEmitter.addListener(eventType, callback); } removeListener( eventType: EventType, - listener: IRtcEngineEvent[EventType] + listener?: IRtcEngineEvent[EventType] ) { - DeviceEventEmitter.removeListener(eventType, listener); + DeviceEventEmitter.removeListener( + eventType, + listener?.prototype.callback ?? listener + ); } removeAllListeners( @@ -722,3 +703,6 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } } + +import { IRtcEngineExImpl } from '../impl/IAgoraRtcEngineExImpl'; +import { IVideoDeviceManagerImpl } from '../impl/IAgoraRtcEngineImpl'; diff --git a/ts/__tests__/MediaEngineInternal.test.ts b/ts/__tests__/MediaEngineInternal.test.ts new file mode 100644 index 000000000..b0abc72f8 --- /dev/null +++ b/ts/__tests__/MediaEngineInternal.test.ts @@ -0,0 +1,89 @@ +import createAgoraRtcEngine from '../AgoraSdk'; + +jest.mock('../../build/Release/agora_node_ext', () => { + return { + AgoraElectronBridge: function () { + return { + CallApi: () => { + return { + callApiReturnCode: 0, + callApiResult: JSON.stringify({ result: 0 }), + }; + }, + OnEvent: () => {}, + }; + }, + }; +}); + +test('addListener', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + expect(callback).toBeCalledTimes(1); +}); + +test('addListenerWithSameEventTypeAndCallback', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback); + engine.addListener('onCaptureVideoFrame', callback); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + expect(callback).toBeCalledTimes(2); +}); + +test('addListenerWithSameCallback', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback); + engine.addListener('onRecordAudioFrame', callback); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + emitEvent('onRecordAudioFrame', EVENT_PROCESSORS.IAudioFrameObserver, {}); + expect(callback).toBeCalledTimes(2); +}); + +test('removeListener', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback); + engine.removeListener('onCaptureVideoFrame', callback); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + expect(callback).not.toBeCalled(); +}); + +test('removeListenerWithoutCallback', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback); + engine.removeListener('onCaptureVideoFrame'); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + expect(callback).not.toBeCalled(); +}); + +test('removeAllListenersWithEventType', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback1); + engine.addListener('onCaptureVideoFrame', callback2); + engine.removeAllListeners('onCaptureVideoFrame'); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +test('removeAllListeners', () => { + const engine = createAgoraRtcEngine().getMediaEngine(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onCaptureVideoFrame', callback1); + engine.addListener('onRecordAudioFrame', callback2); + engine.removeAllListeners(); + emitEvent('onCaptureVideoFrame', EVENT_PROCESSORS.IVideoFrameObserver, {}); + emitEvent('onRecordAudioFrame', EVENT_PROCESSORS.IAudioFrameObserver, {}); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +import { EVENT_PROCESSORS, emitEvent } from '../Private/internal/IrisApiEngine'; diff --git a/ts/__tests__/MediaPlayerInternal.test.ts b/ts/__tests__/MediaPlayerInternal.test.ts new file mode 100644 index 000000000..02a211971 --- /dev/null +++ b/ts/__tests__/MediaPlayerInternal.test.ts @@ -0,0 +1,134 @@ +import createAgoraRtcEngine from '../AgoraSdk'; + +const playerId = 1; +jest.mock('../../build/Release/agora_node_ext', () => { + return { + AgoraElectronBridge: function () { + return { + CallApi: () => { + return { + callApiReturnCode: 0, + callApiResult: JSON.stringify({ result: playerId }), + }; + }, + OnEvent: () => {}, + }; + }, + }; +}); + +test('addListener', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + expect(callback).toBeCalledTimes(1); +}); + +test('addListenerWithWrongData', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId: 2 } + ); + expect(callback).not.toBeCalled(); +}); + +test('addListenerWithSameEventTypeAndCallback', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + expect(callback).toBeCalledTimes(2); +}); + +test('addListenerWithSameCallback', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + engine.addListener('onFrame', callback); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + emitEvent('onFrame', EVENT_PROCESSORS.IMediaPlayerVideoFrameObserver, { + playerId, + }); + expect(callback).toBeCalledTimes(2); +}); + +test('removeListener', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + engine.removeListener('onAgoraCDNTokenWillExpire', callback); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + expect(callback).not.toBeCalled(); +}); + +test('removeListenerWithoutCallback', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback); + engine.removeListener('onAgoraCDNTokenWillExpire'); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + expect(callback).not.toBeCalled(); +}); + +test('removeAllListenersWithEventType', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback1); + engine.addListener('onAgoraCDNTokenWillExpire', callback2); + engine.removeAllListeners('onAgoraCDNTokenWillExpire'); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +test('removeAllListeners', () => { + const engine = createAgoraRtcEngine().createMediaPlayer(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onAgoraCDNTokenWillExpire', callback1); + engine.addListener('onFrame', callback2); + engine.removeAllListeners(); + emitEvent( + 'onAgoraCDNTokenWillExpire', + EVENT_PROCESSORS.IMediaPlayerSourceObserver, + { playerId } + ); + emitEvent('onFrame', EVENT_PROCESSORS.IMediaPlayerVideoFrameObserver, { + playerId, + }); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +import { EVENT_PROCESSORS, emitEvent } from '../Private/internal/IrisApiEngine'; diff --git a/ts/__tests__/MediaRecorderInternal.test.ts b/ts/__tests__/MediaRecorderInternal.test.ts new file mode 100644 index 000000000..6737983b9 --- /dev/null +++ b/ts/__tests__/MediaRecorderInternal.test.ts @@ -0,0 +1,118 @@ +import createAgoraRtcEngine from '../AgoraSdk'; + +const nativeHandle = 1; +jest.mock('../../build/Release/agora_node_ext', () => { + return { + AgoraElectronBridge: function () { + return { + CallApi: () => { + return { + callApiReturnCode: 0, + callApiResult: JSON.stringify({ result: nativeHandle }), + }; + }, + OnEvent: () => {}, + }; + }, + }; +}); + +test('addListener', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback).toBeCalledTimes(1); +}); + +test('addListenerWithWrongData', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle: 2, + }); + expect(callback).not.toBeCalled(); +}); + +test('addListenerWithSameEventTypeAndCallback', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback); + engine.addListener('onRecorderInfoUpdated', callback); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback).toBeCalledTimes(2); +}); + +test('addListenerWithSameCallback', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback); + engine.addListener('onRecorderStateChanged', callback); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + emitEvent('onRecorderStateChanged', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback).toBeCalledTimes(2); +}); + +test('removeListener', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback); + engine.removeListener('onRecorderInfoUpdated', callback); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback).not.toBeCalled(); +}); + +test('removeListenerWithoutCallback', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback); + engine.removeListener('onRecorderInfoUpdated'); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback).not.toBeCalled(); +}); + +test('removeAllListenersWithEventType', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback1); + engine.addListener('onRecorderInfoUpdated', callback2); + engine.removeAllListeners('onRecorderInfoUpdated'); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +test('removeAllListeners', () => { + const engine = createAgoraRtcEngine().createMediaRecorder({}); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onRecorderInfoUpdated', callback1); + engine.addListener('onRecorderStateChanged', callback2); + engine.removeAllListeners(); + emitEvent('onRecorderInfoUpdated', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + emitEvent('onRecorderStateChanged', EVENT_PROCESSORS.IMediaRecorderObserver, { + nativeHandle, + }); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +import { EVENT_PROCESSORS, emitEvent } from '../Private/internal/IrisApiEngine'; diff --git a/ts/__tests__/MusicContentCenterInternal.test.ts b/ts/__tests__/MusicContentCenterInternal.test.ts new file mode 100644 index 000000000..aa4cc7fa2 --- /dev/null +++ b/ts/__tests__/MusicContentCenterInternal.test.ts @@ -0,0 +1,125 @@ +import createAgoraRtcEngine from '../AgoraSdk'; + +jest.mock('../../build/Release/agora_node_ext', () => { + return { + AgoraElectronBridge: function () { + return { + CallApi: () => { + return { + callApiReturnCode: 0, + callApiResult: JSON.stringify({ result: 0 }), + }; + }, + OnEvent: () => {}, + }; + }, + }; +}); + +test('addListener', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback = jest.fn(); + engine.addListener('onMusicChartsResult', callback); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback).toBeCalledTimes(1); +}); + +test('addListenerWithSameEventTypeAndCallback', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback = jest.fn(); + engine.addListener('onMusicChartsResult', callback); + engine.addListener('onMusicChartsResult', callback); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback).toBeCalledTimes(2); +}); + +test('addListenerWithSameCallback', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback = jest.fn(); + engine.addListener('onMusicChartsResult', callback); + engine.addListener('onMusicCollectionResult', callback); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + emitEvent( + 'onMusicCollectionResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback).toBeCalledTimes(2); +}); + +test('removeListener', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback = jest.fn(); + engine.addListener('onMusicChartsResult', callback); + engine.removeListener('onMusicChartsResult', callback); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback).not.toBeCalled(); +}); + +test('removeListenerWithoutCallback', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback = jest.fn(); + engine.addListener('onMusicChartsResult', callback); + engine.removeListener('onMusicChartsResult'); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback).not.toBeCalled(); +}); + +test('removeAllListenersWithEventType', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onMusicChartsResult', callback1); + engine.addListener('onMusicChartsResult', callback2); + engine.removeAllListeners('onMusicChartsResult'); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +test('removeAllListeners', () => { + const engine = createAgoraRtcEngine().getMusicContentCenter(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onMusicChartsResult', callback1); + engine.addListener('onMusicCollectionResult', callback2); + engine.removeAllListeners(); + emitEvent( + 'onMusicChartsResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + emitEvent( + 'onMusicCollectionResult', + EVENT_PROCESSORS.IMusicContentCenterEventHandler, + {} + ); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +import { EVENT_PROCESSORS, emitEvent } from '../Private/internal/IrisApiEngine'; diff --git a/ts/__tests__/RtcEngineExInternal.test.ts b/ts/__tests__/RtcEngineExInternal.test.ts new file mode 100644 index 000000000..b013a477c --- /dev/null +++ b/ts/__tests__/RtcEngineExInternal.test.ts @@ -0,0 +1,139 @@ +import createAgoraRtcEngine from '../AgoraSdk'; + +jest.mock('../../build/Release/agora_node_ext', () => { + return { + AgoraElectronBridge: function () { + return { + CallApi: () => { + return { + callApiReturnCode: 0, + callApiResult: JSON.stringify({ result: 0 }), + }; + }, + OnEvent: () => {}, + }; + }, + }; +}); + +test('addListener', () => { + const engine = createAgoraRtcEngine(); + const callback = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback).toBeCalledTimes(1); +}); + +test('addListenerWithSameEventTypeAndCallback', () => { + const engine = createAgoraRtcEngine(); + const callback = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback); + engine.addListener('onJoinChannelSuccess', callback); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback).toBeCalledTimes(2); +}); + +test('addListenerWithSameCallback', () => { + const engine = createAgoraRtcEngine(); + const callback = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback); + engine.addListener('onRejoinChannelSuccess', callback); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + emitEvent( + 'onRejoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback).toBeCalledTimes(2); +}); + +test('removeListener', () => { + const engine = createAgoraRtcEngine(); + const callback = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback); + engine.removeListener('onJoinChannelSuccess', callback); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback).not.toBeCalled(); +}); + +test('removeListenerWithoutCallback', () => { + const engine = createAgoraRtcEngine(); + const callback = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback); + engine.removeListener('onJoinChannelSuccess'); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback).not.toBeCalled(); +}); + +test('removeListenerWithDifferentCallback', () => { + const engine = createAgoraRtcEngine(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback1); + engine.removeListener('onJoinChannelSuccess', callback2); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback1).toBeCalledTimes(1); +}); + +test('removeAllListenersWithEventType', () => { + const engine = createAgoraRtcEngine(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback1); + engine.addListener('onJoinChannelSuccess', callback2); + engine.removeAllListeners('onJoinChannelSuccess'); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +test('removeAllListeners', () => { + const engine = createAgoraRtcEngine(); + const callback1 = jest.fn(); + const callback2 = jest.fn(); + engine.addListener('onJoinChannelSuccess', callback1); + engine.addListener('onRejoinChannelSuccess', callback2); + engine.removeAllListeners(); + emitEvent( + 'onJoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + emitEvent( + 'onRejoinChannelSuccess', + EVENT_PROCESSORS.IRtcEngineEventHandler, + {} + ); + expect(callback1).not.toBeCalled(); + expect(callback2).not.toBeCalled(); +}); + +import { EVENT_PROCESSORS, emitEvent } from '../Private/internal/IrisApiEngine'; diff --git a/ts/__tests__/index.test.tsx b/ts/__tests__/index.test.tsx deleted file mode 100644 index bf84291a5..000000000 --- a/ts/__tests__/index.test.tsx +++ /dev/null @@ -1 +0,0 @@ -it.todo('write a test'); diff --git a/yarn.lock b/yarn.lock index 00bd0db88..ad57db941 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,7 +17,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.21.5": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": version "7.21.7" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== @@ -53,7 +53,21 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.21.5": +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb" + integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== @@ -64,12 +78,48 @@ lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.21.5": +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" + integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.5" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.8" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" + integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + semver "^6.3.0" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== -"@babel/helper-function-name@^7.21.0": +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== @@ -84,14 +134,21 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.21.4": +"@babel/helper-member-expression-to-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" + integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg== + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.21.5": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== @@ -105,11 +162,40 @@ "@babel/traverse" "^7.21.5" "@babel/types" "^7.21.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" + integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== + dependencies: + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-member-expression-to-functions" "^7.21.5" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" + "@babel/helper-simple-access@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" @@ -117,6 +203,13 @@ dependencies: "@babel/types" "^7.21.5" +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -139,6 +232,16 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + "@babel/helpers@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" @@ -162,6 +265,151 @@ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -176,14 +424,42 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -197,7 +473,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -211,7 +494,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -239,21 +522,405 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": version "7.21.4" resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/template@^7.20.7", "@babel/template@^7.3.3": +"@babel/plugin-transform-arrow-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" + integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" + integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" + integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" + integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== + dependencies: + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-simple-access" "^7.21.5" + +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" + integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" + integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb" + integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg== + dependencies: + "@babel/compat-data" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.21.5" + "@babel/plugin-transform-async-to-generator" "^7.20.7" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.21.5" + "@babel/plugin-transform-destructuring" "^7.21.3" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.21.5" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.21.3" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.21.5" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.20.7" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.21.5" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.21.5" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.21.5": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz#68292c884b0e26070b4d66b202072d391358395f" + integrity sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA== + dependencies: + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-typescript" "^7.21.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.8.4": + version "7.21.5" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -262,7 +929,7 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2": version "7.21.5" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== @@ -278,7 +945,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.21.5" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== @@ -1776,6 +2443,30 @@ babel-plugin-jest-hoist@^28.1.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" @@ -1954,7 +2645,7 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.3: +browserslist@^4.21.3, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -2692,6 +3383,13 @@ copy-props@^2.0.1: each-props "^1.3.2" is-plain-object "^5.0.0" +core-js-compat@^3.25.1: + version "3.30.2" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" + integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== + dependencies: + browserslist "^4.21.5" + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -5763,6 +6461,11 @@ jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + json-bigint@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" @@ -6045,6 +6748,11 @@ lodash.capitalize@^4.2.1: resolved "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -7558,6 +8266,30 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -7575,6 +8307,18 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.2.0" functions-have-names "^1.2.3" +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + registry-auth-token@^5.0.1: version "5.0.2" resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" @@ -7589,6 +8333,13 @@ registry-url@^6.0.0: dependencies: rc "1.2.8" +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + release-it@^15.0.0: version "15.10.3" resolved "https://registry.npmjs.org/release-it/-/release-it-15.10.3.tgz#9d0a832083c070958cdd0727d3053d45ea344e85" @@ -7742,7 +8493,7 @@ resolve.exports@^1.1.0: resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.4.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.4.0: version "1.22.2" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== @@ -7913,7 +8664,7 @@ semver@7.5.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8895,6 +9646,29 @@ undertaker@^1.2.1: object.reduce "^1.0.0" undertaker-registry "^1.0.0" +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" From 6c84d61c8bc88b1c897619ff9f5b78610695cc73 Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 19 May 2023 18:34:25 +0800 Subject: [PATCH 46/74] chore: optimize --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c51b40495..50607e9f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: - name: Jest run: yarn test - build-${{ matrix.runner }}: + build-os: strategy: matrix: runner: [ windows, macos ] From ed9f42824ab449a7fe35a4500b55a08b00cfbc2f Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 19 May 2023 18:40:43 +0800 Subject: [PATCH 47/74] chore: optimize --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50607e9f1..6885c0012 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,7 +55,9 @@ jobs: uses: ./.github/actions/setup - name: Jest - run: yarn test + run: | + echo > build/Release/agora_node_ext.node + yarn test build-os: strategy: From b8932ed297a7d4a7811fbb95218c3e5a456b402e Mon Sep 17 00:00:00 2001 From: HUI Date: Fri, 19 May 2023 18:43:38 +0800 Subject: [PATCH 48/74] chore: optimize --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6885c0012..e2aeca60d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,6 +56,7 @@ jobs: - name: Jest run: | + mkdir -p build/Release echo > build/Release/agora_node_ext.node yarn test From 025d68c991507e4974de6ef5ce1a666b28b781cf Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Fri, 19 May 2023 19:37:04 +0800 Subject: [PATCH 49/74] [AUTO] Generate code by terra (#1005) Co-authored-by: LichKing-2234 --- ts/AgoraSdk.ts | 2 +- ts/Private/AgoraBase.ts | 24 +-- ts/Private/AgoraMediaBase.ts | 67 ++++---- ts/Private/IAgoraMediaEngine.ts | 6 +- ts/Private/IAgoraMediaPlayer.ts | 39 +---- ts/Private/IAgoraMediaRecorder.ts | 24 +-- ts/Private/IAgoraMusicContentCenter.ts | 8 +- ts/Private/IAgoraRtcEngine.ts | 229 ++++++++----------------- ts/Private/IAgoraRtcEngineEx.ts | 99 +++++------ ts/Private/IAgoraSpatialAudio.ts | 16 +- ts/Private/IAudioDeviceManager.ts | 24 +-- 11 files changed, 179 insertions(+), 359 deletions(-) diff --git a/ts/AgoraSdk.ts b/ts/AgoraSdk.ts index 717baaaa6..304842f59 100644 --- a/ts/AgoraSdk.ts +++ b/ts/AgoraSdk.ts @@ -25,7 +25,7 @@ export * from './Utils'; const instance = new RtcEngineExInternal(); /** - * IRtcEngineEx + * Creates one IRtcEngineEx object. * Currently, the Agora RTC SDK v4.x supports creating only one IRtcEngineEx object for each app. * * @returns diff --git a/ts/Private/AgoraBase.ts b/ts/Private/AgoraBase.ts index becb87070..b935085c0 100644 --- a/ts/Private/AgoraBase.ts +++ b/ts/Private/AgoraBase.ts @@ -227,7 +227,7 @@ export enum ErrorCodeType { */ ErrJoinChannelRejected = 17, /** - * 18: Fails to leave the channel. Possible reasons include the following:The user has left the channel before calling the method. Stop calling this method to clear this error.The user calls the method to leave the channel before joining the channel. In this case, no extra operation is needed. + * 18: Fails to leave the channel. Possible reasons include the following:The user has left the channel before calling the leaveChannel method. Stop calling this method to clear this error.The user calls the leaveChannel method to leave the channel before joining the channel. In this case, no extra operation is needed. */ ErrLeaveChannelRejected = 18, /** @@ -1332,7 +1332,7 @@ export class SimulcastStreamConfig { */ dimensions?: VideoDimensions; /** - * @ignore + * Video receive bitrate (Kbps), represented by an instantaneous value. The default value is 65. */ kBitrate?: number; /** @@ -1655,7 +1655,7 @@ export enum AudioAinsMode { */ AinsModeAggressive = 1, /** - * 2: Aggressive mode with low latency. The noise reduction delay of this mode is about only half of that of the balance and aggressive mode. It is suitable for scenarios that have high requirements on noise reduction with low latency, such as sing together online in real-time. + * 2: Aggressive mode with low latency. The noise reduction delay of this mode is about only half of that of the balance and aggressive modes. It is suitable for scenarios that have high requirements on noise reduction with low latency, such as sing together online in real time. */ AinsModeUltralowlatency = 2, } @@ -1941,9 +1941,9 @@ export enum LocalVideoStreamError { */ LocalVideoStreamErrorCaptureFailure = 4, /** - * @ignore + * 5: The local video encoding fails. */ - LocalVideoStreamErrorCodecNotSupport = 5, + LocalVideoStreamErrorEncodeFailure = 5, /** * @ignore */ @@ -2479,7 +2479,7 @@ export enum RtmpStreamPublishErrorType { */ RtmpStreamPublishErrorInvalidPrivilege = 16, /** - * 100: The streaming has been stopped normally. After you stop the media push, the SDK returns this value. + * 100: The streaming has been stopped normally. After you stop the Media Push, the SDK returns this value. */ RtmpStreamUnpublishErrorOk = 100, } @@ -3367,15 +3367,15 @@ export class VirtualBackgroundSource { */ background_source_type?: BackgroundSourceType; /** - * The type of the custom background image. The color of the custom background image. The format is a hexadecimal integer defined by RGB, without the # sign, such as 0xFFB6C1 for light pink. The default value is 0xFFFFFF, which signifies white. The value range is [0x000000, 0xffffff]. If the value is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image isBackgroundColor . + * The type of the custom background image. The color of the custom background image. The format is a hexadecimal integer defined by RGB, without the # sign, such as 0xFFB6C1 for light pink. The default value is 0xFFFFFF, which signifies white. The value range is [0x000000, 0xffffff]. If the value is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image is BackgroundColor. */ color?: number; /** - * The local absolute path of the custom background image. PNG and JPG formats are supported. If the path is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image isBackgroundImg . + * The local absolute path of the custom background image. PNG and JPG formats are supported. If the path is invalid, the SDK replaces the original background image with a white background image.This parameter takes effect only when the type of the custom background image is BackgroundImg. */ source?: string; /** - * The degree of blurring applied to the custom background image. See BackgroundBlurDegree .This parameter takes effect only when the type of the custom background image isBackgroundBlur . + * The degree of blurring applied to the custom background image. See BackgroundBlurDegree .This parameter takes effect only when the type of the custom background image is BackgroundBlur. */ blur_degree?: BackgroundBlurDegree; } @@ -4574,15 +4574,15 @@ export enum ConfigFetchType { } /** - * The information about the media streams to be recorded. + * @ignore */ export class RecorderStreamInfo { /** - * The name of the channel in which the media streams publish. + * @ignore */ channelId?: string; /** - * The ID of the user whose media streams you want to record. + * @ignore */ uid?: number; } diff --git a/ts/Private/AgoraMediaBase.ts b/ts/Private/AgoraMediaBase.ts index 5f668daee..c0356f768 100644 --- a/ts/Private/AgoraMediaBase.ts +++ b/ts/Private/AgoraMediaBase.ts @@ -58,19 +58,19 @@ export enum VideoSourceType { */ VideoSourceTranscoded = 10, /** - * @ignore + * 11: The third camera. */ VideoSourceCameraThird = 11, /** - * @ignore + * 12:The fourth camera. */ VideoSourceCameraFourth = 12, /** - * @ignore + * 13:The third screen. */ VideoSourceScreenThird = 13, /** - * @ignore + * 14:The fourth screen. */ VideoSourceScreenFourth = 14, /** @@ -824,8 +824,8 @@ export interface IAudioFrameObserverBase { onRecordAudioFrame?(channelId: string, audioFrame: AudioFrame): boolean; /** - * Gets the captured audio frame. - * To ensure that the data format of captured audio frame is as expected, Agora recommends that you set the audio data format as follows: After calling setRecordingAudioFrameParameters to set the audio data format, call registerAudioFrameObserver to register the audio observer object, the SDK will calculate the sampling interval according to the parameters set in this method, and triggers the onRecordAudioFrame callback according to the sampling interval. + * Gets the raw audio frame for playback. + * To ensure that the data format of audio frame for playback is as expected, Agora recommends that you set the audio data format as follows: After calling setPlaybackAudioFrameParameters to set the audio data format and registerAudioFrameObserver to register the audio frame observer object, the SDK calculates the sampling interval according to the parameters set in the methods, and triggers the onPlaybackAudioFrame callback according to the sampling interval. * * @param channelId The channel ID. * @param audioFrame The raw audio data. See AudioFrame . @@ -836,8 +836,8 @@ export interface IAudioFrameObserverBase { onPlaybackAudioFrame?(channelId: string, audioFrame: AudioFrame): boolean; /** - * Gets the captured audio frame. - * To ensure that the data format of captured audio frame is as expected, Agora recommends that you set the audio data format as follows: After calling setRecordingAudioFrameParameters to set the audio data format, call registerAudioFrameObserver to register the audio observer object, the SDK will calculate the sampling interval according to the parameters set in this method, and triggers the onRecordAudioFrame callback according to the sampling interval. + * Retrieves the mixed captured and playback audio frame. + * To ensure that the data format of mixed captured and playback audio frame meets the expectations, Agora recommends that you set the data format as follows: After calling setMixedAudioFrameParameters to set the audio data format and registerAudioFrameObserver to register the audio frame observer object, the SDK calculates the sampling interval according to the parameters set in the methods, and triggers the onMixedAudioFrame callback according to the sampling interval. * * @param channelId The channel ID. * @param audioFrame The raw audio data. See AudioFrame . @@ -997,14 +997,20 @@ export interface IVideoFrameObserver { ): boolean; /** - * Occurs each time the SDK receives a video frame captured by the local camera. - * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.Once the pre-processing is complete, you can directly modify videoFrame in this callback, and set the return value to true to send the modified video data to the SDK.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.If the video data type you get is RGBA, the SDK does not support processing the data of the alpha channel. + * Occurs each time the SDK receives a video frame before encoding. + * After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced. * * @param sourceType The type of the video source. See VideoSourceType . - * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows:macOS: YUV 420Windows: YUV 420 + * @param videoFrame The video frame. See VideoFrame .The default value of the video frame data format obtained through this callback is as follows: + * macOS: YUV 420 + * Windows: YUV 420 * * @returns - * When the video processing mode is ProcessModeReadOnly:true: Reserved for future use.false: Reserved for future use.When the video processing mode is ProcessModeReadWrite:true: Sets the SDK to receive the video frame.false: Sets the SDK to discard the video frame. + * When the video processing mode is ProcessModeReadOnly: + * true: Reserved for future use. + * false: Reserved for future use. When the video processing mode is ProcessModeReadWrite: + * true: Sets the SDK to receive the video frame. + * false: Sets the SDK to discard the video frame. */ onPreEncodeVideoFrame?( sourceType: VideoSourceType, @@ -1129,61 +1135,55 @@ export enum RecorderErrorCode { } /** - * The recording configuration. + * @ignore */ export class MediaRecorderConfiguration { /** - * The absolute path (including the filename extensions) of the recording file. For example:Windows: C:\Users\\AppData\Local\Agora\\example.mp4macOS: ~/Library/Logs/example.mp4Ensure that the directory for the log files exists and is writable. + * @ignore */ storagePath?: string; /** - * The format of the recording file. See MediaRecorderContainerFormat . + * @ignore */ containerFormat?: MediaRecorderContainerFormat; /** - * The recording content. See MediaRecorderStreamType . + * @ignore */ streamType?: MediaRecorderStreamType; /** - * The maximum recording duration, in milliseconds. The default value is 120000. + * @ignore */ maxDurationMs?: number; /** - * The interval (ms) of updating the recording information. The value range is [1000,10000]. Based on the value you set in this parameter, the SDK triggers the onRecorderInfoUpdated callback to report the updated recording information. + * @ignore */ recorderInfoUpdateInterval?: number; } /** - * The information about the file that is recorded. + * @ignore */ export class RecorderInfo { /** - * The absolute path of the recording file. + * @ignore */ fileName?: string; /** - * The recording duration (ms). + * @ignore */ durationMs?: number; /** - * The size (byte) of the recording file. + * @ignore */ fileSize?: number; } /** - * Provides callback events for audio and video recording. + * @ignore */ export interface IMediaRecorderObserver { /** - * Occurs when the recording state changes. - * When the recording state changes, the SDK triggers this callback to report the current recording state and the reason for the change. - * - * @param channelId The channel name. - * @param uid The user ID. - * @param state The current recording state. See RecorderState . - * @param error The reason for the state change. See RecorderErrorCode . + * @ignore */ onRecorderStateChanged?( channelId: string, @@ -1193,12 +1193,7 @@ export interface IMediaRecorderObserver { ): void; /** - * Occurs when the recording information is updated. - * After you successfully enable the audio and video recording, the SDK periodically triggers this callback based on the value of recorderInfoUpdateInterval set in MediaRecorderConfiguration . This callback reports the file name, duration, and size of the current recording file. - * - * @param channelId The channel name. - * @param uid The user ID. - * @param info The information about the file that is recorded. See RecorderInfo . + * @ignore */ onRecorderInfoUpdated?( channelId: string, diff --git a/ts/Private/IAgoraMediaEngine.ts b/ts/Private/IAgoraMediaEngine.ts index 37bb8a770..0bcc1ca20 100644 --- a/ts/Private/IAgoraMediaEngine.ts +++ b/ts/Private/IAgoraMediaEngine.ts @@ -144,13 +144,13 @@ export abstract class IMediaEngine { /** * Creates a customized audio track. - * When you need to publish multiple custom captured videos in the channel, you can refer to the following steps:Call this method to create a video track and get the video track ID.In ChannelMediaOptions of each channel, set customVideoTrackId to the video track ID that you want to publish, and set publishCustomVideoTrack to true.If you call pushAudioFrame trackId as the video track ID set in step 2, you can publish the corresponding custom video source in multiple channels. + * When you need to publish multiple custom captured audios in the channel, you can refer to the following steps:Call this method to create a custom audio track and get the audio track ID.In ChannelMediaOptions of each channel, set publishCustomAduioTrackId to the audio track ID that you want to publish, and set publishCustomAudioTrack to true.If you call pushAudioFrame trackId as the audio track ID set in step 2, you can publish the corresponding custom audio source in multiple channels. * * @param trackType The type of the custom audio track. See AudioTrackType . * @param config The configuration of the custom audio track. See AudioTrackConfig . * * @returns - * If the method call is successful, the video track ID is returned as the unique identifier of the video track.If the method call fails, a negative value is returned. + * If the method call is successful, the audio track ID is returned as the unique identifier of the audio track.If the method call fails, a negative value is returned. */ abstract createCustomAudioTrack( trackType: AudioTrackType, @@ -158,7 +158,7 @@ export abstract class IMediaEngine { ): number; /** - * Destroys the specified video track. + * Destroys the specified audio track. * * @param trackId The custom audio track ID returned in createCustomAudioTrack . * diff --git a/ts/Private/IAgoraMediaPlayer.ts b/ts/Private/IAgoraMediaPlayer.ts index 945793b65..a6e00e41c 100644 --- a/ts/Private/IAgoraMediaPlayer.ts +++ b/ts/Private/IAgoraMediaPlayer.ts @@ -175,20 +175,13 @@ export abstract class IMediaPlayer { abstract selectAudioTrack(index: number): number; /** - * Sets the private options for the media player. - * The media player supports setting private options by key and value. Under normal circumstances, you do not need to know the private option settings, and just use the default option settings.Ensure that you call this method before open .If you need to push streams with SEI into the CDN, call setPlayerOptionInInt("sei_data_with_uuid", 1); otherwise, the loss of SEI might occurs. - * - * @param key The key of the option. - * @param value The value of the key. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setPlayerOptionInInt(key: string, value: number): number; /** * Sets the private options for the media player. - * The media player supports setting private options by key and value. Under normal circumstances, you do not need to know the private option settings, and just use the default option settings.Ensure that you call this method before open .If you need to push streams with SEI into the CDN, call setPlayerOptionInInt("sei_data_with_uuid", 1); otherwise, the loss of SEI might occurs. + * The media player supports setting private options by key and value. Under normal circumstances, you do not need to know the private option settings, and just use the default option settings.Ensure that you call this method before open .If you need to push streams with SEI into the CDN, call setPlayerOptionInString("sei_data_with_uuid", 1); otherwise, the loss of SEI might occurs. * * @param key The key of the option. * @param value The value of the key. @@ -204,24 +197,12 @@ export abstract class IMediaPlayer { abstract takeScreenshot(filename: string): number; /** - * Gets the detailed information of the media stream. - * Call this method after calling getStreamCount . - * - * @param index The index of the media stream. - * - * @returns - * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. + * @ignore */ abstract selectInternalSubtitle(index: number): number; /** - * Stops pushing media streams to a CDN. - * Agora recommends that you use the server-side Media Push function. You can call this method to stop the live stream on the specified CDN address. This method can stop pushing media streams to only one CDN address at a time, so if you need to stop pushing streams to multiple addresses, call this method multiple times.After you call this method, the SDK triggers the onRtmpStreamingStateChanged callback on the local client to report the state of the streaming. - * - * @param url The address of Media Push. The format is RTMP or RTMPS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setExternalSubtitle(url: string): number; @@ -289,9 +270,10 @@ export abstract class IMediaPlayer { abstract getPublishSignalVolume(): number; /** - * Destroys a video renderer object. + * Sets the view. * - * @param view The HTMLElement object to be destroyed. + * @returns + * 0: Success.< 0: Failure. */ abstract setView(view: any): number; @@ -387,12 +369,7 @@ export abstract class IMediaPlayer { ): number; /** - * Unregisters the video frame observer. - * - * @param observer The video observer, reporting the reception of each video frame. See IVideoFrameObserver . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract unregisterMediaPlayerAudioSpectrumObserver( observer: IAudioSpectrumObserver diff --git a/ts/Private/IAgoraMediaRecorder.ts b/ts/Private/IAgoraMediaRecorder.ts index 605461302..9422caa95 100644 --- a/ts/Private/IAgoraMediaRecorder.ts +++ b/ts/Private/IAgoraMediaRecorder.ts @@ -5,37 +5,21 @@ import { } from './AgoraMediaBase'; /** - * This class provides APIs for local and remote recording. + * @ignore */ export abstract class IMediaRecorder { /** - * Registers one IMediaRecorderObserver oberver. - * This method is used to set the callbacks of audio and video recording, so as to notify the app of the recording status and information of the audio and video stream during recording.Before calling this method, ensure the following:The IRtcEngine object is created and initialized.The recording object is created through createMediaRecorder . - * - * @param callback The callbacks for recording audio and video streams. See IMediaRecorderObserver . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setMediaRecorderObserver(callback: IMediaRecorderObserver): number; /** - * Starts recording audio and video streams. - * You can call this method to enable the recording function. Agora supports recording the media streams of local and remote users at the same time.Before you call this method, ensure the following:The recording object is created through createMediaRecorder .The recording observer is registered through setMediaRecorderObserver .You have joined the channel which the remote user that you want to record is in.Supported formats of recording are listed as below:AAC-encoded audio captured by the microphone.Video captured by a camera and encoded in H.264 or H.265.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the onRecorderStateChanged(RecorderStateError, RecorderErrorNoStream) callback.If you want to record the media streams of the local user, ensure the role of the local user is set as broadcaster.If you want to record the media streams of a remote user, ensure you have subscribed to the user's media streams before starting the recording. - * - * @param config The recording configuration. See MediaRecorderConfiguration . - * - * @returns - * 0: Success.< 0: Failure.-2: The parameter is invalid. Ensure the following:The specified path of the recording file exists and is writable.The specified format of the recording file is supported.The maximum recording duration is correctly set.-4: IRtcEngine does not support the request. The recording is ongoing or the recording stops because an error occurs.-7: The method is called before IRtcEngine is initialized. Ensure the IMediaRecorder object is created before calling this method. + * @ignore */ abstract startRecording(config: MediaRecorderConfiguration): number; /** - * Stops recording audio and video streams. - * After calling startRecording , if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable. - * - * @returns - * 0: Success.< 0: Failure.-7: The method is called before IRtcEngine is initialized. Ensure the IMediaRecorder object is created before calling this method. + * @ignore */ abstract stopRecording(): number; } diff --git a/ts/Private/IAgoraMusicContentCenter.ts b/ts/Private/IAgoraMusicContentCenter.ts index bc05f5d0b..fc7f580cc 100644 --- a/ts/Private/IAgoraMusicContentCenter.ts +++ b/ts/Private/IAgoraMusicContentCenter.ts @@ -109,13 +109,7 @@ export abstract class MusicChartCollection { abstract getCount(): number; /** - * Gets the detailed information of the media stream. - * Call this method after calling getStreamCount . - * - * @param index The index of the media stream. - * - * @returns - * If the call succeeds, returns the detailed information of the media stream. See PlayerStreamInfo .If the call fails, returns NULL. + * @ignore */ abstract get(index: number): MusicChartInfo; } diff --git a/ts/Private/IAgoraRtcEngine.ts b/ts/Private/IAgoraRtcEngine.ts index 67636e1c4..1956d3a80 100644 --- a/ts/Private/IAgoraRtcEngine.ts +++ b/ts/Private/IAgoraRtcEngine.ts @@ -1303,9 +1303,10 @@ export interface IRtcEngineEventHandler { onJoinChannelSuccess?(connection: RtcConnection, elapsed: number): void; /** - * Occurs when the first video frame is published. - * The SDK triggers this callback under one of the following circumstances:The local client enables the video module and calls joinChannel successfully.The local client calls muteLocalVideoStream (true) and muteLocalVideoStream(false) in sequence.The local client calls disableVideo and enableVideo in sequence. + * Occurs when a user rejoins the channel. + * When a user loses connection with the server because of network problems, the SDK automatically tries to reconnect and triggers this callback upon reconnection. * + * @param uid The ID of the user who rejoins the channel. * @param connection The connection information. See RtcConnection . * @param elapsed Time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. */ @@ -1313,13 +1314,13 @@ export interface IRtcEngineEventHandler { /** * Reports the proxy connection state. - * You can use this callback to listen for the state of the SDK connecting to a proxy. For example, when a user calls setCloudProxy and joins a channel successfully, the SDK triggers this callback to report the user ID, the proxy type connected, and the time elapsed fromthe user calling until this callback is triggered. + * You can use this callback to listen for the state of the SDK connecting to a proxy. For example, when a user calls setCloudProxy and joins a channel successfully, the SDK triggers this callback to report the user ID, the proxy type connected, and the time elapsed fromthe user calling joinChannel until this callback is triggered. * * @param channel The channel name. * @param uid The user ID. * @param proxyType The proxy type connected. See CloudProxyType . * @param localProxyIp Reserved for future use. - * @param elapsed The time elapsed (ms) from the user calling until this callback is triggered. + * @param elapsed The time elapsed (ms) from the user calling joinChannel until this callback is triggered. */ onProxyConnected?( channel: string, @@ -1399,11 +1400,11 @@ export interface IRtcEngineEventHandler { onRtcStats?(connection: RtcConnection, stats: RtcStats): void; /** - * Occurs when the video device state changes. - * This callback reports the change of system video devices, such as being unplugged or removed. On a Windows device with an external camera for video capturing, the video disables once the external camera is unplugged. + * Occurs when the audio device state changes. + * This callback notifies the application that the system's audio device state is changed. For example, a headset is unplugged from the device. * * @param deviceId The device ID. - * @param deviceType Media device types. See MediaDeviceType . + * @param deviceType The device type. See MediaDeviceType . * @param deviceState Media device states. */ onAudioDeviceStateChanged?( @@ -1468,15 +1469,7 @@ export interface IRtcEngineEventHandler { ): void; /** - * Enables tracing the video frame rendering process. - * By default, the SDK starts tracing the video rendering event automatically when the local user successfully joins the channel. You can call this method at an appropriate time according to the actual application scenario to customize the tracing process. - * After the local user leaves the current channel, the SDK automatically resets the time point to the next time when the user successfully joins the channel. - * The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the onVideoRenderingTracingResult callback. - * - * @param connection The connection information. See RtcConnection . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ onIntraRequestReceived?(connection: RtcConnection): void; @@ -1489,10 +1482,7 @@ export interface IRtcEngineEventHandler { onUplinkNetworkInfoUpdated?(info: UplinkNetworkInfo): void; /** - * Occurs when the uplink network information changes. - * The SDK triggers this callback when the uplink network information changes.This callback only applies to scenarios where you push externally encoded video data in H.264 format to the SDK. - * - * @param info The uplink network information. See UplinkNetworkInfo . + * @ignore */ onDownlinkNetworkInfoUpdated?(info: DownlinkNetworkInfo): void; @@ -1602,8 +1592,7 @@ export interface IRtcEngineEventHandler { ): void; /** - * Occurs when the first remote video frame is received and decoded. - * The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the video stream.The remote user stops sending the video stream and re-sends it after 15 seconds. Reasons for such an interruption include:The remote user leaves the channel.The remote user drops offline.The remote user calls muteLocalVideoStream to stop sending the video stream.The remote user calls disableVideo to disable video. + * Occurs when the renderer receives the first frame of the remote video. * * @param connection The connection information. See RtcConnection . * @param remoteUid The user ID of the remote user sending the video stream. @@ -1902,7 +1891,7 @@ export interface IRtcEngineEventHandler { /** * Occurs when the first audio frame is published. - * The SDK triggers this callback under one of the following circumstances:The local client enables the audio module and calls joinChannel successfully.The local client calls muteLocalAudioStream (true) and muteLocalAudioStreamfalse() in sequence.The local client calls disableAudio and enableAudio in sequence. + * The SDK triggers this callback under one of the following circumstances:The local client enables the audio module and calls joinChannel successfully.The local client calls muteLocalAudioStream (true) and muteLocalAudioStream(false) in sequence.The local client calls disableAudio and enableAudio in sequence. * * @param connection The connection information. See RtcConnection . * @param elapsed Time elapsed (ms) from the local user calling joinChannel until the SDK triggers this callback. @@ -2337,8 +2326,8 @@ export interface IRtcEngineEventHandler { onExtensionStarted?(provider: string, extension: string): void; /** - * Occurs when the extension is enabled. - * After a successful call of enableExtension (true), the extension triggers this callback. + * Occurs when the extension is disabled. + * After a successful call of enableExtension (false), this callback is triggered. * * @param provider The name of the extension provider. * @param extension The name of the extension. @@ -2679,7 +2668,12 @@ export class DirectCdnStreamingStats { */ export interface IDirectCdnStreamingEventHandler { /** - * @ignore + * Occurs when the CDN streaming state changes. + * When the host directly pushes streams to the CDN, if the streaming state changes, the SDK triggers this callback to report the changed streaming state, error codes, and other information. You can troubleshoot issues by referring to this callback. + * + * @param state The current CDN streaming state. See DirectCdnStreamingState . + * @param error The CDN streaming error. See DirectCdnStreamingError . + * @param message The information about the changed streaming state. */ onDirectCdnStreamingStateChanged?( state: DirectCdnStreamingState, @@ -2688,7 +2682,10 @@ export interface IDirectCdnStreamingEventHandler { ): void; /** - * @ignore + * Reports the CDN streaming statistics. + * When the host directly pushes media streams to the CDN, the SDK triggers this callback every one second. + * + * @param stats The statistics of the current CDN streaming. See DirectCdnStreamingStats . */ onDirectCdnStreamingStats?(stats: DirectCdnStreamingStats): void; } @@ -2879,10 +2876,10 @@ export abstract class IRtcEngine { ): number; /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. + * Starts an audio device loopback test. + * To test whether the user's local sending and receiving streams are normal, you can call this method to perform an audio and video call loop test, which tests whether the audio and video devices and the user's upstream and downstream networks are working properly.After starting the test, the user needs to make a sound or face the camera. The audio or video is output after about two seconds. If the audio playback is normal, the audio device and the user's upstream and downstream networks are working properly; if the video playback is normal, the video device and the user's upstream and downstream networks are working properly.You can call this method either before or after joining a channel.After calling this method, call stopEchoTest to end the test; otherwise, the user cannot perform the next audio and video call loop test and cannot join the channel.In live streaming scenarios, this method only applies to hosts. * - * @param config Video profile. See VideoEncoderConfiguration . + * @param config The configuration of the audio and video call loop test. See EchoTestConfiguration . * * @returns * 0: Success.< 0: Failure. @@ -2986,12 +2983,12 @@ export abstract class IRtcEngine { ): number; /** - * Sets low-light enhancement. - * The low-light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .Dark light enhancement has certain requirements for equipment performance. The low-light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-light enhancement, Agora recommends modifying the low-light enhancement options to a less performance-consuming level or disabling low-light enhancement entirely.Both this method and setExtensionProperty can turn on low-light enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Sets the image enhancement options. + * Enables or disables image enhancement, and sets the options.Call this method before calling enableVideo or .This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * - * @param enabled Whether to enable low-light enhancement function:true: Enable low-light enhancement function.false: (Default) Disable low-light enhancement function. - * @param options The low-light enhancement options. See LowlightEnhanceOptions . - * @param type The type of the video source. See MediaSourceType . + * @param enabled Whether to enable the image enhancement function:true: Enable the image enhancement function.false: (Default) Disable the image enhancement function. + * @param options The image enhancement options. See BeautyOptions . + * @param type The type of the video source, see MediaSourceType . * * @returns * 0: Success.< 0: Failure. @@ -3020,11 +3017,11 @@ export abstract class IRtcEngine { ): number; /** - * Sets low-light enhancement. - * The low-light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .Dark light enhancement has certain requirements for equipment performance. The low-light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-light enhancement, Agora recommends modifying the low-light enhancement options to a less performance-consuming level or disabling low-light enhancement entirely.Both this method and setExtensionProperty can turn on low-light enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Sets video noise reduction. + * Underlit environments and low-end video capture devices can cause video images to contain significant noise, which affects video quality. In real-time interactive scenarios, video noise also consumes bitstream resources and reduces encoding efficiency during encoding.You can call this method to enable the video noise reduction feature and set the options of the video noise reduction effect.Call this method after calling enableVideo .Video noise reduction has certain requirements for equipment performance. If your device overheats after you enable video noise reduction, Agora recommends modifying the video noise reduction options to a less performance-consuming level or disabling video noise reduction entirely.Both this method and setExtensionProperty can turn on video noise reduction function:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * - * @param enabled Whether to enable low-light enhancement function:true: Enable low-light enhancement function.false: (Default) Disable low-light enhancement function. - * @param options The low-light enhancement options. See LowlightEnhanceOptions . + * @param enabled Whether to enable video noise reduction:true: Enable video noise reduction.false: (Default) Disable video noise reduction. + * @param options The video noise reduction options. See VideoDenoiserOptions . * @param type The type of the video source. See MediaSourceType . * * @returns @@ -3037,11 +3034,11 @@ export abstract class IRtcEngine { ): number; /** - * Sets low-light enhancement. - * The low-light enhancement feature can adaptively adjust the brightness value of the video captured in situations with low or uneven lighting, such as backlit, cloudy, or dark scenes. It restores or highlights the image details and improves the overall visual effect of the video.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .Dark light enhancement has certain requirements for equipment performance. The low-light enhancement feature has certain performance requirements on devices. If your device overheats after you enable low-light enhancement, Agora recommends modifying the low-light enhancement options to a less performance-consuming level or disabling low-light enhancement entirely.Both this method and setExtensionProperty can turn on low-light enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. + * Sets color enhancement. + * The video images captured by the camera can have color distortion. The color enhancement feature intelligently adjusts video characteristics such as saturation and contrast to enhance the video color richness and color reproduction, making the video more vivid.You can call this method to enable the color enhancement feature and set the options of the color enhancement effect.Call this method after calling enableVideo .The color enhancement feature has certain performance requirements on devices. With color enhancement turned on, Agora recommends that you change the color enhancement level to one that consumes less performance or turn off color enhancement if your device is experiencing severe heat problems.Both this method and setExtensionProperty can enable color enhancement:When you use the SDK to capture video, Agora recommends this method (this method only works for video captured by the SDK).When you use an external video source to implement custom video capture, or send an external video source to the SDK, Agora recommends using setExtensionProperty.This method relies on the video enhancement dynamic library libagora_clear_vision_extension.dll. If the dynamic library is deleted, the function cannot be enabled normally. * - * @param enabled Whether to enable low-light enhancement function:true: Enable low-light enhancement function.false: (Default) Disable low-light enhancement function. - * @param options The low-light enhancement options. See LowlightEnhanceOptions . + * @param enabled Whether to enable color enhancement:true Enable color enhancement.false: (Default) Disable color enhancement. + * @param options The color enhancement options. See ColorEnhanceOptions . * @param type The type of the video source. See MediaSourceType . * * @returns @@ -3183,13 +3180,7 @@ export abstract class IRtcEngine { abstract muteAllRemoteAudioStreams(mute: boolean): number; /** - * Stops or resumes publishing the local audio stream. - * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. - * - * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. - * - * @returns - * 0: Success. < 0: Failure. + * @ignore */ abstract setDefaultMuteAllRemoteAudioStreams(mute: boolean): number; @@ -3239,13 +3230,7 @@ export abstract class IRtcEngine { abstract muteAllRemoteVideoStreams(mute: boolean): number; /** - * Stops or resumes publishing the local audio stream. - * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. - * - * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. - * - * @returns - * 0: Success. < 0: Failure. + * @ignore */ abstract setDefaultMuteAllRemoteVideoStreams(mute: boolean): number; @@ -3354,13 +3339,10 @@ export abstract class IRtcEngine { ): number; /** - * Set the blocklist of subscriptions for video streams. - * You can call this method to specify the video streams of a user that you do not want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. - * Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. - * You can call this method either before or after joining a channel. - * The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . + * Set the allowlist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * - * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * * @returns @@ -3438,24 +3420,12 @@ export abstract class IRtcEngine { abstract destroyMediaPlayer(mediaPlayer: IMediaPlayer): number; /** - * Creates a recording object for audio and video recording. - * Before you start recording, you need to call this method to create a recording object. Agora SDKs support recording the audio and video streams of both local and remote users. You can call this method as needed to create muitiple recording objects and specify the streams that you want to record through the info parameter.After successfully creating a recording object, you need to call setMediaRecorderObserver to register a recording observer to listen for recording callbacks, and then call startRecording to start recording. - * - * @param info The information about the media streams you want to record. See RecorderStreamInfo . - * - * @returns - * The IMediaRecorder object, if the method call succeeds.An empty pointer, if the method call fails. + * @ignore */ abstract createMediaRecorder(info: RecorderStreamInfo): IMediaRecorder; /** - * Destroys a recording object for audio and video recording. - * When you do not need to record any audio and video streams, you can call this method to destroy the recording object. Before you call this method, if you are recording a media stream, you need to call stopRecording to stop recording. - * - * @param mediaRecorder The recording object to be destroyed. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract destroyMediaRecorder(mediaRecorder: IMediaRecorder): number; @@ -3965,15 +3935,7 @@ export abstract class IRtcEngine { ): number; /** - * Sets parameters for SDK preset audio effects. - * Call this method to set the following parameters for the local user who sends an audio stream:3D voice effect: Sets the cycle period of the 3D voice effect.Pitch correction effect: Sets the basic mode and tonic pitch of the pitch correction effect. Different songs have different modes and tonic pitches. Agora recommends bounding this method with interface elements to enable users to adjust the pitch correction interactively.After setting the audio parameters, all users in the channel can hear the effect.You can call this method either before or after joining a channel.To get better audio effect quality, Agora recommends setting the scenario parameter of setAudioProfile as AudioScenarioGameStreaming(3) before calling this method.Do not set the profile parameter in setAudioProfile to AudioProfileSpeechStandard(1)AudioProfileIot or (6), or the method does not take effect.This method has the best effect on human voice processing, and Agora does not recommend calling this method to process audio data containing music.After calling setAudioEffectParameters, Agora does not recommend you to call the following methods, otherwise the effect set by setAudioEffectParameters will be overwritten: setAudioEffectPreset setVoiceBeautifierPreset setLocalVoicePitch setLocalVoiceEqualization setLocalVoiceReverb setVoiceBeautifierParameters setVoiceConversionPreset - * - * @param preset The options for SDK preset audio effects:RoomAcoustics3dVoice, 3D voice effect:Call setAudioProfile and set the profile parameter in to AudioProfileMusicStandardStereo(3) or AudioProfileMusicHighQualityStereo(5) before setting this enumerator; otherwise, the enumerator setting does not take effect.If the 3D voice effect is enabled, users need to use stereo audio playback devices to hear the anticipated voice effect.PitchCorrection, Pitch correction effect: To achieve better audio effect quality, Agora recommends setting the profile parameter in setAudioProfile to AudioProfileMusicHighQuality(4) or AudioProfileMusicHighQualityStereo(5) before setting this enumerator. - * @param param1 If you set preset to RoomAcoustics3dVoice, param1 sets the cycle period of the 3D voice effect. The value range is [1,60] and the unit is seconds. The default value is 10, indicating that the voice moves around you every 10 seconds.If you set preset to PitchCorrection, param1 indicates the basic mode of the pitch correction effect:1: (Default) Natural major scale.2: Natural minor scale.3: Japanese pentatonic scale. - * @param param2 If you set preset to RoomAcoustics3dVoice , you need to set param2 to 0.If you set preset to PitchCorrection, param2 indicates the tonic pitch of the pitch correction effect:1: A2: A#3: B4: (Default) C5: C#6: D7: D#8: E9: F10: F#11: G12: G# - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setVoiceConversionParameters( preset: VoiceConversionPreset, @@ -4308,9 +4270,8 @@ export abstract class IRtcEngine { ): number; /** - * Unregisters the video frame observer. - * - * @param observer The video observer, reporting the reception of each video frame. See IVideoFrameObserver . + * Unregisters the audio spectrum observer. + * After calling registerAudioSpectrumObserver , if you want to disable audio spectrum monitoring, you can call this method.You can call this method either before or after joining a channel. * * @returns * 0: Success.< 0: Failure. @@ -4554,13 +4515,7 @@ export abstract class IRtcEngine { ): string; /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setCameraCapturerConfiguration( config: CameraCapturerConfiguration @@ -4591,12 +4546,7 @@ export abstract class IRtcEngine { abstract destroyCustomVideoTrack(videoTrackId: number): number; /** - * Destroys the specified video track. - * - * @param videoTrackId The video track ID returned by calling the createCustomVideoTrack method. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract destroyCustomEncodedVideoTrack(videoTrackId: number): number; @@ -4825,15 +4775,7 @@ export abstract class IRtcEngine { ): number; /** - * Updates the screen capturing parameters. - * Call this method after starting screen sharing or window sharing. - * - * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters - * - * @returns - * 0: Success.< 0: Failure. - * -2: The parameter is invalid. - * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * @ignore */ abstract startScreenCapture(captureParams: ScreenCaptureParameters2): number; @@ -4850,15 +4792,7 @@ export abstract class IRtcEngine { ): number; /** - * Updates the screen capturing parameters. - * Call this method after starting screen sharing or window sharing. - * - * @param captureParams The screen sharing encoding parameters. The default video resolution is 1920 × 1080, that is, 2,073,600 pixels. Agora uses the value of this parameter to calculate the charges. See ScreenCaptureParameters - * - * @returns - * 0: Success.< 0: Failure. - * -2: The parameter is invalid. - * -8: The screen sharing state is invalid. Probably because you have shared other screens or windows. Try calling stopScreenCapture to stop the current sharing and start sharing the screen again. + * @ignore */ abstract updateScreenCapture(captureParams: ScreenCaptureParameters2): number; @@ -5023,7 +4957,7 @@ export abstract class IRtcEngine { * Starts camera capture. * You can call this method to start capturing video from one or more cameras by specifying sourceType. * - * @param sourceType The type of the video source. See VideoSourceType .On Windows and macOS platforms, you can capture video from up to 4 cameras. + * @param sourceType The type of the video source. See VideoSourceType .On the desktop platforms, you can capture video from up to 4 cameras. * @param config The configuration of the video capture. See CameraCapturerConfiguration . */ abstract startCameraCapture( @@ -5058,14 +4992,7 @@ export abstract class IRtcEngine { ): number; /** - * Sets the rotation angle of the captured video. - * This method applies to Windows only.When the video capture device does not have the gravity sensing function, you can call this method to manually adjust the rotation angle of the captured video. - * - * @param type The video source type. See VideoSourceType . - * @param orientation The clockwise rotation angle. See VideoOrientation . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setScreenCaptureOrientation( type: VideoSourceType, @@ -5287,7 +5214,7 @@ export abstract class IRtcEngine { /** * Sets whether to enable the AI ​​noise reduction function and set the noise reduction mode. - * You can call this method to enable AI noise reduction function. Once enabled, the SDK automatically detects and reduce stationary and non-stationary noises from your audio on the premise of ensuring the quality of human voice. Stationary noises refers to noise signal with constant average statistical properties and negligibly small fluctuations of level within the period of observation. Common sources of stationary noises are:Television;Air conditioner;Machinery, etc.Non-stationary noises refers to noise signal with huge fluctuations of level within the period of observation, Common source of non-stationary noises are:Thunder;Explosion;Cracking, etc. + * You can call this method to enable AI noise reduction function. Once enabled, the SDK automatically detects and reduces stationary and non-stationary noise from your audio on the premise of ensuring the quality of human voice. Stationary noise refers to noise signal with constant average statistical properties and negligibly small fluctuations of level within the period of observation. Common sources of stationary noises are:Television;Air conditioner;Machinery, etc.Non-stationary noise refers to noise signal with huge fluctuations of level within the period of observation. Common sources of non-stationary noises are:Thunder;Explosion;Cracking, etc. * * @param enabled Whether to enable the AI noise reduction function:true: Enable the AI noise reduction.false: (Default) Disable the AI noise reduction. * @param mode The AI noise reduction modes. See AudioAinsMode . @@ -5314,12 +5241,25 @@ export abstract class IRtcEngine { * This method allows a user to join the channel with the user account. After the user successfully joins the channel, the SDK triggers the following callbacks:The local client: onLocalUserRegistered , onJoinChannelSuccess and onConnectionStateChanged callbacks.The remote client: The onUserJoined callback, if the user is in the COMMUNICATION profile, and the onUserInfoUpdated callback if the user is a host in the LIVE_BROADCASTING profile.Once a user joins the channel, the user subscribes to the audio and video streams of all the other users in the channel by default, giving rise to usage and billing calculation. To stop subscribing to a specified stream or all remote streams, call the corresponding mute methods.To ensure smooth communication, use the same parameter type to identify the user. For example, if a user joins the channel with a user ID, then ensure all the other users use the user ID too. The same applies to the user account. If a user joins the channel with the Agora Web SDK, ensure that the ID of the user is set to the same parameter type. * * @param token The token generated on your server for authentication. - * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters:All lowercase English letters: a to z.All uppercase English letters: A to Z.All numeric characters: 0 to 9.Space"!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," + * @param channelId The channel name. This parameter signifies the channel in which users engage in real-time audio and video interaction. Under the premise of the same App ID, users who fill in the same channel ID enter the same channel for audio and video interaction. The string length must be less than 64 bytes. Supported characters: + * All lowercase English letters: a to z. + * All uppercase English letters: A to Z. + * All numeric characters: 0 to 9. + * Space + * "!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," * @param userAccount The user account. This parameter is used to identify the user in the channel for real-time audio and video engagement. You need to set and manage user accounts yourself and ensure that each user account in the same channel is unique. The maximum length of this parameter is 255 bytes. Ensure that you set this parameter and do not set it as NULL. Supported characters are (89 in total):The 26 lowercase English letters: a to z.The 26 uppercase English letters: A to Z.All numeric characters: 0 to 9.Space"!", "#", "$", "%", "&", "(", ")", "+", "-", ":", ";", "<", "= ", ".", ">", "?", "@", "[", "]", "^", "_", "{", "}", "|", "~", "," * @param options The channel media options. See ChannelMediaOptions . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. + * < 0: Failure. + * -2: The parameter is invalid. For example, the token is invalid, the uid parameter is not set to an integer, or the value of a member in ChannelMediaOptions is invalid. You need to pass in a valid parameter and join the channel again. + * -3: Failes to initialize the IRtcEngine object. You need to reinitialize the IRtcEngine object. + * -7: The IRtcEngine object has not been initialized. You need to initialize the IRtcEngine object before calling this method. + * -8: The internal state of the IRtcEngine object is wrong. The typical cause is that you call this method to join the channel without calling startEchoTest to stop the test after calling stopEchoTest to start a call loop test. You need to call stopEchoTest before calling this method. + * -17: The request to join the channel is rejected. The typical cause is that the user is in the channel. Agora recommends that you use the onConnectionStateChanged callback to determine whether the user exists in the channel. Do not call this method to join the channel unless you receive the ConnectionStateDisconnected(1) state. + * -102: The channel name is invalid. You need to pass in a valid channelname in channelId to rejoin the channel. + * -121: The user ID is invalid. You need to pass in a valid user ID in uid to rejoin the channel. */ abstract joinChannelWithUserAccount( token: string, @@ -5487,13 +5427,7 @@ export abstract class IRtcEngine { abstract stopDirectCdnStreaming(): number; /** - * Sets audio advanced options. - * If you have advanced audio processing requirements, such as capturing and sending stereo audio, you can call this method to set advanced audio options.Call this method after calling joinChannel , enableAudio and enableLocalAudio . - * - * @param options The advanced options for audio. See AdvancedAudioOptions . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract updateDirectCdnStreamingMediaOptions( options: DirectCdnStreamingMediaOptions @@ -5514,13 +5448,7 @@ export abstract class IRtcEngine { abstract stopRhythmPlayer(): number; /** - * Sets the video encoder configuration. - * Sets the encoder configuration for the local video.You can call this method either before or after joining a channel. If the user does not need to reset the video encoding properties after joining the channel, Agora recommends calling this method before enableVideo to reduce the time to render the first video frame. - * - * @param config Video profile. See VideoEncoderConfiguration . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract configRhythmPlayer(config: AgoraRhythmPlayerConfig): number; @@ -5567,14 +5495,7 @@ export abstract class IRtcEngine { ): number; /** - * Adjusts the volume of the custom external audio source when it is published in the channel. - * Ensure you have called the createCustomAudioTrack method to create an external audio track before calling this method.If you want to change the volume of the audio to be published, you need to call this method again. - * - * @param trackId The audio track ID. Set this parameter to the custom audio track ID returned in createCustomAudioTrack. - * @param volume The volume of the audio source. The value can range from 0 to 100. 0 means mute; 100 means the original volume. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract adjustCustomAudioPlayoutVolume( trackId: number, diff --git a/ts/Private/IAgoraRtcEngineEx.ts b/ts/Private/IAgoraRtcEngineEx.ts index 78498a599..2d3b9aff0 100644 --- a/ts/Private/IAgoraRtcEngineEx.ts +++ b/ts/Private/IAgoraRtcEngineEx.ts @@ -70,7 +70,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { /** * Sets channel options and leaves the channel. - * This method lets the user leave the channel, for example, by hanging up or exiting the call.After calling joinChannelEx to join the channel, this method must be called to end the call before starting the next call.This method can be called whether or not a call is currently in progress. This method releases all resources related to the session.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After you leave the channel, the SDK triggers the onLeaveChannel callback.After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback.If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback.Calling will leave the channels when calling joinChannel and joinChannelEx at the same time. + * This method lets the user leave the channel, for example, by hanging up or exiting the call.After calling joinChannelEx to join the channel, this method must be called to end the call before starting the next call.This method can be called whether or not a call is currently in progress. This method releases all resources related to the session.This method call is asynchronous. When this method returns, it does not necessarily mean that the user has left the channel. After you leave the channel, the SDK triggers the onLeaveChannel callback.After actually leaving the channel, the local user triggers the onLeaveChannel callback; after the user in the communication scenario and the host in the live streaming scenario leave the channel, the remote user triggers the onUserOffline callback.If you call release immediately after calling this method, the SDK does not trigger the onLeaveChannel callback.Calling leaveChannel will leave the channels when calling joinChannel and joinChannelEx at the same time. * * @param connection The connection information. See RtcConnection . * @param options The options for leaving the channel. See LeaveChannelOptions .This parameter only supports the stopMicrophoneRecording member in the LeaveChannelOptions settings; setting other members does not take effect. @@ -102,14 +102,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Creates a data stream. - * Creates a data stream. Each user can create up to five data streams in a single channel.Compared with createDataStreamEx , this method does not support data reliability. If a data packet is not received five seconds after it was sent, the SDK directly discards the data. + * Sets the encoder configuration for the local video. + * Each configuration profile corresponds to a set of video parameters, including the resolution, frame rate, and bitrate.The config specified in this method is the maximum value under ideal network conditions. If the video engine cannot render the video using the specified config due to unreliable network conditions, the parameters further down the list are considered until a successful configuration is found. * - * @param config The configurations for the data stream. See DataStreamConfig . + * @param config Video profile. See VideoEncoderConfiguration . * @param connection The connection information. See RtcConnection . * * @returns - * ID of the created data stream, if the method call succeeds.< 0: Failure. + * 0: Success.< 0: Failure. */ abstract setVideoEncoderConfigurationEx( config: VideoEncoderConfiguration, @@ -132,15 +132,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes receiving the video stream of a specified user. - * This method is used to stop or resume receiving the video stream of a specified user. You can call this method before or after joining a channel. If a user leaves a channel, the settings in this method become invalid. + * Stops or resumes receiving the audio stream of a specified user. * - * @param uid The user ID of the remote user. - * @param mute Whether to stop receiving the video stream of the specified user:true: Stop receiving the video stream of the specified user.false: (Default) Resume receiving the video stream of the specified user. + * @param uid The ID of the specified user. + * @param mute Whether to stop receiving the audio stream of the specified user:true: Stop receiving the audio stream of the specified user.false: (Default) Resume receiving the audio stream of the specified user. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure. + * 0: Success. < 0: Failure. */ abstract muteRemoteAudioStreamEx( uid: number, @@ -183,10 +182,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes publishing the local audio stream. + * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. * @param connection The connection information. See RtcConnection . * * @returns @@ -198,14 +197,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes publishing the local video stream. + * A successful call of this method triggers the onUserMuteVideo callback on the remote client.This method does not affect any ongoing video recording, because it does not disable the camera. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop publishing the local video stream.true: Stop publishing the local video stream.false: (Default) Publish the local video stream. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteLocalVideoStreamEx( mute: boolean, @@ -228,14 +227,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . + * Stops or resumes subscribing to the video streams of all remote users. + * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including all subsequent users. * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. + * @param mute Whether to stop subscribing to the video streams of all remote users.true: Stop subscribing to the video streams of all remote users.false: (Default) Subscribe to the audio streams of all remote users by default. * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. < 0: Failure. + * 0: Success.< 0: Failure. */ abstract muteAllRemoteVideoStreamsEx( mute: boolean, @@ -243,10 +242,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * Set the blocklist of subscriptions for audio streams. + * You can call this method to specify the audio streams of a user that you do not want to subscribe to.You can call this method either before or after joining a channel.The blocklist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams , and autoSubscribeAudio in ChannelMediaOptions .Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect. * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the audio streams of a user that you do not want to subscribe to, add the user ID in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeAudioBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -277,10 +276,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * Set the blocklist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you do not want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the blocklist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.You can call this method either before or after joining a channel.The blocklist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you do not want to subscribe to.If you want to specify the video streams of a user that you do not want to subscribe to, add the user ID of that user in this list. If you want to remove a user from the blocklist, you need to call the setSubscribeVideoBlocklist method to update the user ID list; this means you only add the uid of users that you do not want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -294,10 +293,10 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Sets the allowlist of subscriptions for audio streams. - * You can call this method to specify the audio streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteAudioStream , muteAllRemoteAudioStreams and autoSubscribeAudio in ChannelMediaOptions .Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel. + * Set the allowlist of subscriptions for video streams. + * You can call this method to specify the video streams of a user that you want to subscribe to.If a user is added in the allowlist and blocklist at the same time, only the blocklist takes effect.Once the allowlist of subscriptions is set, it is effective even if you leave the current channel and rejoin the channel.You can call this method either before or after joining a channel.The allowlist is not affected by the setting in muteRemoteVideoStream , muteAllRemoteVideoStreams and autoSubscribeAudio in ChannelMediaOptions . * - * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the audio streams of a user for subscription, add the user ID in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeAudioAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. + * @param uidList The user ID list of users that you want to subscribe to.If you want to specify the video streams of a user for subscription, add the user ID of that user in this list. If you want to remove a user from the allowlist, you need to call the setSubscribeVideoAllowlist method to update the user ID list; this means you only add the uid of users that you want to subscribe to in the new user ID list. * @param uidNumber The number of users in the user ID list. * @param connection The connection information. See RtcConnection . * @@ -402,14 +401,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Stops or resumes subscribing to the audio streams of all remote users. - * After successfully calling this method, the local user stops or resumes subscribing to the audio streams of all remote users, including the ones join the channel subsequent to this call.Call this method after joining a channel.If you do not want to subscribe the audio streams of remote users before joining a channel, you can set autoSubscribeAudio as false when calling joinChannel . - * - * @param mute Whether to stop subscribing to the audio streams of all remote users:true: Stops subscribing to the audio streams of all remote users.false: (Default) Subscribes to the audio streams of all remote users by default. - * @param connection The connection information. See RtcConnection . - * - * @returns - * 0: Success. < 0: Failure. + * @ignore */ abstract muteRecordingSignalEx( mute: boolean, @@ -604,22 +596,13 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Starts pushing media streams to a CDN without transcoding. - * Ensure that you enable the Media Push service before using this function. See Enable Media Push. - * Call this method after joining a channel. - * Only hosts in the LIVE_BROADCASTING profile can call this method. - * If you want to retry pushing streams after a failed push, make sure to call stopRtmpStream first, then call this method to retry pushing streams; otherwise, the SDK returns the same error code as the last failed push. - * Agora recommends that you use the server-side Media Push function. You can call this method to push an audio or video stream to the specified CDN address. This method can push media streams to only one CDN address at a time, so if you need to push streams to multiple addresses, call this method multiple times.After you call this method, the SDK triggers the onRtmpStreamingStateChanged callback on the local client to report the state of the streaming. + * Stops pushing media streams to a CDN. + * Agora recommends that you use the server-side Media Push function. You can call this method to stop the live stream on the specified CDN address. This method can stop pushing media streams to only one CDN address at a time, so if you need to stop pushing streams to multiple addresses, call this method multiple times.After you call this method, the SDK triggers the onRtmpStreamingStateChanged callback on the local client to report the state of the streaming. * * @param url The address of Media Push. The format is RTMP or RTMPS. The character length cannot exceed 1024 bytes. Special characters such as Chinese characters are not supported. - * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success. - * < 0: Failure. - * -2: The URL is null or the string length is 0. - * -7: The SDK is not initialized before calling this method. - * -19: The Media Push URL is already in use, use another URL instead. + * 0: Success.< 0: Failure. */ abstract stopRtmpStreamEx(url: string, connection: RtcConnection): number; @@ -639,8 +622,8 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Starts relaying media streams across channels or updates channels for media relay. - * The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged callback, and this callback returns the state of the media stream relay. Common states are as follows:If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), it means that the SDK starts relaying media streams from the source channel to the destination channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. + * Starts relaying media streams across channels. This method can be used to implement scenarios such as co-host across channels. + * Deprecated:This method is deprecated. Use startOrUpdateChannelMediaRelayEx instead.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged and onChannelMediaRelayEvent callbacks, and these callbacks return the state and events of the media stream relay.If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), and the onChannelMediaRelayEvent callback returns RelayEventPacketSentToDestChannel (4), it means that the SDK starts relaying media streams between the source channel and the target channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.After a successful method call, if you want to call this method again, ensure that you call the stopChannelMediaRelayEx method to quit the current relay.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. * * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . * @param connection The connection information. See RtcConnection . @@ -654,14 +637,14 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): number; /** - * Starts relaying media streams across channels or updates channels for media relay. - * The first successful call to this method starts relaying media streams from the source channel to the destination channels. To relay the media stream to other channels, or exit one of the current media relays, you can call this method again to update the destination channels.After a successful method call, the SDK triggers the onChannelMediaRelayStateChanged callback, and this callback returns the state of the media stream relay. Common states are as follows:If the onChannelMediaRelayStateChanged callback returns RelayStateRunning (2) and RelayOk (0), it means that the SDK starts relaying media streams from the source channel to the destination channel.If the onChannelMediaRelayStateChanged callback returns RelayStateFailure (3), an exception occurs during the media stream relay.Call this method after joining the channel.This method takes effect only when you are a host in a live streaming channel.The relaying media streams across channels function needs to be enabled by contacting .Agora does not support string user accounts in this API. + * Updates the channels for media stream relay. + * Deprecated:This method is deprecated. Use startOrUpdateChannelMediaRelayEx instead.After the media relay starts, if you want to relay the media stream to more channels, or leave the current relay channel, you can call this method.After a successful method call, the SDK triggers the onChannelMediaRelayEvent callback with the RelayEventPacketUpdateDestChannel (7) state code.Call the method after successfully calling the startChannelMediaRelayEx method and receiving onChannelMediaRelayStateChanged (RelayStateRunning, RelayOk); otherwise, the method call fails. * * @param configuration The configuration of the media stream relay. See ChannelMediaRelayConfiguration . * @param connection The connection information. See RtcConnection . * * @returns - * 0: Success.< 0: Failure.-1: A general error occurs (no specified reason).-2: The parameter is invalid.-7: The method call was rejected. It may be because the SDK has not been initialized successfully, or the user role is not an host.-8: Internal state error. Probably because the user is not an audience member. + * 0: Success.< 0: Failure. */ abstract updateChannelMediaRelayEx( configuration: ChannelMediaRelayConfiguration, @@ -710,11 +693,7 @@ export abstract class IRtcEngineEx extends IRtcEngine { ): UserInfo; /** - * Occurs when the most active remote speaker is detected. - * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user whose volume is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. - * - * @param uid The user ID of the most active speaker. - * @param connection The connection information. See RtcConnection . + * @ignore */ abstract getUserInfoByUidEx(uid: number, connection: RtcConnection): UserInfo; diff --git a/ts/Private/IAgoraSpatialAudio.ts b/ts/Private/IAgoraSpatialAudio.ts index 864460008..883fc2edf 100644 --- a/ts/Private/IAgoraSpatialAudio.ts +++ b/ts/Private/IAgoraSpatialAudio.ts @@ -264,11 +264,7 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { abstract removeRemotePosition(uid: number): number; /** - * Occurs when the most active remote speaker is detected. - * After a successful call of enableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user whose volume is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the onActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker. - * - * @param uid The user ID of the most active speaker. - * @param connection The connection information. See RtcConnection . + * @ignore */ abstract removeRemotePositionEx( uid: number, @@ -285,15 +281,7 @@ export abstract class ILocalSpatialAudioEngine extends IBaseSpatialAudioEngine { abstract clearRemotePositions(): number; /** - * Enables tracing the video frame rendering process. - * By default, the SDK starts tracing the video rendering event automatically when the local user successfully joins the channel. You can call this method at an appropriate time according to the actual application scenario to customize the tracing process. - * After the local user leaves the current channel, the SDK automatically resets the time point to the next time when the user successfully joins the channel. - * The SDK starts tracing the rendering status of the video frames in the channel from the moment this method is successfully called and reports information about the event through the onVideoRenderingTracingResult callback. - * - * @param connection The connection information. See RtcConnection . - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract clearRemotePositionsEx(connection: RtcConnection): number; diff --git a/ts/Private/IAudioDeviceManager.ts b/ts/Private/IAudioDeviceManager.ts index 0aef341d0..a419723f4 100644 --- a/ts/Private/IAudioDeviceManager.ts +++ b/ts/Private/IAudioDeviceManager.ts @@ -59,13 +59,7 @@ export abstract class IAudioDeviceManager { abstract getPlaybackDeviceInfo(): AudioDeviceInfo; /** - * Adjusts the volume of audio mixing for publishing. - * This method adjusts the volume of audio mixing for publishing (sending to other users).Call this method after calling startAudioMixing and receiving the onAudioMixingStateChanged(AudioMixingStatePlaying) callback. - * - * @param volume The volume of audio mixing for local playback. The value ranges between 0 and 100 (default). 100 represents the original volume. - * - * @returns - * 0: Success.< 0: Failure. + * @ignore */ abstract setPlaybackDeviceVolume(volume: number): number; @@ -138,13 +132,7 @@ export abstract class IAudioDeviceManager { abstract getLoopbackDevice(): string; /** - * Stops or resumes publishing the local audio stream. - * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. - * - * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. - * - * @returns - * 0: Success. < 0: Failure. + * @ignore */ abstract setPlaybackDeviceMute(mute: boolean): number; @@ -154,13 +142,7 @@ export abstract class IAudioDeviceManager { abstract getPlaybackDeviceMute(): boolean; /** - * Stops or resumes publishing the local audio stream. - * This method does not affect any ongoing audio recording, because it does not disable the audio capture device. - * - * @param mute Whether to stop publishing the local audio stream:true: Stops publishing the local audio stream.false: (Default) Resumes publishing the local audio stream. - * - * @returns - * 0: Success. < 0: Failure. + * @ignore */ abstract setRecordingDeviceMute(mute: boolean): number; From d7915d1bc4c0aa606203bbc59fbbf2ad6b9a59f1 Mon Sep 17 00:00:00 2001 From: Arthas <15215604969@163.com> Date: Tue, 23 May 2023 10:38:31 +0800 Subject: [PATCH 50/74] [AUTO] Generate comments by iris-doc (#1010) Co-authored-by: Nero-Hu --- ts/Private/IAgoraMusicContentCenter.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/ts/Private/IAgoraMusicContentCenter.ts b/ts/Private/IAgoraMusicContentCenter.ts index fc7f580cc..7dad49144 100644 --- a/ts/Private/IAgoraMusicContentCenter.ts +++ b/ts/Private/IAgoraMusicContentCenter.ts @@ -377,19 +377,12 @@ export abstract class IMusicContentCenter { abstract preload(songCode: number, jsonOption?: string): number; /** - * 删除已缓存的音乐资源。 - * 你可以调用该方法删除某一已缓存的音乐资源,如需删除多个音乐资源,你可以多次调用该方法。 The cached media file currently being played will not be deleted. - * - * @param songCode 待删除的音乐资源的编号。 - * - * @returns - * 0: 方法调用成功,音乐资源已删除。< 0: Failure. + * @ignore */ abstract removeCache(songCode: number): number; /** - * 获取已缓存的音乐资源信息。 - * 当你不再需要使用已缓存的音乐资源时,你需要及时释放内存以防止内存泄漏。 + * @ignore */ abstract getCaches(): { cacheInfo: MusicCacheInfo[]; cacheInfoSize: number }; From 5d50666bb49c4fa02520d7de0b66232d32c13a4a Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 23 May 2023 15:34:16 +0800 Subject: [PATCH 51/74] chore: optimize --- .eslintrc | 4 - example/package.json | 2 +- .../LocalVideoTranscoder.tsx | 155 ++++++++++-------- .../examples/config/AuthInfoScreen/index.tsx | 7 +- example/yarn.lock | 2 +- package.json | 6 +- .../internal/AudioDeviceManagerInternal.ts | 3 +- ts/Private/internal/IrisApiEngine.ts | 37 ++--- .../LocalSpatialAudioEngineInternal.ts | 3 +- ts/Private/internal/MediaEngineInternal.ts | 11 +- ts/Private/internal/MediaPlayerInternal.ts | 10 +- ts/Private/internal/MediaRecorderInternal.ts | 11 +- .../internal/MusicContentCenterInternal.ts | 18 +- ts/Private/internal/RtcEngineExInternal.ts | 21 ++- ts/Renderer/RendererManager.ts | 2 +- 15 files changed, 154 insertions(+), 138 deletions(-) diff --git a/.eslintrc b/.eslintrc index 270c6b60a..746601a68 100644 --- a/.eslintrc +++ b/.eslintrc @@ -121,10 +121,6 @@ "pattern": "../internal/IrisApiEngine", "group": "unknown" }, - { - "pattern": "../impl/**", - "group": "unknown" - }, { "pattern": "./Private/impl/**", "group": "unknown" diff --git a/example/package.json b/example/package.json index 601707264..4fc738bc8 100644 --- a/example/package.json +++ b/example/package.json @@ -65,7 +65,7 @@ ] }, "dependencies": { - "agora-electron-sdk": "4.2.0-dev.15", + "agora-electron-sdk": "4.2.0-beta.1", "antd": "^4.20.3", "download": "^8.0.0", "ffi-napi": "^4.0.3", diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 2f9367b38..35e516ddc 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -40,8 +40,7 @@ interface State extends BaseVideoComponentState { videoDevices?: VideoDeviceInfo[]; videoDeviceId?: string[]; sources?: ScreenCaptureSourceInfo[]; - targetSource?: ScreenCaptureSourceInfo; - startScreenCapture: boolean; + targetSources?: ScreenCaptureSourceInfo[]; url: string; open: boolean; imageUrl: string; @@ -68,8 +67,7 @@ export default class LocalVideoTranscoder videoDevices: [], videoDeviceId: [], sources: [], - targetSource: undefined, - startScreenCapture: false, + targetSources: undefined, url: 'https://agora-adc-artifacts.oss-cn-beijing.aliyuncs.com/video/meta_live_mpk.mov', open: false, imageUrl: getResourcePath('agora-logo.png'), @@ -170,7 +168,7 @@ export default class LocalVideoTranscoder this.error('sourceType is invalid'); return; } - this.engine?.stopScreenCaptureBySourceType(sourceType); + this.engine?.stopCameraCapture(sourceType); }; /** @@ -184,52 +182,49 @@ export default class LocalVideoTranscoder ); this.setState({ sources, - targetSource: sources?.at(0), + targetSources: [], }); }; /** * Step 3-3 (Optional): startScreenCapture */ - startScreenCapture = () => { - const { targetSource } = this.state; - if (!targetSource) { - this.error(`targetSource is invalid`); + startScreenCapture = (targetSource: ScreenCaptureSourceInfo) => { + const sourceType = this._getVideoSourceTypeScreen(targetSource); + if (sourceType === undefined) { + this.error('sourceType is invalid'); + return; } - - this.engine?.startScreenCaptureBySourceType( - VideoSourceType.VideoSourceScreenPrimary, - { - isCaptureWindow: - targetSource!.type === - ScreenCaptureSourceType.ScreencapturesourcetypeWindow, - screenRect: { width: 0, height: 0, x: 0, y: 0 }, - windowId: targetSource!.sourceId, - displayId: targetSource!.sourceId, - params: { - dimensions: { width: 1920, height: 1080 }, - bitrate: 1000, - frameRate: 15, - captureMouseCursor: false, - windowFocus: false, - excludeWindowList: [], - excludeWindowCount: 0, - }, - - regionRect: { x: 0, y: 0, width: 0, height: 0 }, - } - ); - this.setState({ startScreenCapture: true }); + this.engine?.startScreenCaptureBySourceType(sourceType, { + isCaptureWindow: + targetSource.type === + ScreenCaptureSourceType.ScreencapturesourcetypeWindow, + screenRect: { width: 0, height: 0, x: 0, y: 0 }, + windowId: targetSource!.sourceId, + displayId: targetSource!.sourceId, + params: { + dimensions: { width: 1920, height: 1080 }, + bitrate: 1000, + frameRate: 15, + captureMouseCursor: false, + windowFocus: false, + excludeWindowList: [], + excludeWindowCount: 0, + }, + regionRect: { x: 0, y: 0, width: 0, height: 0 }, + }); }; /** * Step 3-4 (Optional): stopScreenCapture */ - stopScreenCapture = () => { - this.engine?.stopScreenCaptureBySourceType( - VideoSourceType.VideoSourceScreenPrimary - ); - this.setState({ startScreenCapture: false }); + stopScreenCapture = (targetSource: ScreenCaptureSourceInfo) => { + const sourceType = this._getVideoSourceTypeScreen(targetSource); + if (sourceType === undefined) { + this.error('sourceType is invalid'); + return; + } + this.engine?.stopScreenCaptureBySourceType(sourceType); }; /** @@ -288,17 +283,30 @@ export default class LocalVideoTranscoder }; _getVideoSourceTypeCamera = (value: string) => { - const { videoDevices } = this.state; + const { videoDeviceId } = this.state; return [ VideoSourceType.VideoSourceCameraPrimary, VideoSourceType.VideoSourceCameraSecondary, VideoSourceType.VideoSourceCameraThird, VideoSourceType.VideoSourceCameraFourth, - ][videoDevices?.findIndex(({ deviceId }) => deviceId === value) ?? -1]; + ][videoDeviceId?.findIndex((deviceId) => deviceId === value) ?? -1]; + }; + + _getVideoSourceTypeScreen = (value: ScreenCaptureSourceInfo) => { + const { targetSources } = this.state; + return [ + VideoSourceType.VideoSourceScreenPrimary, + VideoSourceType.VideoSourceScreenSecondary, + VideoSourceType.VideoSourceScreenThird, + VideoSourceType.VideoSourceScreenFourth, + ][ + targetSources?.findIndex(({ sourceId }) => sourceId === value.sourceId) ?? + -1 + ]; }; _generateLocalTranscoderConfiguration = (): LocalTranscoderConfiguration => { - const { videoDeviceId, startScreenCapture, open, imageUrl } = this.state; + const { videoDeviceId, targetSources, open, imageUrl } = this.state; const max_width = 1080, max_height = 720, width = 300, @@ -311,11 +319,11 @@ export default class LocalVideoTranscoder }); }); - if (startScreenCapture) { + targetSources?.map((v) => { streams.push({ - sourceType: VideoSourceType.VideoSourceScreenPrimary, + sourceType: this._getVideoSourceTypeScreen(v), }); - } + }); if (open) { streams.push({ @@ -384,7 +392,7 @@ export default class LocalVideoTranscoder delete state.videoDevices; delete state.videoDeviceId; delete state.sources; - delete state.targetSource; + delete state.targetSources; this.setState(state); } @@ -462,8 +470,7 @@ export default class LocalVideoTranscoder videoDevices, videoDeviceId, sources, - targetSource, - startScreenCapture, + targetSources, url, open, imageUrl, @@ -481,10 +488,14 @@ export default class LocalVideoTranscoder value={videoDeviceId} onValueChange={(value, index) => { if (videoDeviceId?.indexOf(value) === -1) { - this.startCameraCapture(value); - this.setState({ - videoDeviceId: [...videoDeviceId, value], - }); + this.setState( + { + videoDeviceId: [...videoDeviceId, value], + }, + () => { + this.startCameraCapture(value); + } + ); } else { this.stopCameraCapture(value); this.setState({ @@ -495,31 +506,43 @@ export default class LocalVideoTranscoder /> { return { value: value.sourceId!, label: value.sourceName!, }; })} - value={targetSource?.sourceId} + value={targetSources?.map(({ sourceId }) => sourceId)} onValueChange={(value, index) => { - this.setState({ targetSource: sources?.at(index) }); + if ( + targetSources?.findIndex(({ sourceId }) => sourceId === value) === + -1 + ) { + this.setState( + { + targetSources: [...targetSources, sources!.at(index)!], + }, + () => { + this.startScreenCapture(sources!.at(index)!); + } + ); + } else { + this.stopScreenCapture(sources!.at(index)!); + this.setState({ + targetSources: targetSources?.filter( + ({ sourceId }) => sourceId !== value + ), + }); + } }} /> - {targetSource ? ( + {targetSources?.map(({ sourceId, thumbImage }) => ( - ) : undefined} - + ))} { diff --git a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx index f59455889..b0de11c04 100644 --- a/example/src/renderer/examples/config/AuthInfoScreen/index.tsx +++ b/example/src/renderer/examples/config/AuthInfoScreen/index.tsx @@ -32,10 +32,9 @@ const onFinish = (values: any) => { config.logFilePath = values.SDKLogPath; - config.enableSDKLogging = values.enableSDKDebugLogging; - config.enableSDKDebugLogging = values.enableSDKLogging; - AgoraEnv.enableDebugLogging = values.enableSDKDebugLogging; - AgoraEnv.enableLogging = values.enableSDKLogging; + AgoraEnv.enableLogging = config.enableSDKLogging = values.enableSDKLogging; + AgoraEnv.enableDebugLogging = config.enableSDKDebugLogging = + values.enableSDKDebugLogging; }; const onFinishFailed = (errorInfo: any) => { diff --git a/example/yarn.lock b/example/yarn.lock index e71347f5b..f9b92ff00 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1783,7 +1783,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -agora-electron-sdk@4.2.0-dev.15: +agora-electron-sdk@4.2.0-beta.1: version "4.2.0-dev.15" resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.15.tgz#71e89853254683647d159bdebb7519ddae4a1664" integrity sha512-oGCJ13eRV2LNany+p2vkjCeu2G6K1GcPFGn4ea6KMpeebFtpe11HMcktM6CzylS5De0l39BOyo7ay7UrCI71OA== diff --git a/package.json b/package.json index 606d175ec..adff5172f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "agora-electron-sdk", - "version": "4.2.0-dev.15", + "version": "4.2.0-beta.1", "description": "agora-electron-sdk", "main": "js/AgoraSdk", "types": "types/AgoraSdk.d.ts", @@ -133,7 +133,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-dev.15_DCG_Windows_Video_20230515_1046.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-dev.15_DCG_Mac_Video_20230515_1046.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-build.1_DCG_Windows_Video_20230523_0209.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-build.1_DCG_Mac_Video_20230523_0209.zip" } } diff --git a/ts/Private/internal/AudioDeviceManagerInternal.ts b/ts/Private/internal/AudioDeviceManagerInternal.ts index 1d3eae465..6a736b5bc 100644 --- a/ts/Private/internal/AudioDeviceManagerInternal.ts +++ b/ts/Private/internal/AudioDeviceManagerInternal.ts @@ -1,4 +1,5 @@ import { AudioDeviceInfo } from '../IAgoraRtcEngine'; +import { IAudioDeviceManagerImpl } from '../impl/IAudioDeviceManagerImpl'; import { callIrisApi } from './IrisApiEngine'; @@ -43,5 +44,3 @@ export class AudioDeviceManagerInternal extends IAudioDeviceManagerImpl { }; } } - -import { IAudioDeviceManagerImpl } from '../impl/IAudioDeviceManagerImpl'; diff --git a/ts/Private/internal/IrisApiEngine.ts b/ts/Private/internal/IrisApiEngine.ts index 354a5ba9d..db1898b10 100644 --- a/ts/Private/internal/IrisApiEngine.ts +++ b/ts/Private/internal/IrisApiEngine.ts @@ -29,6 +29,24 @@ import { IRtcEngineEventHandler, Metadata, } from '../IAgoraRtcEngine'; +import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; +import { + processIAudioFrameObserver, + processIAudioFrameObserverBase, + processIAudioPcmFrameSink, + processIAudioSpectrumObserver, + processIMediaRecorderObserver, + processIVideoEncodedFrameObserver, + processIVideoFrameObserver, +} from '../impl/AgoraMediaBaseImpl'; +import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; +import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; +import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; +import { + processIDirectCdnStreamingEventHandler, + processIMetadataObserver, + processIRtcEngineEventHandler, +} from '../impl/IAgoraRtcEngineImpl'; import { MediaEngineInternal } from './MediaEngineInternal'; import { MediaPlayerInternal } from './MediaPlayerInternal'; @@ -512,22 +530,3 @@ export function emitEvent( ): void { DeviceEventEmitter.emit(eventType as string, eventProcessor, data); } - -import { processIAudioEncodedFrameObserver } from '../impl/AgoraBaseImpl'; -import { - processIAudioFrameObserver, - processIAudioFrameObserverBase, - processIAudioPcmFrameSink, - processIAudioSpectrumObserver, - processIMediaRecorderObserver, - processIVideoEncodedFrameObserver, - processIVideoFrameObserver, -} from '../impl/AgoraMediaBaseImpl'; -import { processIMediaPlayerVideoFrameObserver } from '../impl/IAgoraMediaPlayerImpl'; -import { processIMediaPlayerSourceObserver } from '../impl/IAgoraMediaPlayerSourceImpl'; -import { processIMusicContentCenterEventHandler } from '../impl/IAgoraMusicContentCenterImpl'; -import { - processIDirectCdnStreamingEventHandler, - processIMetadataObserver, - processIRtcEngineEventHandler, -} from '../impl/IAgoraRtcEngineImpl'; diff --git a/ts/Private/internal/LocalSpatialAudioEngineInternal.ts b/ts/Private/internal/LocalSpatialAudioEngineInternal.ts index 04a43668e..17b0acfe0 100644 --- a/ts/Private/internal/LocalSpatialAudioEngineInternal.ts +++ b/ts/Private/internal/LocalSpatialAudioEngineInternal.ts @@ -3,6 +3,7 @@ import { RemoteVoicePositionInfo, SpatialAudioZone, } from '../IAgoraSpatialAudio'; +import { ILocalSpatialAudioEngineImpl } from '../impl/IAgoraSpatialAudioImpl'; export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImpl { protected override getApiTypeFromRelease(): string { @@ -85,5 +86,3 @@ export class LocalSpatialAudioEngineInternal extends ILocalSpatialAudioEngineImp return 'LocalSpatialAudioEngine_muteRemoteAudioStream'; } } - -import { ILocalSpatialAudioEngineImpl } from '../impl/IAgoraSpatialAudioImpl'; diff --git a/ts/Private/internal/MediaEngineInternal.ts b/ts/Private/internal/MediaEngineInternal.ts index d3b052aca..e8f81d299 100644 --- a/ts/Private/internal/MediaEngineInternal.ts +++ b/ts/Private/internal/MediaEngineInternal.ts @@ -5,9 +5,8 @@ import { IVideoEncodedFrameObserver, IVideoFrameObserver, } from '../AgoraMediaBase'; - import { IMediaEngineEvent } from '../extension/IAgoraMediaEngineExtension'; - +import { IMediaEngineImpl } from '../impl/IAgoraMediaEngineImpl'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); @@ -137,7 +136,8 @@ export class MediaEngineInternal extends IMediaEngineImpl { it({ [eventType]: listener }, eventType, data); }); }; - listener!.prototype.callback = callback; + // @ts-ignore + listener!.agoraCallback = callback; DeviceEventEmitter.addListener(eventType, callback); } @@ -147,7 +147,8 @@ export class MediaEngineInternal extends IMediaEngineImpl { ) { DeviceEventEmitter.removeListener( eventType, - listener?.prototype.callback ?? listener + // @ts-ignore + listener?.agoraCallback ?? listener ); } @@ -157,5 +158,3 @@ export class MediaEngineInternal extends IMediaEngineImpl { DeviceEventEmitter.removeAllListeners(eventType); } } - -import { IMediaEngineImpl } from '../impl/IAgoraMediaEngineImpl'; diff --git a/ts/Private/internal/MediaPlayerInternal.ts b/ts/Private/internal/MediaPlayerInternal.ts index 573c7697a..888a513e7 100644 --- a/ts/Private/internal/MediaPlayerInternal.ts +++ b/ts/Private/internal/MediaPlayerInternal.ts @@ -13,7 +13,7 @@ import { import { IMediaPlayerVideoFrameObserver } from '../IAgoraMediaPlayer'; import { IMediaPlayerSourceObserver } from '../IAgoraMediaPlayerSource'; import { IMediaPlayerEvent } from '../extension/IAgoraMediaPlayerExtension'; - +import { IMediaPlayerImpl } from '../impl/IAgoraMediaPlayerImpl'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; import IAgoraMediaPlayerTI from '../ti/IAgoraMediaPlayer-ti'; import IAgoraMediaPlayerSourceTI from '../ti/IAgoraMediaPlayerSource-ti'; @@ -130,7 +130,8 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { it({ [eventType]: listener }, eventType, data); }); }; - listener!.prototype.callback = callback; + // @ts-ignore + listener!.agoraCallback = callback; DeviceEventEmitter.addListener(eventType, callback); } @@ -140,7 +141,8 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { ) { DeviceEventEmitter.removeListener( eventType, - listener?.prototype.callback ?? listener + // @ts-ignore + listener?.agoraCallback ?? listener ); } @@ -330,5 +332,3 @@ export class MediaPlayerInternal extends IMediaPlayerImpl { ); } } - -import { IMediaPlayerImpl } from '../impl/IAgoraMediaPlayerImpl'; diff --git a/ts/Private/internal/MediaRecorderInternal.ts b/ts/Private/internal/MediaRecorderInternal.ts index 34be622af..c763360e7 100644 --- a/ts/Private/internal/MediaRecorderInternal.ts +++ b/ts/Private/internal/MediaRecorderInternal.ts @@ -2,9 +2,8 @@ import { createCheckers } from 'ts-interface-checker'; import { ErrorCodeType } from '../AgoraBase'; import { IMediaRecorderObserver } from '../AgoraMediaBase'; - import { IMediaRecorderEvent } from '../extension/IAgoraMediaRecorderExtension'; - +import { IMediaRecorderImpl } from '../impl/IAgoraMediaRecorderImpl'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; const checkers = createCheckers(AgoraMediaBaseTI); @@ -77,7 +76,8 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { it({ [eventType]: listener }, eventType, data); }); }; - listener!.prototype.callback = callback; + // @ts-ignore + listener!.agoraCallback = callback; DeviceEventEmitter.addListener(eventType, callback); } @@ -87,7 +87,8 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { ) { DeviceEventEmitter.removeListener( eventType, - listener?.prototype.callback ?? listener + // @ts-ignore + listener?.agoraCallback ?? listener ); } @@ -97,5 +98,3 @@ export class MediaRecorderInternal extends IMediaRecorderImpl { DeviceEventEmitter.removeAllListeners(eventType); } } - -import { IMediaRecorderImpl } from '../impl/IAgoraMediaRecorderImpl'; diff --git a/ts/Private/internal/MusicContentCenterInternal.ts b/ts/Private/internal/MusicContentCenterInternal.ts index 1c0090525..8eec227c0 100644 --- a/ts/Private/internal/MusicContentCenterInternal.ts +++ b/ts/Private/internal/MusicContentCenterInternal.ts @@ -7,7 +7,11 @@ import { MusicCollection, } from '../IAgoraMusicContentCenter'; import { IMusicContentCenterEvent } from '../extension/IAgoraMusicContentCenterExtension'; - +import { + IMusicContentCenterImpl, + IMusicPlayerImpl, + MusicCollectionImpl, +} from '../impl/IAgoraMusicContentCenterImpl'; import IAgoraMusicContentCenterTI from '../ti/IAgoraMusicContentCenter-ti'; const checkers = createCheckers(IAgoraMusicContentCenterTI); @@ -49,7 +53,8 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { it({ [eventType]: listener }, eventType, data); }); }; - listener!.prototype.callback = callback; + // @ts-ignore + listener!.agoraCallback = callback; DeviceEventEmitter.addListener(eventType, callback); } @@ -59,7 +64,8 @@ export class MusicContentCenterInternal extends IMusicContentCenterImpl { ) { DeviceEventEmitter.removeListener( eventType, - listener?.prototype.callback ?? listener + // @ts-ignore + listener?.agoraCallback ?? listener ); } @@ -201,9 +207,3 @@ export class MusicCollectionInternal extends MusicCollectionImpl { return this._musicCollection.getTotal(); } } - -import { - IMusicContentCenterImpl, - IMusicPlayerImpl, - MusicCollectionImpl, -} from '../impl/IAgoraMusicContentCenterImpl'; diff --git a/ts/Private/internal/RtcEngineExInternal.ts b/ts/Private/internal/RtcEngineExInternal.ts index 3ef630b3c..ac4d70196 100644 --- a/ts/Private/internal/RtcEngineExInternal.ts +++ b/ts/Private/internal/RtcEngineExInternal.ts @@ -2,7 +2,6 @@ import { Channel } from '../../Types'; import { AgoraEnv } from '../../Utils'; - import { AudioEncodedFrameObserverConfig, AudioRecordingConfiguration, @@ -47,7 +46,8 @@ import { RtcConnection } from '../IAgoraRtcEngineEx'; import { ILocalSpatialAudioEngine } from '../IAgoraSpatialAudio'; import { IAudioDeviceManager } from '../IAudioDeviceManager'; import { IRtcEngineEvent } from '../extension/IAgoraRtcEngineExtension'; - +import { IRtcEngineExImpl } from '../impl/IAgoraRtcEngineExImpl'; +import { IVideoDeviceManagerImpl } from '../impl/IAgoraRtcEngineImpl'; import AgoraBaseTI from '../ti/AgoraBase-ti'; import AgoraMediaBaseTI from '../ti/AgoraMediaBase-ti'; import IAgoraRtcEngineTI from '../ti/IAgoraRtcEngine-ti'; @@ -90,8 +90,12 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { override initialize(context: RtcEngineContext): number { if (AgoraEnv.webEnvReady) { - const { RendererManager } = require('../../Renderer/RendererManager'); - AgoraEnv.AgoraRendererManager = new RendererManager(); + // @ts-ignore + window.AgoraEnv = AgoraEnv; + if (AgoraEnv.AgoraRendererManager === undefined) { + const { RendererManager } = require('../../Renderer/RendererManager'); + AgoraEnv.AgoraRendererManager = new RendererManager(); + } } AgoraEnv.AgoraRendererManager?.enableRender(); const ret = super.initialize(context); @@ -195,7 +199,8 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { it({ [eventType]: listener }, eventType, data); }); }; - listener!.prototype.callback = callback; + // @ts-ignore + listener!.agoraCallback = callback; DeviceEventEmitter.addListener(eventType, callback); } @@ -205,7 +210,8 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ) { DeviceEventEmitter.removeListener( eventType, - listener?.prototype.callback ?? listener + // @ts-ignore + listener?.agoraCallback ?? listener ); } @@ -703,6 +709,3 @@ export class RtcEngineExInternal extends IRtcEngineExImpl { ); } } - -import { IRtcEngineExImpl } from '../impl/IAgoraRtcEngineExImpl'; -import { IVideoDeviceManagerImpl } from '../impl/IAgoraRtcEngineImpl'; diff --git a/ts/Renderer/RendererManager.ts b/ts/Renderer/RendererManager.ts index 907a2c348..4c352ff8e 100644 --- a/ts/Renderer/RendererManager.ts +++ b/ts/Renderer/RendererManager.ts @@ -60,7 +60,7 @@ export class RendererManager extends IRendererManager { constructor() { super(); - this.renderFps = 10; + this.renderFps = 15; this.renderers = new Map(); this.renderMode = this.checkWebglEnv() ? RENDER_MODE.WEBGL From fc230b468f14c7fc2b69d58ca9860b58a5b6948f Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 23 May 2023 15:45:31 +0800 Subject: [PATCH 52/74] [WIP] optimize --- example/package.json | 2 +- example/yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/example/package.json b/example/package.json index 4fc738bc8..601707264 100644 --- a/example/package.json +++ b/example/package.json @@ -65,7 +65,7 @@ ] }, "dependencies": { - "agora-electron-sdk": "4.2.0-beta.1", + "agora-electron-sdk": "4.2.0-dev.15", "antd": "^4.20.3", "download": "^8.0.0", "ffi-napi": "^4.0.3", diff --git a/example/yarn.lock b/example/yarn.lock index f9b92ff00..e71347f5b 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -1783,7 +1783,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -agora-electron-sdk@4.2.0-beta.1: +agora-electron-sdk@4.2.0-dev.15: version "4.2.0-dev.15" resolved "https://registry.npmjs.org/agora-electron-sdk/-/agora-electron-sdk-4.2.0-dev.15.tgz#71e89853254683647d159bdebb7519ddae4a1664" integrity sha512-oGCJ13eRV2LNany+p2vkjCeu2G6K1GcPFGn4ea6KMpeebFtpe11HMcktM6CzylS5De0l39BOyo7ay7UrCI71OA== From 1d3f45a536e13cca679012884c827bb7e2ab2887 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 23 May 2023 16:41:50 +0800 Subject: [PATCH 53/74] fix: NMS-13120 --- .../advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 35e516ddc..dcb1cd5d2 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -44,7 +44,7 @@ interface State extends BaseVideoComponentState { url: string; open: boolean; imageUrl: string; - startLocalVideoTranscoder: boolean; + startLocalVideoTranscoder?: boolean; VideoInputStreams: TranscodingVideoStream[]; } @@ -393,6 +393,7 @@ export default class LocalVideoTranscoder delete state.videoDeviceId; delete state.sources; delete state.targetSources; + delete state.startLocalVideoTranscoder; this.setState(state); } From 9c5098b478eee991e91b69dc85a7f526f7bbe841 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 23 May 2023 19:33:23 +0800 Subject: [PATCH 54/74] chore: fix `AgoraDropdown` onValueChange type --- example/src/renderer/components/ui/index.tsx | 32 +++++++------------ .../advanced/ScreenShare/ScreenShare.tsx | 6 ++-- .../examples/hook/ScreenShare/ScreenShare.tsx | 6 ++-- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index a2c082652..90821f786 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -270,30 +270,22 @@ export const AgoraDropdown = ( : [_value?.toString()] } onSelect={(info) => { - let key: any; - if (typeof _value === 'number') { - key = +info.key; - } else { - key = info.key; - } - const index = _items?.findIndex(({ value }) => { - return value == key; - }); + const index = + _items?.findIndex(({ value }) => { + return value == info.key; + }) ?? -1; + const key = items?.at(index)?.value; setValue(key); - props.onValueChange?.call(this, key, index ?? -1); + props.onValueChange?.call(this, key, index); }} onDeselect={(info) => { - let key: any; - if (typeof _value === 'number') { - key = +info.key; - } else { - key = info.key; - } - const index = _items?.findIndex(({ value }) => { - return value == key; - }); + const index = + _items?.findIndex(({ value }) => { + return value == info.key; + }) ?? -1; + const key = items?.at(index)?.value; setValue(key); - props.onValueChange?.call(this, key, index ?? -1); + props.onValueChange?.call(this, key, index); }} /> } diff --git a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx index b136c4ea4..cce17aa2a 100644 --- a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx @@ -541,14 +541,14 @@ export default class ScreenShare })} value={excludeWindowList} onValueChange={(value, index) => { - if (excludeWindowList.indexOf(+value) === -1) { + if (excludeWindowList.indexOf(value) === -1) { this.setState({ - excludeWindowList: [...excludeWindowList, +value], + excludeWindowList: [...excludeWindowList, value], }); } else { this.setState({ excludeWindowList: excludeWindowList.filter( - (v) => v !== +value + (v) => v !== value ), }); } diff --git a/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx index 49080de42..4831d1463 100644 --- a/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx @@ -471,11 +471,11 @@ export default function ScreenShare() { })} value={excludeWindowList} onValueChange={(value, index) => { - if (excludeWindowList.indexOf(+value) === -1) { - setExcludeWindowList(() => [...excludeWindowList, +value]); + if (excludeWindowList.indexOf(value) === -1) { + setExcludeWindowList(() => [...excludeWindowList, value]); } else { setExcludeWindowList(() => - excludeWindowList.filter((v) => v !== +value) + excludeWindowList.filter((v) => v !== value) ); } }} From a39e6c15fb132fd9cba90fe664642c1649116573 Mon Sep 17 00:00:00 2001 From: HUI Date: Tue, 23 May 2023 21:36:35 +0800 Subject: [PATCH 55/74] chore: use `startCameraCapture` instead of `startPreview` in LocalVideoTranscoder --- .../LocalVideoTranscoder.tsx | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index dcb1cd5d2..1c8530d53 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -102,7 +102,7 @@ export default class LocalVideoTranscoder this.engine.enableVideo(); // Start preview before joinChannel - this.engine.startPreview(); + // this.engine.startPreview(); this.setState({ startPreview: true }); this.enumerateDevices(); @@ -145,12 +145,16 @@ export default class LocalVideoTranscoder ?.getVideoDeviceManager() .enumerateVideoDevices(); - this.setState({ - videoDevices, - videoDeviceId: videoDevices?.length - ? [videoDevices!.at(0)!.deviceId!] - : [], - }); + const deviceId = videoDevices?.at(0)?.deviceId ?? ''; + this.setState( + { + videoDevices, + videoDeviceId: [deviceId], + }, + () => { + this.startCameraCapture(deviceId); + } + ); }; startCameraCapture = (deviceId: string) => { @@ -284,25 +288,27 @@ export default class LocalVideoTranscoder _getVideoSourceTypeCamera = (value: string) => { const { videoDeviceId } = this.state; + const index = + videoDeviceId?.findIndex((deviceId) => deviceId === value) ?? -1; return [ VideoSourceType.VideoSourceCameraPrimary, VideoSourceType.VideoSourceCameraSecondary, VideoSourceType.VideoSourceCameraThird, VideoSourceType.VideoSourceCameraFourth, - ][videoDeviceId?.findIndex((deviceId) => deviceId === value) ?? -1]; + ][index === -1 ? 0 : index]; }; _getVideoSourceTypeScreen = (value: ScreenCaptureSourceInfo) => { const { targetSources } = this.state; + const index = + targetSources?.findIndex(({ sourceId }) => sourceId === value.sourceId) ?? + -1; return [ VideoSourceType.VideoSourceScreenPrimary, VideoSourceType.VideoSourceScreenSecondary, VideoSourceType.VideoSourceScreenThird, VideoSourceType.VideoSourceScreenFourth, - ][ - targetSources?.findIndex(({ sourceId }) => sourceId === value.sourceId) ?? - -1 - ]; + ][index === -1 ? 0 : index]; }; _generateLocalTranscoderConfiguration = (): LocalTranscoderConfiguration => { From d7db2d1543ccb12a555eb4d03327bd1c42e83268 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 16:29:09 +0800 Subject: [PATCH 56/74] ci: optimize build.yml --- .github/workflows/build.yml | 46 +++++++++++-------------------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1f3f57c4c..4e24cfb90 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,41 +2,21 @@ name: Build Addon run-name: ${{ github.actor }} triggered this job on: workflow_dispatch: + inputs: + type: + description: 'Build type' + required: true + default: 'sdk' + type: choice + options: + - demo + - sdk release: types: [ published ] jobs: - build-macos: - strategy: - matrix: - arch: [ x64, arm64 ] - runs-on: macos-latest + build: + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: '16' - cache: 'yarn' - - run: yarn - - - name: Prebuild + - name: Build run: | - yarn prebuild -a ${{ matrix.arch }} -u ${{ secrets.GH_TOKEN }} - - build-windows: - strategy: - matrix: - arch: [ x86, x64 ] - runs-on: windows-latest - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: '16' - cache: 'yarn' - - run: yarn - - - name: Prebuild - run: | - yarn prebuild -a ${{ matrix.arch }} -u ${{ secrets.GH_TOKEN }} + curl -X POST -sS -D- -o/dev/null ${{secrets.JENKINS_BUILD_URL}} -H 'Content-Type: application/json' -d '{"branch":"${{github.ref_name}}"}' From 16400a05ae93c5347194da5e899cec76cb32b434 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 17:48:03 +0800 Subject: [PATCH 57/74] ci: optimize publish --- .github/workflows/build.yml | 16 +++++++++++++--- .github/workflows/publish.yml | 27 ++++++++++++++++++++++++--- package.json | 1 + 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e24cfb90..cef7a0ff1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,12 +1,19 @@ name: Build Addon run-name: ${{ github.actor }} triggered this job on: - workflow_dispatch: + workflow_call: inputs: type: description: 'Build type' required: true default: 'sdk' + type: string + workflow_dispatch: + inputs: + type: + description: 'Build type' + required: true + default: 'demo' type: choice options: - demo @@ -14,9 +21,12 @@ on: release: types: [ published ] jobs: - build: + reusable_workflow_job: runs-on: ubuntu-latest steps: - name: Build run: | - curl -X POST -sS -D- -o/dev/null ${{secrets.JENKINS_BUILD_URL}} -H 'Content-Type: application/json' -d '{"branch":"${{github.ref_name}}"}' + type=${${{inputs.type}}:-"sdk""} + curl -X POST -sS -D- -o/dev/null ${{secrets.JENKINS_BUILD_URL}} \ + -H 'Content-Type: application/json' \ + -d '{"branch": "${{github.ref_name}}, "type": "${type}"}' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 759fa52c6..97ce1373b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,12 +30,33 @@ jobs: run: | npm set "//registry.npmjs.org/:_authToken" ${{ secrets.NPM_TOKEN }} - - if: ${{ inputs.dry-run }} + - name: Dry Run Release + if: ${{ inputs.dry-run }} run: | yarn release ${{ inputs.increment }} -d --ci - - if: ${{ !inputs.dry-run }} + - name: Release + if: ${{ !inputs.dry-run }} run: | git config --global user.email "${{ secrets.GIT_EMAIL }}" git config --global user.name "${{ secrets.GIT_USERNAME }}" - yarn release ${{ inputs.increment }} --ci + yarn release ${{ inputs.increment }} --ci --no-git.tag --no-github.release + + - name: Get Package Info + id: package-info + run: | + echo ::set-output name=name::$(node -p "require('./package.json').name") + echo ::set-output name=version::$(node -p "require('./package.json').version") + + - name: Update Example + run: | + yarn example install ${{steps.package-info.outputs.name}}@${{steps.package-info.outputs.version}} + + - name: Commit Example + run: | + git add example + git commit -m "chore(example): update example to install ${{steps.package-info.outputs.name}}@${{steps.package-info.outputs.version}}" + + - name: Release + run: | + yarn release ${{ inputs.increment }} --ci --no-npm \ No newline at end of file diff --git a/package.json b/package.json index adff5172f..f0544ca71 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "types", "scripts", "gulpfile.js", + "CHANGELOG.md", "!**/__tests__" ], "scripts": { From 0763f2c8b21c2064d77c80887d2972612c341910 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 17:49:20 +0800 Subject: [PATCH 58/74] ci: optimize publish --- .github/workflows/publish.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 97ce1373b..e78a61749 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -35,7 +35,7 @@ jobs: run: | yarn release ${{ inputs.increment }} -d --ci - - name: Release + - name: NPM Publish if: ${{ !inputs.dry-run }} run: | git config --global user.email "${{ secrets.GIT_EMAIL }}" @@ -43,20 +43,24 @@ jobs: yarn release ${{ inputs.increment }} --ci --no-git.tag --no-github.release - name: Get Package Info + if: ${{ !inputs.dry-run }} id: package-info run: | echo ::set-output name=name::$(node -p "require('./package.json').name") echo ::set-output name=version::$(node -p "require('./package.json').version") - name: Update Example + if: ${{ !inputs.dry-run }} run: | yarn example install ${{steps.package-info.outputs.name}}@${{steps.package-info.outputs.version}} - name: Commit Example + if: ${{ !inputs.dry-run }} run: | git add example git commit -m "chore(example): update example to install ${{steps.package-info.outputs.name}}@${{steps.package-info.outputs.version}}" - name: Release + if: ${{ !inputs.dry-run }} run: | yarn release ${{ inputs.increment }} --ci --no-npm \ No newline at end of file From 2dab7f6862c3bfdc5f618d5973cf106c562ad276 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:04:47 +0800 Subject: [PATCH 59/74] ci: optimize --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e78a61749..08d551a4d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -40,7 +40,7 @@ jobs: run: | git config --global user.email "${{ secrets.GIT_EMAIL }}" git config --global user.name "${{ secrets.GIT_USERNAME }}" - yarn release ${{ inputs.increment }} --ci --no-git.tag --no-github.release + yarn release ${{ inputs.increment }} --ci --no-git.tag --no-github.release --npm.allowSameVersion - name: Get Package Info if: ${{ !inputs.dry-run }} From 9ecbfede9a7462a5eaf2f308efd7f119ac6a3d15 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:18:45 +0800 Subject: [PATCH 60/74] ci: fix --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 08d551a4d..0ad13f9e8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,7 @@ on: jobs: release-it: - runs-on: windows-latest + runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} steps: @@ -46,8 +46,8 @@ jobs: if: ${{ !inputs.dry-run }} id: package-info run: | - echo ::set-output name=name::$(node -p "require('./package.json').name") - echo ::set-output name=version::$(node -p "require('./package.json').version") + echo '::set-output name=name::$(node -p "require('./package.json').name")' + echo '::set-output name=version::$(node -p "require('./package.json').version")' - name: Update Example if: ${{ !inputs.dry-run }} From 70783f14bbbc3d966726754a174a5db8f9b4afc2 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:24:45 +0800 Subject: [PATCH 61/74] ci: fix --- .github/workflows/publish.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0ad13f9e8..55d5817fa 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -46,8 +46,10 @@ jobs: if: ${{ !inputs.dry-run }} id: package-info run: | - echo '::set-output name=name::$(node -p "require('./package.json').name")' - echo '::set-output name=version::$(node -p "require('./package.json').version")' + name=$(node -p "require('./package.json').name") + version=$(node -p "require('./package.json').version") + echo '::set-output name=name::${name}' + echo '::set-output name=version::${version}' - name: Update Example if: ${{ !inputs.dry-run }} From 29e0e13fbef4353c952683111fc5a7355e28f8d4 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:30:37 +0800 Subject: [PATCH 62/74] ci: fix publish --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 55d5817fa..54fd81d9b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -48,8 +48,8 @@ jobs: run: | name=$(node -p "require('./package.json').name") version=$(node -p "require('./package.json').version") - echo '::set-output name=name::${name}' - echo '::set-output name=version::${version}' + echo '::set-output name=name::{name}' + echo '::set-output name=version::{version}' - name: Update Example if: ${{ !inputs.dry-run }} From b69cd031f7407a4c693ce26d72a078ee2ffef3ec Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:38:09 +0800 Subject: [PATCH 63/74] ci: fix publish --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 54fd81d9b..aa2b4c22e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -48,8 +48,8 @@ jobs: run: | name=$(node -p "require('./package.json').name") version=$(node -p "require('./package.json').version") - echo '::set-output name=name::{name}' - echo '::set-output name=version::{version}' + echo "name=${name}" >> "$GITHUB_OUTPUT" + echo "version=${version}"" >> "$GITHUB_OUTPUT" - name: Update Example if: ${{ !inputs.dry-run }} From e665905949dbf4b8377b36acff941ff8328e76d2 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:40:18 +0800 Subject: [PATCH 64/74] ci: fix publish --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index aa2b4c22e..5c7038b1a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -49,7 +49,7 @@ jobs: name=$(node -p "require('./package.json').name") version=$(node -p "require('./package.json').version") echo "name=${name}" >> "$GITHUB_OUTPUT" - echo "version=${version}"" >> "$GITHUB_OUTPUT" + echo "version=${version}" >> "$GITHUB_OUTPUT" - name: Update Example if: ${{ !inputs.dry-run }} From aa49e327b980c942ceac8cfe103c500759f6246e Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 18:42:23 +0800 Subject: [PATCH 65/74] ci: fix publish --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5c7038b1a..c59187bfc 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -54,7 +54,7 @@ jobs: - name: Update Example if: ${{ !inputs.dry-run }} run: | - yarn example install ${{steps.package-info.outputs.name}}@${{steps.package-info.outputs.version}} + yarn example add ${{steps.package-info.outputs.name}}@${{steps.package-info.outputs.version}} - name: Commit Example if: ${{ !inputs.dry-run }} From 22e67deeb9c869138fba1231f8a863658c9d9bc7 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 19:57:03 +0800 Subject: [PATCH 66/74] ci: fix publish --- .github/workflows/build.yml | 2 +- .github/workflows/publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cef7a0ff1..c5433b12d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: steps: - name: Build run: | - type=${${{inputs.type}}:-"sdk""} + type=${${{inputs.type}}:-"sdk"} curl -X POST -sS -D- -o/dev/null ${{secrets.JENKINS_BUILD_URL}} \ -H 'Content-Type: application/json' \ -d '{"branch": "${{github.ref_name}}, "type": "${type}"}' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c59187bfc..e925fd3bf 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -65,4 +65,4 @@ jobs: - name: Release if: ${{ !inputs.dry-run }} run: | - yarn release ${{ inputs.increment }} --ci --no-npm \ No newline at end of file + yarn release ${{ inputs.increment }} --ci --no-npm --no-git.changelog \ No newline at end of file From b2775a92743f230896798cf045cc787bdd8ff4af Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 21:52:45 +0800 Subject: [PATCH 67/74] ci: fix build --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c5433b12d..1d83837f7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,8 @@ jobs: steps: - name: Build run: | - type=${${{inputs.type}}:-"sdk"} + type=${{inputs.type}} + type=${type:-"sdk"} curl -X POST -sS -D- -o/dev/null ${{secrets.JENKINS_BUILD_URL}} \ -H 'Content-Type: application/json' \ -d '{"branch": "${{github.ref_name}}, "type": "${type}"}' From 80e556443ddfc0c377fae08913556a0790e09e8c Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 21:53:19 +0800 Subject: [PATCH 68/74] ci: fix publish --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e925fd3bf..889695545 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -65,4 +65,4 @@ jobs: - name: Release if: ${{ !inputs.dry-run }} run: | - yarn release ${{ inputs.increment }} --ci --no-npm --no-git.changelog \ No newline at end of file + yarn release ${{ inputs.increment }} --ci --no-npm --no-git.commit \ No newline at end of file From 82a24f221d4f624aa2cda65db1b0cd1c53b34d34 Mon Sep 17 00:00:00 2001 From: HUI Date: Wed, 24 May 2023 22:05:14 +0800 Subject: [PATCH 69/74] ci: fix build --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1d83837f7..afb44ba24 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,4 +30,4 @@ jobs: type=${type:-"sdk"} curl -X POST -sS -D- -o/dev/null ${{secrets.JENKINS_BUILD_URL}} \ -H 'Content-Type: application/json' \ - -d '{"branch": "${{github.ref_name}}, "type": "${type}"}' + -d "{\"branch\": \"${{github.ref_name}}\", \"type\": \"${type}\"}" From 9c2ef43ec1e473e76e4b8577c02becd53845e018 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 25 May 2023 11:20:01 +0800 Subject: [PATCH 70/74] fix: NMS-13148 GetVideoFrameCache crash while setMetadata --- package.json | 4 ++-- source_code/agora_node_ext/agora_electron_bridge.cpp | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f0544ca71..7db71e472 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-build.1_DCG_Windows_Video_20230523_0209.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-build.1_DCG_Mac_Video_20230523_0209.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-build.2_DCG_Windows_Video_20230524_0304.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-build.2_DCG_Mac_Video_20230524_0307.zip" } } diff --git a/source_code/agora_node_ext/agora_electron_bridge.cpp b/source_code/agora_node_ext/agora_electron_bridge.cpp index b72481ff5..1030bf187 100644 --- a/source_code/agora_node_ext/agora_electron_bridge.cpp +++ b/source_code/agora_node_ext/agora_electron_bridge.cpp @@ -418,6 +418,9 @@ napi_value AgoraElectronBridge::GetVideoFrame(napi_env env, videoFrame.height = height; videoFrame.width = width; videoFrame.yStride = yStride; + videoFrame.metadata_buffer = nullptr; + videoFrame.metadata_size = 0; + videoFrame.alphaBuffer = nullptr; bool isFresh = false; napi_value retObj; From a965996f6d76dcbef5dab5f941f64659700b83ef Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 25 May 2023 11:55:49 +0800 Subject: [PATCH 71/74] fix: NMS-13149 removeAllListener issue --- .../examples/hook/AudioMixing/AudioMixing.tsx | 71 +++++--- .../hook/DeviceManager/DeviceManager.tsx | 144 +++++++++------ .../JoinChannelAudio/JoinChannelAudio.tsx | 124 ++++++++----- .../JoinChannelVideo/JoinChannelVideo.tsx | 76 +++++--- .../JoinMultipleChannel.tsx | 7 +- .../examples/hook/ScreenShare/ScreenShare.tsx | 171 ++++++++++-------- .../examples/hook/StringUid/StringUid.tsx | 2 +- .../hook/TakeSnapshot/TakeSnapshot.tsx | 76 ++++---- .../internal/MusicContentCenterInternal.ts | 1 + ts/Private/internal/RtcEngineExInternal.ts | 1 + 10 files changed, 406 insertions(+), 267 deletions(-) diff --git a/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx b/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx index 1bedbfc64..2684528ef 100644 --- a/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx +++ b/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx @@ -3,7 +3,7 @@ import { AudioMixingStateType, ClientRoleType, } from 'agora-electron-sdk'; -import React, { ReactNode, useEffect, useState } from 'react'; +import React, { ReactNode, useCallback, useEffect, useState } from 'react'; import { AgoraButton, @@ -122,40 +122,57 @@ export default function AudioMixing() { engine.current.leaveChannel(); }; + const onAudioMixingStateChanged = useCallback( + (state: AudioMixingStateType, reason: AudioMixingReasonType) => { + log.info('onAudioMixingStateChanged', 'state', state, 'reason', reason); + switch (state) { + case AudioMixingStateType.AudioMixingStatePlaying: + setStartAudioMixing(true); + setPauseAudioMixing(false); + break; + case AudioMixingStateType.AudioMixingStatePaused: + setPauseAudioMixing(true); + break; + case AudioMixingStateType.AudioMixingStateStopped: + case AudioMixingStateType.AudioMixingStateFailed: + setStartAudioMixing(false); + break; + } + }, + [] + ); + + const onAudioMixingFinished = useCallback(() => { + log.info('AudioMixingFinished'); + }, []); + + const onAudioRoutingChanged = useCallback((routing: number) => { + log.info('onAudioRoutingChanged', 'routing', routing); + }, []); + useEffect(() => { engine.current.addListener( 'onAudioMixingStateChanged', - (state: AudioMixingStateType, reason: AudioMixingReasonType) => { - log.info('onAudioMixingStateChanged', 'state', state, 'reason', reason); - switch (state) { - case AudioMixingStateType.AudioMixingStatePlaying: - setStartAudioMixing(true); - setPauseAudioMixing(false); - break; - case AudioMixingStateType.AudioMixingStatePaused: - setPauseAudioMixing(true); - break; - case AudioMixingStateType.AudioMixingStateStopped: - case AudioMixingStateType.AudioMixingStateFailed: - setStartAudioMixing(false); - break; - } - } + onAudioMixingStateChanged ); - - engine.current.addListener('onAudioMixingFinished', () => { - log.info('AudioMixingFinished'); - }); - - engine.current.addListener('onAudioRoutingChanged', (routing: number) => { - log.info('onAudioRoutingChanged', 'routing', routing); - }); + engine.current.addListener('onAudioMixingFinished', onAudioMixingFinished); + engine.current.addListener('onAudioRoutingChanged', onAudioRoutingChanged); const engineCopy = engine.current; return () => { - engineCopy.removeAllListeners(); + engineCopy.removeListener( + 'onAudioMixingStateChanged', + onAudioMixingStateChanged + ); + engineCopy.removeListener('onAudioMixingFinished', onAudioMixingFinished); + engineCopy.removeListener('onAudioRoutingChanged', onAudioRoutingChanged); }; - }, [engine]); + }, [ + engine, + onAudioMixingFinished, + onAudioMixingStateChanged, + onAudioRoutingChanged, + ]); return ( { + log.info( + 'onAudioDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + }, + [] + ); + + const onAudioDeviceVolumeChanged = useCallback( + (deviceType: MediaDeviceType, volume: number, muted: boolean) => { + log.info( + 'onAudioDeviceVolumeChanged', + 'deviceType', + deviceType, + 'volume', + volume, + 'muted', + muted + ); + }, + [] + ); + + const onVideoDeviceStateChanged = useCallback( + (deviceId: string, deviceType: number, deviceState: number) => { + log.info( + 'onVideoDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + }, + [] + ); + + const onLocalVideoStateChanged = useCallback( + ( + source: VideoSourceType, + state: LocalVideoStreamState, + error: LocalVideoStreamError + ) => { + log.info( + 'onLocalVideoStateChanged', + 'source', + source, + 'state', + state, + 'error', + error + ); + }, + [] + ); + useEffect(() => { engine.current.addListener( 'onAudioDeviceStateChanged', - (deviceId: string, deviceType: MediaDeviceType, deviceState: number) => { - log.info( - 'onAudioDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } + onAudioDeviceStateChanged ); - engine.current.addListener( 'onAudioDeviceVolumeChanged', - (deviceType: MediaDeviceType, volume: number, muted: boolean) => { - log.info( - 'onAudioDeviceVolumeChanged', - 'deviceType', - deviceType, - 'volume', - volume, - 'muted', - muted - ); - } + onAudioDeviceVolumeChanged ); - engine.current.addListener( 'onVideoDeviceStateChanged', - (deviceId: string, deviceType: number, deviceState: number) => { - log.info( - 'onVideoDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } + onVideoDeviceStateChanged ); - engine.current.addListener( 'onLocalVideoStateChanged', - ( - source: VideoSourceType, - state: LocalVideoStreamState, - error: LocalVideoStreamError - ) => { - log.info( - 'onLocalVideoStateChanged', - 'source', - source, - 'state', - state, - 'error', - error - ); - } + onLocalVideoStateChanged ); const engineCopy = engine.current; return () => { - engineCopy.removeAllListeners(); + engineCopy.removeListener( + 'onAudioDeviceStateChanged', + onAudioDeviceStateChanged + ); + engineCopy.removeListener( + 'onAudioDeviceVolumeChanged', + onAudioDeviceVolumeChanged + ); + engineCopy.removeListener( + 'onVideoDeviceStateChanged', + onVideoDeviceStateChanged + ); + engineCopy.removeListener( + 'onLocalVideoStateChanged', + onLocalVideoStateChanged + ); }; - }, [engine]); + }, [ + engine, + onAudioDeviceStateChanged, + onAudioDeviceVolumeChanged, + onLocalVideoStateChanged, + onVideoDeviceStateChanged, + ]); return ( { + log.info( + 'onAudioDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + }, + [] + ); + + const onAudioDeviceVolumeChanged = useCallback( + (deviceType: MediaDeviceType, volume: number, muted: boolean) => { + log.info( + 'onAudioDeviceVolumeChanged', + 'deviceType', + deviceType, + 'volume', + volume, + 'muted', + muted + ); + }, + [] + ); + + const onLocalAudioStateChanged = useCallback( + ( + connection: RtcConnection, + state: LocalAudioStreamState, + error: LocalAudioStreamError + ) => { + log.info( + 'onLocalAudioStateChanged', + 'connection', + connection, + 'state', + state, + 'error', + error + ); + }, + [] + ); + + const onAudioRoutingChanged = useCallback((routing: number) => { + log.info('onAudioRoutingChanged', 'routing', routing); + }, []); + useEffect(() => { engine.current.addListener( 'onAudioDeviceStateChanged', - (deviceId: string, deviceType: number, deviceState: number) => { - log.info( - 'onAudioDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } + onAudioDeviceStateChanged ); - engine.current.addListener( 'onAudioDeviceVolumeChanged', - (deviceType: MediaDeviceType, volume: number, muted: boolean) => { - log.info( - 'onAudioDeviceVolumeChanged', - 'deviceType', - deviceType, - 'volume', - volume, - 'muted', - muted - ); - } + onAudioDeviceVolumeChanged ); - engine.current.addListener( 'onLocalAudioStateChanged', - ( - connection: RtcConnection, - state: LocalAudioStreamState, - error: LocalAudioStreamError - ) => { - log.info( - 'onLocalAudioStateChanged', - 'connection', - connection, - 'state', - state, - 'error', - error - ); - } + onLocalAudioStateChanged ); - - engine.current.addListener('onAudioRoutingChanged', (routing: number) => { - log.info('onAudioRoutingChanged', 'routing', routing); - }); + engine.current.addListener('onAudioRoutingChanged', onAudioRoutingChanged); const engineCopy = engine.current; return () => { - engineCopy.removeAllListeners(); + engineCopy.removeListener( + 'onAudioDeviceStateChanged', + onAudioDeviceStateChanged + ); + engineCopy.removeListener( + 'onAudioDeviceVolumeChanged', + onAudioDeviceVolumeChanged + ); + engineCopy.removeListener( + 'onLocalAudioStateChanged', + onLocalAudioStateChanged + ); + engineCopy.removeListener('onAudioRoutingChanged', onAudioRoutingChanged); }; - }, [engine]); + }, [ + engine, + onAudioDeviceStateChanged, + onAudioDeviceVolumeChanged, + onAudioRoutingChanged, + onLocalAudioStateChanged, + ]); return ( { + log.info( + 'onVideoDeviceStateChanged', + 'deviceId', + deviceId, + 'deviceType', + deviceType, + 'deviceState', + deviceState + ); + }, + [] + ); + + const onLocalVideoStateChanged = useCallback( + ( + source: VideoSourceType, + state: LocalVideoStreamState, + error: LocalVideoStreamError + ) => { + log.info( + 'onLocalVideoStateChanged', + 'source', + source, + 'state', + state, + 'error', + error + ); + }, + [] + ); + useEffect(() => { engine.current.addListener( 'onVideoDeviceStateChanged', - (deviceId: string, deviceType: number, deviceState: number) => { - log.info( - 'onVideoDeviceStateChanged', - 'deviceId', - deviceId, - 'deviceType', - deviceType, - 'deviceState', - deviceState - ); - } + onVideoDeviceStateChanged ); - engine.current.addListener( 'onLocalVideoStateChanged', - ( - source: VideoSourceType, - state: LocalVideoStreamState, - error: LocalVideoStreamError - ) => { - log.info( - 'onLocalVideoStateChanged', - 'source', - source, - 'state', - state, - 'error', - error - ); - } + onLocalVideoStateChanged ); const engineCopy = engine.current; return () => { - engineCopy.removeAllListeners(); + engineCopy.removeListener( + 'onVideoDeviceStateChanged', + onVideoDeviceStateChanged + ); + engineCopy.removeListener( + 'onLocalVideoStateChanged', + onLocalVideoStateChanged + ); }; - }, [engine]); + }, [engine, onLocalVideoStateChanged, onVideoDeviceStateChanged]); return ( { - engineCopy.removeAllListeners(); + engineCopy.removeListener('onJoinChannelSuccess', onJoinChannelSuccess); + engineCopy.removeListener('onLeaveChannel', onLeaveChannel); + engineCopy.removeListener( + 'onRemoteVideoStateChanged', + onRemoteVideoStateChanged + ); }; }, [engine, onJoinChannelSuccess, onLeaveChannel, onRemoteVideoStateChanged]); diff --git a/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx index 4831d1463..689773fef 100644 --- a/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/hook/ScreenShare/ScreenShare.tsx @@ -230,95 +230,118 @@ export default function ScreenShare() { engine.current.leaveChannel(); }; - useEffect(() => { - engine.current.addListener( - 'onJoinChannelSuccess', - (connection: RtcConnection, elapsed: number) => { - if (connection.localUid === uid2) { - log.info( - 'onJoinChannelSuccess', - 'connection', - connection, - 'elapsed', - elapsed - ); - setPublishScreenCapture(true); - return; - } + const onJoinChannelSuccess = useCallback( + (connection: RtcConnection, elapsed: number) => { + if (connection.localUid === uid2) { + log.info( + 'onJoinChannelSuccess', + 'connection', + connection, + 'elapsed', + elapsed + ); + setPublishScreenCapture(true); + return; } - ); + }, + [uid2] + ); - engine.current.addListener( - 'onLeaveChannel', - (connection: RtcConnection, stats: RtcStats) => { - log.info('onLeaveChannel', 'connection', connection, 'stats', stats); - if (connection.localUid === uid2) { - setPublishScreenCapture(false); - return; - } - resetSources(); - resetTargetSource(); + const onLeaveChannel = useCallback( + (connection: RtcConnection, stats: RtcStats) => { + log.info('onLeaveChannel', 'connection', connection, 'stats', stats); + if (connection.localUid === uid2) { + setPublishScreenCapture(false); + return; } - ); + resetSources(); + resetTargetSource(); + }, + [resetSources, resetTargetSource, uid2] + ); - engine.current.addListener( - 'onUserJoined', - (connection: RtcConnection, remoteUid: number, elapsed: number) => { - if (connection.localUid === uid2 || remoteUid === uid2) { - // ⚠️ mute the streams from screen sharing - engine.current.muteRemoteAudioStream(uid2, true); - engine.current.muteRemoteVideoStream(uid2, true); - return; - } + const onUserJoined = useCallback( + (connection: RtcConnection, remoteUid: number, elapsed: number) => { + if (connection.localUid === uid2 || remoteUid === uid2) { + // ⚠️ mute the streams from screen sharing + engine.current.muteRemoteAudioStream(uid2, true); + engine.current.muteRemoteVideoStream(uid2, true); + return; } - ); + }, + [engine, uid2] + ); - engine.current.addListener( - 'onUserOffline', - ( - connection: RtcConnection, - remoteUid: number, - reason: UserOfflineReasonType - ) => { - if (connection.localUid === uid2 || remoteUid === uid2) return; + const onUserOffline = useCallback( + ( + connection: RtcConnection, + remoteUid: number, + reason: UserOfflineReasonType + ) => { + if (connection.localUid === uid2 || remoteUid === uid2) return; + }, + [uid2] + ); + + const onLocalVideoStateChanged = useCallback( + ( + source: VideoSourceType, + state: LocalVideoStreamState, + error: LocalVideoStreamError + ) => { + log.info( + 'onLocalVideoStateChanged', + 'source', + source, + 'state', + state, + 'error', + error + ); + if (source === VideoSourceType.VideoSourceScreen) { + switch (state) { + case LocalVideoStreamState.LocalVideoStreamStateStopped: + case LocalVideoStreamState.LocalVideoStreamStateFailed: + break; + case LocalVideoStreamState.LocalVideoStreamStateCapturing: + case LocalVideoStreamState.LocalVideoStreamStateEncoding: + setStartScreenCapture(true); + break; + } } - ); + }, + [] + ); + useEffect(() => { + engine.current.addListener('onJoinChannelSuccess', onJoinChannelSuccess); + engine.current.addListener('onLeaveChannel', onLeaveChannel); + engine.current.addListener('onUserJoined', onUserJoined); + engine.current.addListener('onUserOffline', onUserOffline); engine.current.addListener( 'onLocalVideoStateChanged', - ( - source: VideoSourceType, - state: LocalVideoStreamState, - error: LocalVideoStreamError - ) => { - log.info( - 'onLocalVideoStateChanged', - 'source', - source, - 'state', - state, - 'error', - error - ); - if (source === VideoSourceType.VideoSourceScreen) { - switch (state) { - case LocalVideoStreamState.LocalVideoStreamStateStopped: - case LocalVideoStreamState.LocalVideoStreamStateFailed: - break; - case LocalVideoStreamState.LocalVideoStreamStateCapturing: - case LocalVideoStreamState.LocalVideoStreamStateEncoding: - setStartScreenCapture(true); - break; - } - } - } + onLocalVideoStateChanged ); const engineCopy = engine.current; return () => { - engineCopy.removeAllListeners(); + engineCopy.removeListener('onJoinChannelSuccess', onJoinChannelSuccess); + engineCopy.removeListener('onLeaveChannel', onLeaveChannel); + engineCopy.removeListener('onUserJoined', onUserJoined); + engineCopy.removeListener('onUserOffline', onUserOffline); + engineCopy.removeListener( + 'onLocalVideoStateChanged', + onLocalVideoStateChanged + ); }; - }, [engine, resetSources, resetTargetSource, uid2]); + }, [ + engine, + onJoinChannelSuccess, + onLeaveChannel, + onLocalVideoStateChanged, + onUserJoined, + onUserOffline, + ]); return ( { - engineCopy.removeAllListeners(); + engineCopy.removeListener('onLocalUserRegistered', onLocalUserRegistered); }; }, [engine, onLocalUserRegistered]); diff --git a/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx index 3e62ce8c5..469ea7a21 100644 --- a/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx +++ b/example/src/renderer/examples/hook/TakeSnapshot/TakeSnapshot.tsx @@ -5,7 +5,13 @@ import { ErrorCodeType, RtcConnection, } from 'agora-electron-sdk'; -import React, { ReactNode, useEffect, useRef, useState } from 'react'; +import React, { + ReactNode, + useCallback, + useEffect, + useRef, + useState, +} from 'react'; import { AgoraButton, @@ -89,45 +95,45 @@ export default function TakeSnapshot() { engine.current.leaveChannel(); }; - useEffect(() => { - engine.current.addListener( - 'onSnapshotTaken', - ( - connection: RtcConnection, - uid: number, - filePath: string, - width: number, - height: number, - errCode: number - ) => { - log.info( - 'onSnapshotTaken', - 'connection', - connection, - 'uid', - uid, - 'filePath', - filePath, - 'width', - width, - 'height', - height, - 'errCode', - errCode - ); - if ( - filePath === `${osFilePath}/${targetUid}-${timestamp.current}.jpg` - ) { - setTakeSnapshot(errCode === ErrorCodeType.ErrOk); - } + const onSnapshotTaken = useCallback( + ( + connection: RtcConnection, + uid: number, + filePath: string, + width: number, + height: number, + errCode: number + ) => { + log.info( + 'onSnapshotTaken', + 'connection', + connection, + 'uid', + uid, + 'filePath', + filePath, + 'width', + width, + 'height', + height, + 'errCode', + errCode + ); + if (filePath === `${osFilePath}/${targetUid}-${timestamp.current}.jpg`) { + setTakeSnapshot(errCode === ErrorCodeType.ErrOk); } - ); + }, + [osFilePath, targetUid] + ); + + useEffect(() => { + engine.current.addListener('onSnapshotTaken', onSnapshotTaken); const engineCopy = engine.current; return () => { - engineCopy.removeAllListeners(); + engineCopy.removeListener('onSnapshotTaken', onSnapshotTaken); }; - }, [engine, osFilePath, targetUid]); + }, [engine, onSnapshotTaken]); return ( Date: Thu, 25 May 2023 14:37:44 +0800 Subject: [PATCH 72/74] chore: optimize --- example/src/renderer/App.tsx | 4 ++-- .../src/renderer/components/BaseComponent.tsx | 14 ++++++------- example/src/renderer/components/ui/index.tsx | 20 +++++++++---------- .../advanced/AudioMixing/AudioMixing.tsx | 6 +++--- .../advanced/AudioSpectrum/AudioSpectrum.tsx | 8 ++++---- .../advanced/BeautyEffect/BeautyEffect.tsx | 6 +++--- .../ChannelMediaRelay/ChannelMediaRelay.tsx | 6 +++--- .../ContentInspect/ContentInspect.tsx | 6 +++--- .../advanced/DeviceManager/DeviceManager.tsx | 4 ++-- .../DirectCdnStreaming/DirectCdnStreaming.tsx | 6 +++--- .../EncodedVideoFrame/EncodedVideoFrame.tsx | 6 +++--- .../advanced/Encryption/Encryption.tsx | 6 +++--- .../examples/advanced/Extension/Extension.tsx | 6 +++--- .../JoinMultipleChannel.tsx | 8 ++++---- .../LocalSpatialAudioEngine.tsx | 6 +++--- .../LocalVideoTranscoder.tsx | 8 ++++---- .../advanced/MediaPlayer/MediaPlayer.tsx | 10 +++++----- .../advanced/MediaRecorder/MediaRecorder.tsx | 6 +++--- .../MusicContentCenter/MusicContentCenter.tsx | 10 +++++----- .../advanced/PlayEffect/PlayEffect.tsx | 6 +++--- .../ProcessVideoRawData.tsx | 4 ++-- .../PushVideoFrame/PushVideoFrame.tsx | 6 +++--- .../advanced/RTMPStreaming/RTMPStreaming.tsx | 6 +++--- .../advanced/RhythmPlayer/RhythmPlayer.tsx | 6 +++--- .../advanced/ScreenShare/ScreenShare.tsx | 8 ++++---- .../advanced/SendMetadata/SendMetadata.tsx | 6 +++--- .../SendMultiVideoStream.tsx | 8 ++++---- .../advanced/SpatialAudio/SpatialAudio.tsx | 6 +++--- .../advanced/StreamMessage/StreamMessage.tsx | 6 +++--- .../advanced/TakeSnapshot/TakeSnapshot.tsx | 6 +++--- .../VideoEncoderConfiguration.tsx | 6 +++--- .../VirtualBackground/VirtualBackground.tsx | 6 +++--- .../advanced/VoiceChanger/VoiceChanger.tsx | 4 ++-- .../JoinChannelAudio/JoinChannelAudio.tsx | 6 +++--- .../JoinChannelVideo/JoinChannelVideo.tsx | 6 +++--- .../examples/basic/StringUid/StringUid.tsx | 6 +++--- .../examples/hook/AudioMixing/AudioMixing.tsx | 6 +++--- .../hook/DeviceManager/DeviceManager.tsx | 4 ++-- .../JoinChannelAudio/JoinChannelAudio.tsx | 6 +++--- .../JoinMultipleChannel.tsx | 16 +++++---------- .../examples/hook/ScreenShare/ScreenShare.tsx | 8 ++++---- .../examples/hook/StringUid/StringUid.tsx | 6 +++--- .../hook/TakeSnapshot/TakeSnapshot.tsx | 6 +++--- .../VirtualBackground/VirtualBackground.tsx | 6 +++--- .../hook/components/BaseComponent.tsx | 10 +++++----- .../hook/components/BaseRenderUsers.tsx | 4 ++-- 46 files changed, 157 insertions(+), 163 deletions(-) diff --git a/example/src/renderer/App.tsx b/example/src/renderer/App.tsx index b643c7f9d..fc66c9a0a 100644 --- a/example/src/renderer/App.tsx +++ b/example/src/renderer/App.tsx @@ -1,7 +1,7 @@ import { GithubOutlined, SettingOutlined } from '@ant-design/icons'; import { createAgoraRtcEngine } from 'agora-electron-sdk'; import { Layout, Menu } from 'antd'; -import React from 'react'; +import React, { Component } from 'react'; import { Link, Redirect, @@ -22,7 +22,7 @@ const DATA = [Basic, Advanced, Hooks]; const { Content, Footer, Sider } = Layout; const { SubMenu } = Menu; -class App extends React.Component { +class App extends Component { state = { collapsed: false, version: { version: undefined, build: undefined }, diff --git a/example/src/renderer/components/BaseComponent.tsx b/example/src/renderer/components/BaseComponent.tsx index ad4af32e2..91aa7a06f 100644 --- a/example/src/renderer/components/BaseComponent.tsx +++ b/example/src/renderer/components/BaseComponent.tsx @@ -8,7 +8,7 @@ import { VideoCanvas, VideoSourceType, } from 'agora-electron-sdk'; -import React, { Component, ReactElement, ReactNode } from 'react'; +import React, { Component, ReactElement } from 'react'; import { AgoraButton, @@ -161,7 +161,7 @@ export abstract class BaseComponent< ); } - protected renderChannel(): ReactNode { + protected renderChannel(): ReactElement | undefined { const { channelId, joinChannelSuccess } = this.state; return ( <> @@ -182,7 +182,7 @@ export abstract class BaseComponent< ); } - protected renderUsers(): ReactNode { + protected renderUsers(): ReactElement | undefined { const { startPreview, joinChannelSuccess, remoteUsers } = this.state; return ( <> @@ -207,7 +207,7 @@ export abstract class BaseComponent< ); } - protected renderUser(user: VideoCanvas): ReactElement { + protected renderUser(user: VideoCanvas): ReactElement | undefined { const { enableVideo } = this.state; return ( ; } - protected renderConfiguration(): ReactNode { + protected renderConfiguration(): ReactElement | undefined { return undefined; } - protected renderAction(): ReactNode { + protected renderAction(): ReactElement | undefined { return undefined; } diff --git a/example/src/renderer/components/ui/index.tsx b/example/src/renderer/components/ui/index.tsx index 90821f786..fa92a471f 100644 --- a/example/src/renderer/components/ui/index.tsx +++ b/example/src/renderer/components/ui/index.tsx @@ -21,17 +21,20 @@ import { SwitchProps, } from 'antd'; import { ListItemProps } from 'antd/lib/list'; -import React, { useEffect, useState } from 'react'; +import React, { + DetailedHTMLProps, + HTMLAttributes, + MouseEventHandler, + useEffect, + useState, +} from 'react'; import css from './public.scss'; export { RtcSurfaceView } from '../RtcSurfaceView'; export const AgoraView = ( - props: React.DetailedHTMLProps< - React.HTMLAttributes, - HTMLDivElement - > + props: DetailedHTMLProps, HTMLDivElement> ) => { return ( <> @@ -41,10 +44,7 @@ export const AgoraView = ( }; export const AgoraText = ( - props: React.DetailedHTMLProps< - React.HTMLAttributes, - HTMLDivElement - > + props: DetailedHTMLProps, HTMLDivElement> ) => { return ( <> @@ -55,7 +55,7 @@ export const AgoraText = ( export const AgoraButton = ( props: Omit & { - onPress?: React.MouseEventHandler; + onPress?: MouseEventHandler; } ) => { const { title, onPress, ...others } = props; diff --git a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx index 913292740..f1c8ac7dc 100644 --- a/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx +++ b/example/src/renderer/examples/advanced/AudioMixing/AudioMixing.tsx @@ -6,7 +6,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -199,7 +199,7 @@ export default class AudioMixing this.info('AudioMixingFinished'); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { filePath, loopback } = this.state; return ( <> @@ -242,7 +242,7 @@ export default class AudioMixing ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startAudioMixing, pauseAudioMixing } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx index 3a54ddc83..9450f318d 100644 --- a/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx +++ b/example/src/renderer/examples/advanced/AudioSpectrum/AudioSpectrum.tsx @@ -7,7 +7,7 @@ import { UserAudioSpectrumInfo, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { CartesianGrid, Line, @@ -169,7 +169,7 @@ export default class AudioSpectrum return true; } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { enableAudioSpectrumMonitor, audioSpectrumData } = this.state; return ( <> @@ -195,7 +195,7 @@ export default class AudioSpectrum ); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { return ( <> diff --git a/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx b/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx index 8ba3d5183..6067573c4 100644 --- a/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx +++ b/example/src/renderer/examples/advanced/BeautyEffect/BeautyEffect.tsx @@ -5,7 +5,7 @@ import { LighteningContrastLevel, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -160,7 +160,7 @@ export default class BeautyEffect this.engine?.release(); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { lighteningContrastLevel, lighteningLevel, @@ -234,7 +234,7 @@ export default class BeautyEffect ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startPreview, joinChannelSuccess, enableBeautyEffect } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx index 4f5defb76..9dd7496e8 100644 --- a/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx +++ b/example/src/renderer/examples/advanced/ChannelMediaRelay/ChannelMediaRelay.tsx @@ -7,7 +7,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -214,7 +214,7 @@ export default class ChannelMediaRelay this.info('onChannelMediaRelayEvent', 'code', code); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { destChannelNames } = this.state; return ( <> @@ -230,7 +230,7 @@ export default class ChannelMediaRelay ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, startChannelMediaRelay, diff --git a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx index 20275cb3c..9640cd41f 100644 --- a/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx +++ b/example/src/renderer/examples/advanced/ContentInspect/ContentInspect.tsx @@ -7,7 +7,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -153,7 +153,7 @@ export default class ContentInspect this.info('onContentInspectResult', 'result', result); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { modules, type, interval } = this.state; return ( <> @@ -205,7 +205,7 @@ export default class ContentInspect ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startPreview, joinChannelSuccess, enableContentInspect } = this.state; return ( diff --git a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx index 5fe6f864e..c91bed874 100644 --- a/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx +++ b/example/src/renderer/examples/advanced/DeviceManager/DeviceManager.tsx @@ -12,7 +12,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React, { ReactNode } from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -317,7 +317,7 @@ export default class DeviceManager ); } - protected renderConfiguration(): ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { playbackDevices, playbackDeviceId, diff --git a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx index e3f6b2add..b35fff930 100644 --- a/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx +++ b/example/src/renderer/examples/advanced/DirectCdnStreaming/DirectCdnStreaming.tsx @@ -14,7 +14,7 @@ import { VideoMirrorModeType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -242,7 +242,7 @@ export default class DirectCdnStreaming this.info('onDirectCdnStreamingStats', 'stats', stats); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { url, codecType, @@ -354,7 +354,7 @@ export default class DirectCdnStreaming ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startDirectCdnStreaming } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx b/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx index 442fc4329..17a1aadce 100644 --- a/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx +++ b/example/src/renderer/examples/advanced/EncodedVideoFrame/EncodedVideoFrame.tsx @@ -13,7 +13,7 @@ import { VideoFrameType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -200,7 +200,7 @@ export default class EncodedVideoFrame return true; } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { imageBuffer } = this.state; return ( <> @@ -215,7 +215,7 @@ export default class EncodedVideoFrame ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/Encryption/Encryption.tsx b/example/src/renderer/examples/advanced/Encryption/Encryption.tsx index 72f4d7bcc..4fd044744 100644 --- a/example/src/renderer/examples/advanced/Encryption/Encryption.tsx +++ b/example/src/renderer/examples/advanced/Encryption/Encryption.tsx @@ -7,7 +7,7 @@ import { RtcConnection, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -155,7 +155,7 @@ export default class Encryption ); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { encryptionMode, encryptionKey, encryptionKdfSalt } = this.state; return ( <> @@ -190,7 +190,7 @@ export default class Encryption ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, enableEncryption } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/Extension/Extension.tsx b/example/src/renderer/examples/advanced/Extension/Extension.tsx index 00ab66fd8..a75fc9315 100644 --- a/example/src/renderer/examples/advanced/Extension/Extension.tsx +++ b/example/src/renderer/examples/advanced/Extension/Extension.tsx @@ -4,7 +4,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -192,7 +192,7 @@ export default class Extension this.setState({ enableExtension: false }); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { path, provider, extension } = this.state; return ( <> @@ -229,7 +229,7 @@ export default class Extension ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, enableExtension } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx index 3cdae9cbc..15a4faef5 100644 --- a/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx +++ b/example/src/renderer/examples/advanced/JoinMultipleChannel/JoinMultipleChannel.tsx @@ -352,7 +352,7 @@ export default class JoinMultipleChannel } } - protected renderChannel(): React.ReactNode { + protected renderChannel(): ReactElement | undefined { const { channelId, channelId2, @@ -415,7 +415,7 @@ export default class JoinMultipleChannel ); } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { startPreview, channelId, @@ -449,7 +449,7 @@ export default class JoinMultipleChannel user: VideoCanvas, channelId?: string, localUid?: number - ): ReactElement { + ): ReactElement | undefined { return ( Click view to mirror @@ -458,7 +458,7 @@ export default class JoinMultipleChannel ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, joinChannelSuccess2 } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx index 2da91b16e..ba607cd21 100644 --- a/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx +++ b/example/src/renderer/examples/advanced/LocalSpatialAudioEngine/LocalSpatialAudioEngine.tsx @@ -5,7 +5,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -174,7 +174,7 @@ export default class LocalSpatialAudioEngine this.engine?.release(); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { joinChannelSuccess, remoteUsers, @@ -286,7 +286,7 @@ export default class LocalSpatialAudioEngine ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, targetUid } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx index 1c8530d53..1b1f1e96f 100644 --- a/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx +++ b/example/src/renderer/examples/advanced/LocalVideoTranscoder/LocalVideoTranscoder.tsx @@ -16,7 +16,7 @@ import createAgoraRtcEngine, { VideoDeviceInfo, VideoSourceType, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -444,7 +444,7 @@ export default class LocalVideoTranscoder } } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { startPreview, joinChannelSuccess, @@ -472,7 +472,7 @@ export default class LocalVideoTranscoder ); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { videoDevices, videoDeviceId, @@ -582,7 +582,7 @@ export default class LocalVideoTranscoder ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startLocalVideoTranscoder } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx index c7a075da7..e4b2fdb13 100644 --- a/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx +++ b/example/src/renderer/examples/advanced/MediaPlayer/MediaPlayer.tsx @@ -8,7 +8,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -282,11 +282,11 @@ export default class MediaPlayer ); } - protected renderChannel(): React.ReactNode { + protected renderChannel(): ReactElement | undefined { return undefined; } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { url, open, position, duration, playoutVolume } = this.state; return ( <> @@ -344,7 +344,7 @@ export default class MediaPlayer ); } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { open } = this.state; return ( <> @@ -360,7 +360,7 @@ export default class MediaPlayer ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { open, play, pause, mute } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx index f515ad711..e672bb4e5 100644 --- a/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx +++ b/example/src/renderer/examples/advanced/MediaRecorder/MediaRecorder.tsx @@ -13,7 +13,7 @@ import { RecorderState, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -229,7 +229,7 @@ export default class MediaRecorder } } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { storagePath, containerFormat, @@ -290,7 +290,7 @@ export default class MediaRecorder ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, startRecoding } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx index ce975a386..aa21790b9 100644 --- a/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx +++ b/example/src/renderer/examples/advanced/MusicContentCenter/MusicContentCenter.tsx @@ -13,7 +13,7 @@ import { PreloadStatusCode, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -359,11 +359,11 @@ export default class MusicContentCenter ); } - protected renderChannel(): React.ReactNode { + protected renderChannel(): ReactElement | undefined { return undefined; } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { rtmAppId, rtmToken, @@ -488,7 +488,7 @@ export default class MusicContentCenter ); } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { musics, songCode } = this.state; return +songCode >= 0 ? ( diff --git a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx index a97a1cab4..a1a037f2c 100644 --- a/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx +++ b/example/src/renderer/examples/advanced/PlayEffect/PlayEffect.tsx @@ -4,7 +4,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -194,7 +194,7 @@ export default class PlayEffect this.setState({ playEffect: false }); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { filePath, pitch, pan, gain, publish } = this.state; return ( <> @@ -280,7 +280,7 @@ export default class PlayEffect ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { playEffect, pauseEffect } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx index 52973ee7c..7e9d041e2 100644 --- a/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx +++ b/example/src/renderer/examples/advanced/ProcessVideoRawData/ProcessVideoRawData.tsx @@ -13,7 +13,7 @@ import ffi, { LibraryObject, LibraryObjectDefinitionToLibraryDefinition, } from 'ffi-napi'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -194,7 +194,7 @@ export default class ProcessVideoRawData this.engine?.release(); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { enablePlugin } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx b/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx index 4365ed53f..8dd8f4102 100644 --- a/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx +++ b/example/src/renderer/examples/advanced/PushVideoFrame/PushVideoFrame.tsx @@ -11,7 +11,7 @@ import { VideoPixelFormat, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -172,7 +172,7 @@ export default class PushVideoFrame this.setState(state); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { sources, targetSource } = this.state; return ( <> @@ -198,7 +198,7 @@ export default class PushVideoFrame ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx index cc00de81a..08bf2dbf1 100644 --- a/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx +++ b/example/src/renderer/examples/advanced/RTMPStreaming/RTMPStreaming.tsx @@ -13,7 +13,7 @@ import { VideoCodecTypeForStream, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { SketchPicker } from 'react-color'; import { @@ -322,7 +322,7 @@ export default class RTMPStreaming this.debug('onTranscodingUpdated'); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { url, startRtmpStreamWithTranscoding, @@ -509,7 +509,7 @@ export default class RTMPStreaming ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, startRtmpStreamWithTranscoding, diff --git a/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx b/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx index 2d196b4ec..1770f990f 100644 --- a/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx +++ b/example/src/renderer/examples/advanced/RhythmPlayer/RhythmPlayer.tsx @@ -8,7 +8,7 @@ import { RtcStats, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -193,7 +193,7 @@ export default class RhythmPlayer } } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { sound1, sound2, beatsPerMeasure, beatsPerMinute } = this.state; return ( <> @@ -236,7 +236,7 @@ export default class RhythmPlayer ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startRhythmPlayer } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx index cce17aa2a..f0d7b2969 100644 --- a/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx +++ b/example/src/renderer/examples/advanced/ScreenShare/ScreenShare.tsx @@ -14,7 +14,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { SketchPicker } from 'react-color'; import { @@ -391,7 +391,7 @@ export default class ScreenShare } } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { startScreenCapture } = this.state; return ( <> @@ -409,7 +409,7 @@ export default class ScreenShare ); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { sources, targetSource, @@ -612,7 +612,7 @@ export default class ScreenShare ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startScreenCapture, publishScreenCapture } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx b/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx index b30ed3009..bda401d21 100644 --- a/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx +++ b/example/src/renderer/examples/advanced/SendMetadata/SendMetadata.tsx @@ -10,7 +10,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -150,7 +150,7 @@ export default class SendMetadata ); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { metadataBuffer } = this.state; return ( <> @@ -165,7 +165,7 @@ export default class SendMetadata ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx index 0150cf1cc..6f986db4b 100644 --- a/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx +++ b/example/src/renderer/examples/advanced/SendMultiVideoStream/SendMultiVideoStream.tsx @@ -19,7 +19,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -299,7 +299,7 @@ export default class SendMultiVideoStream this.info('onFrame', frame); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { uid2, url } = this.state; return ( <> @@ -325,7 +325,7 @@ export default class SendMultiVideoStream ); } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { const { open } = this.state; return ( <> @@ -342,7 +342,7 @@ export default class SendMultiVideoStream ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { open } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx b/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx index 94980e8a5..636743999 100644 --- a/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx +++ b/example/src/renderer/examples/advanced/SpatialAudio/SpatialAudio.tsx @@ -5,7 +5,7 @@ import { IRtcEngineEventHandler, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -168,7 +168,7 @@ export default class SpatialAudio this.engine?.release(); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { remoteUsers, targetUid, @@ -257,7 +257,7 @@ export default class SpatialAudio ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, enableSpatialAudio } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx b/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx index 5c60545ca..dc83c7ecd 100644 --- a/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx +++ b/example/src/renderer/examples/advanced/StreamMessage/StreamMessage.tsx @@ -7,7 +7,7 @@ import { RtcConnection, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -200,7 +200,7 @@ export default class StreamMessage ); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { syncWithAudio, ordered, streamId, data } = this.state; return ( <> @@ -235,7 +235,7 @@ export default class StreamMessage ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess, streamId } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx index 2269be8d3..2edd052fc 100644 --- a/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx +++ b/example/src/renderer/examples/advanced/TakeSnapshot/TakeSnapshot.tsx @@ -8,7 +8,7 @@ import { RtcConnection, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -167,7 +167,7 @@ export default class TakeSnapshot } } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { remoteUsers, targetUid, filePath, takeSnapshot } = this.state; return ( <> @@ -192,7 +192,7 @@ export default class TakeSnapshot ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess } = this.state; return ( <> diff --git a/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx b/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx index 73fae8f70..e97d03538 100644 --- a/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx +++ b/example/src/renderer/examples/advanced/VideoEncoderConfiguration/VideoEncoderConfiguration.tsx @@ -8,7 +8,7 @@ import { VideoMirrorModeType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseComponent, @@ -165,7 +165,7 @@ export default class VideoEncoderConfiguration this.engine?.release(); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { codecType, orientationMode, degradationPreference, mirrorMode } = this.state; return ( @@ -265,7 +265,7 @@ export default class VideoEncoderConfiguration ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { return ( <> @@ -212,7 +212,7 @@ export default class VirtualBackground ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { startPreview, joinChannelSuccess, enableVirtualBackground } = this.state; return ( diff --git a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx index 6720a2877..40d8d6aaa 100644 --- a/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx +++ b/example/src/renderer/examples/advanced/VoiceChanger/VoiceChanger.tsx @@ -9,7 +9,7 @@ import { VoiceConversionPreset, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -206,7 +206,7 @@ export default class VoiceChanger this.engine?.release(); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { return ( <> {this._renderVoiceBeautifierPreset()} diff --git a/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx b/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx index 7fe3c739c..d5b0ef17e 100644 --- a/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx +++ b/example/src/renderer/examples/basic/JoinChannelAudio/JoinChannelAudio.tsx @@ -11,7 +11,7 @@ import { UserOfflineReasonType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -238,7 +238,7 @@ export default class JoinChannelAudio this.info('onAudioRoutingChanged', 'routing', routing); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { recordingSignalVolume, playbackSignalVolume } = this.state; return ( <> @@ -275,7 +275,7 @@ export default class JoinChannelAudio ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { enableLocalAudio, muteLocalAudioStream } = this.state; return ( <> diff --git a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx index 280fb4418..b38d4ca75 100644 --- a/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx +++ b/example/src/renderer/examples/basic/JoinChannelVideo/JoinChannelVideo.tsx @@ -12,7 +12,7 @@ import { VideoSourceType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React, { ReactElement } from 'react'; +import { ReactElement } from 'react'; import { BaseComponent, @@ -167,11 +167,11 @@ export default class JoinChannelVideo ); } - protected renderUsers(): React.ReactNode { + protected renderUsers(): ReactElement | undefined { return super.renderUsers(); } - protected renderVideo(user: VideoCanvas): ReactElement { + protected renderVideo(user: VideoCanvas): ReactElement | undefined { return super.renderVideo(user); } } diff --git a/example/src/renderer/examples/basic/StringUid/StringUid.tsx b/example/src/renderer/examples/basic/StringUid/StringUid.tsx index ba8d2aa6d..deba47464 100644 --- a/example/src/renderer/examples/basic/StringUid/StringUid.tsx +++ b/example/src/renderer/examples/basic/StringUid/StringUid.tsx @@ -8,7 +8,7 @@ import { UserOfflineReasonType, createAgoraRtcEngine, } from 'agora-electron-sdk'; -import React from 'react'; +import React, { ReactElement } from 'react'; import { BaseAudioComponentState, @@ -146,7 +146,7 @@ export default class StringUid this.info('LocalUserRegistered', uid, userAccount); } - protected renderConfiguration(): React.ReactNode { + protected renderConfiguration(): ReactElement | undefined { const { userAccount, joinChannelSuccess } = this.state; return ( <> @@ -162,7 +162,7 @@ export default class StringUid ); } - protected renderAction(): React.ReactNode { + protected renderAction(): ReactElement | undefined { const { joinChannelSuccess } = this.state; return ( <> diff --git a/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx b/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx index 2684528ef..ea57db693 100644 --- a/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx +++ b/example/src/renderer/examples/hook/AudioMixing/AudioMixing.tsx @@ -3,7 +3,7 @@ import { AudioMixingStateType, ClientRoleType, } from 'agora-electron-sdk'; -import React, { ReactNode, useCallback, useEffect, useState } from 'react'; +import React, { ReactElement, useCallback, useEffect, useState } from 'react'; import { AgoraButton, @@ -191,7 +191,7 @@ export default function AudioMixing() { /> ); - function renderConfiguration(): ReactNode { + function renderConfiguration(): ReactElement | undefined { return ( <> ); - function renderConfiguration(): ReactNode { + function renderConfiguration(): ReactElement | undefined { return ( <> ); - function renderConfiguration(): ReactNode { + function renderConfiguration(): ReactElement | undefined { return ( <> ); - function renderChannel(): ReactNode { + function renderChannel(): ReactElement | undefined { return ( <> {startPreview || joinChannelSuccess || joinChannelSuccess2 ? ( @@ -354,7 +348,7 @@ export default function JoinMultipleChannel() { user: VideoCanvas, channelId?: string, localUid?: number - ): ReactElement { + ): ReactElement | undefined { return ( Click view to mirror @@ -363,7 +357,7 @@ export default function JoinMultipleChannel() { ); } - function renderAction(): ReactNode { + function renderAction(): ReactElement | undefined { return ( <> ); - function renderUsers(): ReactNode { + function renderUsers(): ReactElement | undefined { return ( <> ); - function renderConfiguration(): ReactNode { + function renderConfiguration(): ReactElement | undefined { return ( <> ); - function renderConfiguration(): ReactNode { + function renderConfiguration(): ReactElement | undefined { return ( <> ); - function renderConfiguration(): ReactNode { + function renderConfiguration(): ReactElement | undefined { return ( <> ReactNode; - renderChannel: () => ReactNode; - renderUsers?: () => ReactNode; - renderAction?: () => ReactNode; + renderConfiguration?: () => ReactElement | undefined; + renderChannel: () => ReactElement | undefined; + renderUsers?: () => ReactElement | undefined; + renderAction?: () => ReactElement | undefined; } export function BaseComponent({ diff --git a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx index 40de46960..52be89cba 100644 --- a/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx +++ b/example/src/renderer/examples/hook/components/BaseRenderUsers.tsx @@ -13,8 +13,8 @@ export interface BaseRenderUsersProps { startPreview?: boolean; joinChannelSuccess: boolean; remoteUsers: number[]; - renderUser?: (user: VideoCanvas) => ReactElement; - renderVideo?: (user: VideoCanvas) => ReactElement; + renderUser?: (user: VideoCanvas) => ReactElement | undefined; + renderVideo?: (user: VideoCanvas) => ReactElement | undefined; } function BaseRenderUsers({ From 5e1ac16c349ca4d3664301ffe4501bcb7dba3480 Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 25 May 2023 14:51:34 +0800 Subject: [PATCH 73/74] ci: optimize --- .github/actions/doc/action.yml | 3 ++- .github/stale.yml | 2 +- .github/workflows/build.yml | 7 ++++--- .github/workflows/ci.yml | 2 -- .github/workflows/doc.yml | 2 +- .github/workflows/gitleaks.yml | 2 ++ .github/workflows/publish.yml | 4 ++-- .github/workflows/terra.yml | 2 +- 8 files changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/actions/doc/action.yml b/.github/actions/doc/action.yml index a154172fa..c44b14997 100644 --- a/.github/actions/doc/action.yml +++ b/.github/actions/doc/action.yml @@ -1,5 +1,6 @@ -name: doc +name: Doc description: Generate comments + inputs: target-path: description: The path to generate comments, if set, will skip clone & pr diff --git a/.github/stale.yml b/.github/stale.yml index dc90e5a1c..84b869b1d 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -7,7 +7,7 @@ exemptLabels: - pinned - security # Label to use when marking an issue as stale -staleLabel: wontfix +staleLabel: inactivity # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index afb44ba24..799aa11eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,5 @@ -name: Build Addon -run-name: ${{ github.actor }} triggered this job +name: Build API Example / Addon + on: workflow_call: inputs: @@ -20,8 +20,9 @@ on: - sdk release: types: [ published ] + jobs: - reusable_workflow_job: + build: runs-on: ubuntu-latest steps: - name: Build diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e2aeca60d..c638e5a53 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,9 +28,7 @@ jobs: - name: Typecheck files run: | - set +e yarn example install --frozen-lockfile - set -e yarn typecheck build: diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 0594c2f6e..de6d997a5 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -1,5 +1,5 @@ name: Generate comments -run-name: ${{ github.actor }} triggered this job + on: workflow_dispatch: diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml index 0c41d6f39..dc9efd47a 100644 --- a/.github/workflows/gitleaks.yml +++ b/.github/workflows/gitleaks.yml @@ -1,10 +1,12 @@ name: gitleaks + on: pull_request: push: workflow_dispatch: schedule: - cron: "0 4 * * *" # run once a day at 4 AM + jobs: scan: name: gitleaks diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 889695545..561255ba5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,5 +1,5 @@ name: Publish to NPM -run-name: ${{ github.actor }} triggered this job + on: workflow_dispatch: inputs: @@ -65,4 +65,4 @@ jobs: - name: Release if: ${{ !inputs.dry-run }} run: | - yarn release ${{ inputs.increment }} --ci --no-npm --no-git.commit \ No newline at end of file + yarn release ${{ inputs.increment }} --ci --no-npm --no-git.commit diff --git a/.github/workflows/terra.yml b/.github/workflows/terra.yml index 011b74e0a..b783d75a5 100644 --- a/.github/workflows/terra.yml +++ b/.github/workflows/terra.yml @@ -1,5 +1,5 @@ name: Generate codes -run-name: ${{ github.actor }} triggered this job + on: workflow_dispatch: From a049fba73e924a1e1e3e0033fc5877c10a19ec5d Mon Sep 17 00:00:00 2001 From: HUI Date: Thu, 25 May 2023 18:10:01 +0800 Subject: [PATCH 74/74] chore: update iris 4.2.0-build.3 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7db71e472..86dc7cae0 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "yuv-canvas": "1.2.6" }, "agora_electron": { - "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-build.2_DCG_Windows_Video_20230524_0304.zip", - "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-build.2_DCG_Mac_Video_20230524_0307.zip" + "iris_sdk_win": "https://download.agora.io/sdk/release/iris_4.2.0-build.3_DCG_Windows_Video_20230525_0541.zip", + "iris_sdk_mac": "https://download.agora.io/sdk/release/iris_4.2.0-build.3_DCG_Mac_Video_20230525_0545.zip" } }