From d8275d203539099425466261234571bb6725d293 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Mon, 6 Feb 2023 13:09:43 +0200 Subject: [PATCH] UI: Angular 14 migration --- ui-ngx/angular.json | 10 +- ui-ngx/extra-webpack.config.js | 17 +- ui-ngx/package.json | 15 +- .../src/app/core/api/widget-subscription.ts | 127 ++++--- ui-ngx/src/app/core/http/widget.service.ts | 16 +- ui-ngx/src/app/core/services/raf.service.ts | 4 +- .../app/core/services/resources.service.ts | 4 +- ...vice-credentials-lwm2m-server.component.ts | 4 +- .../device-credentials-lwm2m.component.ts | 2 +- ...device-credentials-mqtt-basic.component.ts | 2 +- .../device/device-credentials.component.ts | 2 +- .../filter/key-filter-dialog.component.ts | 2 +- ...ofile-transport-configuration.component.ts | 2 +- .../common/power-mode-setting.component.ts | 2 +- .../common/time-unit-select.component.ts | 2 +- .../device-profile-configuration.component.ts | 2 +- .../lwm2m-attributes-key-list.component.ts | 2 +- .../lwm2m/lwm2m-attributes.component.ts | 2 +- .../lwm2m-device-config-server.component.ts | 2 +- ...ofile-transport-configuration.component.ts | 7 +- ...erve-attr-telemetry-resources.component.ts | 2 +- ...ofile-transport-configuration.component.ts | 2 +- ...-profile-communication-config.component.ts | 2 +- ...ofile-transport-configuration.component.ts | 2 +- .../rate-limits/rate-limits-list.component.ts | 2 +- .../vc/entity-types-version-load.component.ts | 7 +- .../lib/multiple-input-widget.component.ts | 2 +- .../widget/lib/rpc/switch.component.ts | 2 +- .../widget/widget-component.service.ts | 2 +- .../components/widget/widget.component.ts | 7 +- .../entity/entities-table-config.models.ts | 11 +- .../home/pages/admin/admin-routing.module.ts | 1 + .../home/pages/admin/mail-server.component.ts | 2 +- .../resource/resources-library.component.ts | 2 +- ...evice-transport-configuration.component.ts | 2 +- ...evice-transport-configuration.component.ts | 2 +- .../device-credentials-dialog.component.ts | 7 +- .../home/pages/edge/edge-routing.module.ts | 1 + .../pages/ota-update/ota-update.component.ts | 2 +- .../pages/profiles/profiles-routing.module.ts | 1 + .../rulechain/rulechain-page.component.ts | 13 +- .../components/circular-progress.directive.ts | 11 +- .../dashboard-autocomplete.component.ts | 2 +- .../entity/entity-autocomplete.component.ts | 2 +- .../components/fab-toolbar.component.ts | 8 +- .../react/styles/thingsboardTheme.ts | 20 +- .../shared/components/markdown.component.ts | 2 +- .../components/phone-input.component.ts | 2 +- .../shared/components/popover.component.ts | 2 +- .../app/shared/components/popover.service.ts | 5 +- .../time/timezone-select.component.ts | 2 +- .../models/telemetry/telemetry.models.ts | 18 +- ui-ngx/yarn.lock | 333 ++++++++++++++++-- 53 files changed, 487 insertions(+), 220 deletions(-) diff --git a/ui-ngx/angular.json b/ui-ngx/angular.json index 70aef8816b..a875eed727 100644 --- a/ui-ngx/angular.json +++ b/ui-ngx/angular.json @@ -132,7 +132,15 @@ "qrcode", "wcwidth", "leaflet-polylinedecorator", - "ace-diff" + "ace-diff", + "messageformat-parser", + "html2canvas", + "jszip", + "moment", + "ace", + "ace-builds", + "diff-match-patch", + "tv4" ] }, "configurations": { diff --git a/ui-ngx/extra-webpack.config.js b/ui-ngx/extra-webpack.config.js index d7ba4f47a5..c4d6e7f843 100644 --- a/ui-ngx/extra-webpack.config.js +++ b/ui-ngx/extra-webpack.config.js @@ -29,6 +29,11 @@ dirTree("./src/assets/locale/", {extensions: /\.json$/}, (item) => { }); module.exports = (config, options) => { + + config.ignoreWarnings.push(/Usage of '~' in imports is deprecated/); + config.ignoreWarnings.push(/Did you mean "left" instead?/); + config.ignoreWarnings.push(/autoprefixer/); + config.plugins.push( new webpack.DefinePlugin({ TB_VERSION: JSON.stringify(require("./package.json").version), @@ -59,20 +64,20 @@ module.exports = (config, options) => { }) ); - const index = config.plugins.findIndex(p => p instanceof ngWebpack.ivy.AngularWebpackPlugin || p instanceof ngWebpack.AngularWebpackPlugin); + config.module.rules[2].use[0].options.aot = false; + const index = config.plugins.findIndex(p => p instanceof ngWebpack.AngularWebpackPlugin); let angularWebpackPlugin = config.plugins[index]; - if (config.mode === 'production') { const angularCompilerOptions = angularWebpackPlugin.pluginOptions; angularCompilerOptions.emitClassMetadata = true; angularCompilerOptions.emitNgModuleScope = true; config.plugins.splice(index, 1); - angularWebpackPlugin = new ngWebpack.ivy.AngularWebpackPlugin(angularCompilerOptions); + angularWebpackPlugin = new ngWebpack.AngularWebpackPlugin(angularCompilerOptions); config.plugins.push(angularWebpackPlugin); - const javascriptOptimizerOptions = config.optimization.minimizer[1].options; + const javascriptOptimizerOptions = config.optimization.minimizer[0].options; delete javascriptOptimizerOptions.define.ngJitMode; - config.optimization.minimizer.splice(1, 1); - config.optimization.minimizer.push(new JavaScriptOptimizerPlugin(javascriptOptimizerOptions)); + config.optimization.minimizer.splice(0, 1); + config.optimization.minimizer.unshift(new JavaScriptOptimizerPlugin(javascriptOptimizerOptions)); } addTransformerToAngularWebpackPlugin(angularWebpackPlugin, keysTransformer); diff --git a/ui-ngx/package.json b/ui-ngx/package.json index 50d4771b3d..3b678cf42d 100644 --- a/ui-ngx/package.json +++ b/ui-ngx/package.json @@ -26,8 +26,8 @@ "@angular/platform-browser-dynamic": "^14.2.12", "@angular/router": "^14.2.12", "@auth0/angular-jwt": "^5.1.2", - "@date-io/core": "1.3.6", - "@date-io/date-fns": "1.3.6", + "@date-io/core": "1.3.7", + "@date-io/date-fns": "1.3.7", "@flowjs/flow.js": "^2.14.1", "@flowjs/ngx-flow": "~0.6.0", "@geoman-io/leaflet-geoman-free": "^2.13.0", @@ -94,7 +94,7 @@ "screenfull": "^6.0.2", "split.js": "^1.6.5", "systemjs": "6.11.0", - "tinycolor2": "^1.5.2", + "tinycolor2": "~1.4.2", "tooltipster": "^4.2.8", "ts-transformer-keys": "^0.4.4", "tslib": "^2.4.1", @@ -117,6 +117,7 @@ "@types/ace-diff": "^2.1.1", "@types/canvas-gauges": "^2.1.4", "@types/flot": "^0.0.32", + "@types/flowjs": "^2.13.9", "@types/jasmine": "~3.10.2", "@types/jasminewd2": "^2.0.10", "@types/jquery": "^3.5.9", @@ -142,6 +143,9 @@ "compression-webpack-plugin": "^10.0.0", "directory-tree": "^3.5.1", "eslint": "^8.28.0", + "eslint-plugin-import": "latest", + "eslint-plugin-jsdoc": "latest", + "eslint-plugin-prefer-arrow": "latest", "jasmine-core": "~3.10.1", "jasmine-spec-reporter": "~7.0.0", "karma": "~6.3.9", @@ -160,6 +164,7 @@ }, "resolutions": { "@types/react": "17.0.37", - "ace-builds": "1.4.13" + "ace-builds": "1.4.13", + "@date-io/core": "1.3.7" } -} \ No newline at end of file +} diff --git a/ui-ngx/src/app/core/api/widget-subscription.ts b/ui-ngx/src/app/core/api/widget-subscription.ts index 6d6f5b5245..5d3eae16e3 100644 --- a/ui-ngx/src/app/core/api/widget-subscription.ts +++ b/ui-ngx/src/app/core/api/widget-subscription.ts @@ -83,6 +83,59 @@ import { RpcStatus } from '@shared/models/rpc.models'; const moment = moment_; + +const calculateMin = (data: DataSet): number => { + if (data.length > 0) { + let result = Number(data[0][1]); + for (let i = 1; i < data.length; i++) { + result = Math.min(result, Number(data[i][1])); + } + return result; + } else { + return null; + } +}; + +const calculateMax = (data: DataSet): number => { + if (data.length > 0) { + let result = Number(data[0][1]); + for (let i = 1; i < data.length; i++) { + result = Math.max(result, Number(data[i][1])); + } + return result; + } else { + return null; + } +}; + +const calculateTotal = (data: DataSet): number => { + if (data.length > 0) { + let result = 0; + data.forEach((dataRow) => { + result += Number(dataRow[1]); + }); + return result; + } else { + return null; + } +}; + +const calculateAvg = (data: DataSet): number => { + if (data.length > 0) { + return calculateTotal(data) / data.length; + } else { + return null; + } +}; + +const calculateLatest = (data: DataSet): number => { + if (data.length > 0) { + return Number(data[data.length - 1][1]); + } else { + return null; + } +}; + export class WidgetSubscription implements IWidgetSubscription { id: string; @@ -151,7 +204,7 @@ export class WidgetSubscription implements IWidgetSubscription { targetDeviceAliasId: string; targetDeviceId: string; targetDeviceName: string; - executingSubjects: Array>; + executingSubjects: Array>; subscribed = false; hasLatestData = false; @@ -305,7 +358,7 @@ export class WidgetSubscription implements IWidgetSubscription { } private initRpc(): Observable { - const initRpcSubject = new ReplaySubject(); + const initRpcSubject = new ReplaySubject(); if (this.targetDeviceAliasIds && this.targetDeviceAliasIds.length > 0) { this.targetDeviceAliasId = this.targetDeviceAliasIds[0]; this.ctx.aliasController.resolveSingleEntityInfo(this.targetDeviceAliasId).subscribe( @@ -354,7 +407,7 @@ export class WidgetSubscription implements IWidgetSubscription { } private initAlarmSubscription(): Observable { - const initAlarmSubscriptionSubject = new ReplaySubject(1); + const initAlarmSubscriptionSubject = new ReplaySubject(1); this.loadStDiff().subscribe(() => { if (!this.ctx.aliasController) { this.hasResolvedData = true; @@ -387,7 +440,7 @@ export class WidgetSubscription implements IWidgetSubscription { private initDataSubscription(): Observable { this.notifyDataLoading(); - const initDataSubscriptionSubject = new ReplaySubject(1); + const initDataSubscriptionSubject = new ReplaySubject(1); this.loadStDiff().subscribe(() => { if (!this.ctx.aliasController) { this.configuredDatasources = deepClone(this.configuredDatasources); @@ -459,9 +512,7 @@ export class WidgetSubscription implements IWidgetSubscription { initialPageDataChanged: this.initialPageDataChanged.bind(this), forceReInit: this.forceReInit.bind(this), dataUpdated: this.dataUpdated.bind(this), - updateRealtimeSubscription: () => { - return this.updateRealtimeSubscription(); - }, + updateRealtimeSubscription: () => this.updateRealtimeSubscription(), setRealtimeSubscription: (subscriptionTimewindow) => { this.updateRealtimeSubscription(deepClone(subscriptionTimewindow)); } @@ -762,7 +813,7 @@ export class WidgetSubscription implements IWidgetSubscription { if (timeout && timeout > 0) { requestBody.timeout = timeout; } - const rpcSubject: Subject = new Subject(); + const rpcSubject: Subject = oneWayElseTwoWay ? new Subject() : new Subject(); this.executingRpcRequest = true; this.callbacks.rpcStateChanged(this); if (this.ctx.utils.widgetEditMode) { @@ -770,7 +821,7 @@ export class WidgetSubscription implements IWidgetSubscription { this.executingRpcRequest = false; this.callbacks.rpcStateChanged(this); if (oneWayElseTwoWay) { - rpcSubject.next(); + (rpcSubject as Subject).next(); rpcSubject.complete(); } else { rpcSubject.next(requestBody); @@ -911,9 +962,7 @@ export class WidgetSubscription implements IWidgetSubscription { this.dataLoaded(pageData, data1, datasourceIndex1, pageLink1, true); }, dataUpdated: this.dataUpdated.bind(this), - updateRealtimeSubscription: () => { - return this.updateRealtimeSubscription(); - }, + updateRealtimeSubscription: () => this.updateRealtimeSubscription(), setRealtimeSubscription: (subscriptionTimewindow) => { this.updateRealtimeSubscription(deepClone(subscriptionTimewindow)); } @@ -1560,7 +1609,7 @@ export class WidgetSubscription implements IWidgetSubscription { } private loadStDiff(): Observable { - const loadSubject = new ReplaySubject(1); + const loadSubject = new ReplaySubject(1); if (this.ctx.getServerTimeDiff && this.timeWindow) { this.ctx.getServerTimeDiff().subscribe( (stDiff) => { @@ -1584,55 +1633,3 @@ export class WidgetSubscription implements IWidgetSubscription { return loadSubject.asObservable(); } } - -function calculateMin(data: DataSet): number { - if (data.length > 0) { - let result = Number(data[0][1]); - for (let i = 1; i < data.length; i++) { - result = Math.min(result, Number(data[i][1])); - } - return result; - } else { - return null; - } -} - -function calculateMax(data: DataSet): number { - if (data.length > 0) { - let result = Number(data[0][1]); - for (let i = 1; i < data.length; i++) { - result = Math.max(result, Number(data[i][1])); - } - return result; - } else { - return null; - } -} - -function calculateAvg(data: DataSet): number { - if (data.length > 0) { - return calculateTotal(data) / data.length; - } else { - return null; - } -} - -function calculateTotal(data: DataSet): number { - if (data.length > 0) { - let result = 0; - data.forEach((dataRow) => { - result += Number(dataRow[1]); - }); - return result; - } else { - return null; - } -} - -function calculateLatest(data: DataSet): number { - if (data.length > 0) { - return Number(data[data.length - 1][1]); - } else { - return null; - } -} diff --git a/ui-ngx/src/app/core/http/widget.service.ts b/ui-ngx/src/app/core/http/widget.service.ts index a19d7adcb6..2b33057454 100644 --- a/ui-ngx/src/app/core/http/widget.service.ts +++ b/ui-ngx/src/app/core/http/widget.service.ts @@ -51,7 +51,7 @@ export class WidgetService { private widgetsInfoInMemoryCache = new Map(); - private loadWidgetsBundleCacheSubject: ReplaySubject; + private loadWidgetsBundleCacheSubject: ReplaySubject; constructor( private http: HttpClient, @@ -111,15 +111,13 @@ export class WidgetService { public deleteWidgetsBundle(widgetsBundleId: string, config?: RequestConfig) { return this.getWidgetsBundle(widgetsBundleId, config).pipe( - mergeMap((widgetsBundle) => { - return this.http.delete(`/api/widgetsBundle/${widgetsBundleId}`, + mergeMap((widgetsBundle) => this.http.delete(`/api/widgetsBundle/${widgetsBundleId}`, defaultHttpOptionsFromConfig(config)).pipe( tap(() => { this.invalidateWidgetsBundleCache(); this.widgetsBundleDeleted(widgetsBundle); }) - ); - } + ) )); } @@ -232,14 +230,12 @@ export class WidgetService { public deleteWidgetType(bundleAlias: string, widgetTypeAlias: string, isSystem: boolean, config?: RequestConfig) { return this.getWidgetType(bundleAlias, widgetTypeAlias, isSystem, config).pipe( - mergeMap((widgetTypeInstance) => { - return this.http.delete(`/api/widgetType/${widgetTypeInstance.id.id}`, + mergeMap((widgetTypeInstance) => this.http.delete(`/api/widgetType/${widgetTypeInstance.id.id}`, defaultHttpOptionsFromConfig(config)).pipe( tap(() => { this.widgetTypeUpdated(widgetTypeInstance); }) - ); - } + ) )); } @@ -301,7 +297,7 @@ export class WidgetService { private loadWidgetsBundleCache(config?: RequestConfig): Observable { if (!this.allWidgetsBundles) { if (!this.loadWidgetsBundleCacheSubject) { - this.loadWidgetsBundleCacheSubject = new ReplaySubject(); + this.loadWidgetsBundleCacheSubject = new ReplaySubject(); this.http.get>('/api/widgetsBundles', defaultHttpOptionsFromConfig(config)).subscribe( (allWidgetsBundles) => { diff --git a/ui-ngx/src/app/core/services/raf.service.ts b/ui-ngx/src/app/core/services/raf.service.ts index 3fa2775409..c5897cc961 100644 --- a/ui-ngx/src/app/core/services/raf.service.ts +++ b/ui-ngx/src/app/core/services/raf.service.ts @@ -33,9 +33,9 @@ export class RafService { private ngZone: NgZone ) { const requestAnimationFrame: (frameCallback: () => void) => number = window.requestAnimationFrame || - window.webkitRequestAnimationFrame; + (window as any).webkitRequestAnimationFrame; const cancelAnimationFrame = window.cancelAnimationFrame || - window.webkitCancelAnimationFrame || + (window as any).webkitCancelAnimationFrame || // @ts-ignore window.webkitCancelRequestAnimationFrame; diff --git a/ui-ngx/src/app/core/services/resources.service.ts b/ui-ngx/src/app/core/services/resources.service.ts index 5170cc11c7..b34cec5eb0 100644 --- a/ui-ngx/src/app/core/services/resources.service.ts +++ b/ui-ngx/src/app/core/services/resources.service.ts @@ -40,7 +40,7 @@ export interface ModulesWithFactories { }) export class ResourcesService { - private loadedResources: { [url: string]: ReplaySubject } = {}; + private loadedResources: { [url: string]: ReplaySubject } = {}; private loadedModules: { [url: string]: ReplaySubject[]> } = {}; private loadedModulesAndFactories: { [url: string]: ReplaySubject } = {}; @@ -214,7 +214,7 @@ export class ResourcesService { } private loadResourceByType(type: 'css' | 'js', url: string): Observable { - const subject = new ReplaySubject(); + const subject = new ReplaySubject(); this.loadedResources[url] = subject; let el; let loaded = false; diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m-server.component.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m-server.component.ts index a095727582..202f676d34 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m-server.component.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m-server.component.ts @@ -62,7 +62,7 @@ export class DeviceCredentialsLwm2mServerComponent implements OnDestroy, Control publicKeyOrIdTooltipNamesMap = Lwm2mPublicKeyOrIdTooltipTranslationsMap; clientSecretKeyTooltipNamesMap = Lwm2mClientSecretKeyTooltipTranslationsMap; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => {}; constructor(private fb: UntypedFormBuilder) { @@ -148,5 +148,5 @@ export class DeviceCredentialsLwm2mServerComponent implements OnDestroy, Control this.serverFormGroup.get('clientPublicKeyOrId').enable({emitEvent: false}); this.serverFormGroup.get('clientSecretKey').enable(); - } + }; } diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m.component.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m.component.ts index c1e2f84be3..6b345bb931 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m.component.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials-lwm2m.component.ts @@ -62,7 +62,7 @@ export class DeviceCredentialsLwm2mComponent implements ControlValueAccessor, Va credentialTypeLwM2MNamesMap = Lwm2mSecurityTypeTranslationMap; clientKeyTooltipNamesMap = Lwm2mClientKeyTooltipTranslationsMap; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => {}; constructor(private fb: UntypedFormBuilder) { diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials-mqtt-basic.component.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials-mqtt-basic.component.ts index 93f6e4a26f..4db3b51146 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials-mqtt-basic.component.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials-mqtt-basic.component.ts @@ -54,7 +54,7 @@ export class DeviceCredentialsMqttBasicComponent implements ControlValueAccessor deviceCredentialsMqttFormGroup: UntypedFormGroup; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => {}; constructor(public fb: UntypedFormBuilder) { diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials.component.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials.component.ts index 9f848bf10f..2e2f20eb24 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials.component.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials.component.ts @@ -73,7 +73,7 @@ export class DeviceCredentialsComponent implements ControlValueAccessor, OnInit, } } - private destroy$ = new Subject(); + private destroy$ = new Subject(); deviceCredentialsFormGroup: UntypedFormGroup; diff --git a/ui-ngx/src/app/modules/home/components/filter/key-filter-dialog.component.ts b/ui-ngx/src/app/modules/home/components/filter/key-filter-dialog.component.ts index 149c7cdc74..d8b1a21f6a 100644 --- a/ui-ngx/src/app/modules/home/components/filter/key-filter-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/filter/key-filter-dialog.component.ts @@ -63,7 +63,7 @@ export class KeyFilterDialogComponent extends private dirty = false; private entityKeysName: Observable>; - private destroy$ = new Subject(); + private destroy$ = new Subject(); keyFilterFormGroup: UntypedFormGroup; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/coap-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/coap-device-profile-transport-configuration.component.ts index 114f19d381..81b1c1ac1f 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/coap-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/coap-device-profile-transport-configuration.component.ts @@ -57,7 +57,7 @@ export class CoapDeviceProfileTransportConfigurationComponent implements Control coapTransportConfigurationFormGroup: UntypedFormGroup; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private requiredValue: boolean; private transportPayloadTypeConfiguration = this.fb.group({ diff --git a/ui-ngx/src/app/modules/home/components/profile/device/common/power-mode-setting.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/common/power-mode-setting.component.ts index 8311f3006a..2fe8201486 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/common/power-mode-setting.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/common/power-mode-setting.component.ts @@ -35,7 +35,7 @@ export class PowerModeSettingComponent implements OnInit, OnDestroy { powerMods = Object.values(PowerMode); powerModeTranslationMap = PowerModeTranslationMap; - private destroy$ = new Subject(); + private destroy$ = new Subject(); @Input() parentForm: UntypedFormGroup; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/common/time-unit-select.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/common/time-unit-select.component.ts index e59547b022..2d1b0787cf 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/common/time-unit-select.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/common/time-unit-select.component.ts @@ -67,7 +67,7 @@ export class TimeUnitSelectComponent implements OnInit, OnDestroy, ControlValueA timeUnits = Object.values({...TimeUnitMilli, ...TimeUnit}).filter(item => item !== TimeUnit.DAYS); timeUnitTranslations = timeUnitTranslationMap; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private timeUnitToTimeMap = new Map( [ diff --git a/ui-ngx/src/app/modules/home/components/profile/device/device-profile-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/device-profile-configuration.component.ts index e3252ddc2d..c3feba7ed9 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/device-profile-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/device-profile-configuration.component.ts @@ -40,7 +40,7 @@ export class DeviceProfileConfigurationComponent implements ControlValueAccessor deviceProfileConfigurationFormGroup: UntypedFormGroup; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private requiredValue: boolean; get required(): boolean { diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes-key-list.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes-key-list.component.ts index 89d5888b6f..41f6786871 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes-key-list.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes-key-list.component.ts @@ -71,7 +71,7 @@ export class Lwm2mAttributesKeyListComponent extends PageComponent implements Co private propagateChange = null; private valueChange$: Subscription = null; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private usedAttributesName: AttributeName[] = []; constructor(protected store: Store, diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes.component.ts index b00783219b..38a1db3022 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-attributes.component.ts @@ -38,7 +38,7 @@ export class Lwm2mAttributesComponent implements ControlValueAccessor, OnDestroy attributesFormGroup: UntypedFormGroup; private requiredValue: boolean; - private destroy$ = new Subject(); + private destroy$ = new Subject(); @Input() isAttributeTelemetry: boolean; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts index 6bb22707b0..1a560736e0 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts @@ -59,7 +59,7 @@ import { export class Lwm2mDeviceConfigServerComponent implements OnInit, ControlValueAccessor, Validator, OnDestroy { public disabled = false; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private isDataLoadedIntoCache = false; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts index 185d4ac713..5d1b6ad380 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts @@ -46,7 +46,6 @@ import { } from './lwm2m-profile-config.models'; import { DeviceProfileService } from '@core/http/device-profile.service'; import { deepClone, isDefinedAndNotNull, isEmpty, isUndefined } from '@core/utils'; -import { JsonArray, JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point'; import { Direction } from '@shared/models/page/sort-order'; import _ from 'lodash'; import { Subject } from 'rxjs'; @@ -77,7 +76,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro public isTransportWasRunWithBootstrap = true; public isBootstrapServerUpdateEnable: boolean; private requiredValue: boolean; - private destroy$ = new Subject(); + private destroy$ = new Subject(); lwm2mDeviceProfileFormGroup: UntypedFormGroup; configurationValue: Lwm2mProfileConfigModels; @@ -417,7 +416,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro }); } - private validateKeyNameObjects = (nameJson: JsonObject, attributeArray: JsonArray, telemetryArray: JsonArray): {} => { + private validateKeyNameObjects = (nameJson: object, attributeArray: string[], telemetryArray: string[]): object => { const keyName = JSON.parse(JSON.stringify(nameJson)); const keyNameValidate = {}; const keyAttrTelemetry = attributeArray.concat(telemetryArray); @@ -427,7 +426,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } }); return keyNameValidate; - } + }; private updateObserveAttrTelemetryFromGroupToJson = (val: ObjectLwM2M[]): void => { const observeArray: Array = []; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resources.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resources.component.ts index 3047b7898b..fb4098057b 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resources.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resources.component.ts @@ -70,7 +70,7 @@ export class Lwm2mObserveAttrTelemetryResourcesComponent implements ControlValue } } - private destroy$ = new Subject(); + private destroy$ = new Subject(); private valueChange$: Subscription = null; private propagateChange = (v: any) => { }; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts index 16026573db..a60f4ec5c4 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts @@ -60,7 +60,7 @@ export class MqttDeviceProfileTransportConfigurationComponent implements Control mqttDeviceProfileTransportConfigurationFormGroup: UntypedFormGroup; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private requiredValue: boolean; get required(): boolean { diff --git a/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-communication-config.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-communication-config.component.ts index f021e54a5c..959fc51ec5 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-communication-config.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-communication-config.component.ts @@ -59,7 +59,7 @@ export class SnmpDeviceProfileCommunicationConfigComponent implements OnInit, On private usedSpecType: SnmpSpecType[] = []; private valueChange$: Subscription = null; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => { }; constructor(private fb: UntypedFormBuilder) { } diff --git a/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-transport-configuration.component.ts index 7814351289..d7112f9163 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/snmp/snmp-device-profile-transport-configuration.component.ts @@ -63,7 +63,7 @@ export class SnmpDeviceProfileTransportConfigurationComponent implements OnInit, snmpDeviceProfileTransportConfigurationFormGroup: UntypedFormGroup; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private requiredValue: boolean; get required(): boolean { diff --git a/ui-ngx/src/app/modules/home/components/profile/tenant/rate-limits/rate-limits-list.component.ts b/ui-ngx/src/app/modules/home/components/profile/tenant/rate-limits/rate-limits-list.component.ts index 19c907d700..3b6730a0e2 100644 --- a/ui-ngx/src/app/modules/home/components/profile/tenant/rate-limits/rate-limits-list.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/tenant/rate-limits/rate-limits-list.component.ts @@ -57,7 +57,7 @@ export class RateLimitsListComponent implements ControlValueAccessor, Validator, rateLimitsArray: Array; private valueChangeSubscription: Subscription = null; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => { }; constructor(private fb: UntypedFormBuilder) {} diff --git a/ui-ngx/src/app/modules/home/components/vc/entity-types-version-load.component.ts b/ui-ngx/src/app/modules/home/components/vc/entity-types-version-load.component.ts index b7882e900b..16d84af0c6 100644 --- a/ui-ngx/src/app/modules/home/components/vc/entity-types-version-load.component.ts +++ b/ui-ngx/src/app/modules/home/components/vc/entity-types-version-load.component.ts @@ -33,9 +33,8 @@ import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { TranslateService } from '@ngx-translate/core'; import { EntityType, entityTypeTranslations } from '@shared/models/entity-type.models'; -import { MatCheckbox } from '@angular/material/checkbox/checkbox'; +import { MatCheckbox } from '@angular/material/checkbox'; import { TbPopoverService } from '@shared/components/popover.service'; -import { EntityVersionCreateComponent } from '@home/components/vc/entity-version-create.component'; import { RemoveOtherEntitiesConfirmComponent } from '@home/components/vc/remove-other-entities-confirm.component'; @Component({ @@ -204,7 +203,7 @@ export class EntityTypesVersionLoadComponent extends PageComponent implements On allowedEntityTypes(entityTypeControl?: AbstractControl): Array { let res = [...exportableEntityTypes]; const currentEntityType: EntityType = entityTypeControl?.get('entityType')?.value; - const value: [{entityType: string, config: EntityTypeVersionLoadConfig}] = + const value: [{entityType: string; config: EntityTypeVersionLoadConfig}] = this.entityTypesVersionLoadFormGroup.get('entityTypes').value || []; const usedEntityTypes = value.map(val => val.entityType).filter(val => val); res = res.filter(entityType => !usedEntityTypes.includes(entityType) || entityType === currentEntityType); @@ -235,7 +234,7 @@ export class EntityTypesVersionLoadComponent extends PageComponent implements On } private updateModel() { - const value: [{entityType: string, config: EntityTypeVersionLoadConfig}] = + const value: [{entityType: string; config: EntityTypeVersionLoadConfig}] = this.entityTypesVersionLoadFormGroup.get('entityTypes').value || []; let modelValue: {[entityType: string]: EntityTypeVersionLoadConfig} = null; if (value && value.length) { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts index 4860567a63..51b6d6629f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/multiple-input-widget.component.ts @@ -134,7 +134,7 @@ export class MultipleInputWidgetComponent extends PageComponent implements OnIni private widgetConfig: WidgetConfig; private subscription: IWidgetSubscription; private datasources: Array; - private destroy$ = new Subject(); + private destroy$ = new Subject(); public sources: Array = []; private isSavingInProgress = false; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.ts index 9d51b2d181..15125fa459 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/rpc/switch.component.ts @@ -26,7 +26,7 @@ import { DatasourceType, widgetType } from '@shared/models/widget.models'; import { EntityType } from '@shared/models/entity-type.models'; import { MatSlideToggle } from '@angular/material/slide-toggle'; import { ResizeObserver } from '@juggle/resize-observer'; -import { ThemePalette } from '@angular/material/core/common-behaviors/color'; +import { ThemePalette } from '@angular/material/core'; const switchAspectRation = 2.7893; diff --git a/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts b/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts index 21430038a2..fe9f15260c 100644 --- a/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts +++ b/ui-ngx/src/app/modules/home/components/widget/widget-component.service.ts @@ -105,7 +105,7 @@ export class WidgetComponentService { }, new WidgetTypeId('1'), new TenantId( NULL_UUID ), 'customWidgetBundle', undefined ); } - const initSubject = new ReplaySubject(); + const initSubject = new ReplaySubject(); this.init$ = initSubject.asObservable(); const w = (this.window as any); diff --git a/ui-ngx/src/app/modules/home/components/widget/widget.component.ts b/ui-ngx/src/app/modules/home/components/widget/widget.component.ts index 64c4067f9a..f96ef46893 100644 --- a/ui-ngx/src/app/modules/home/components/widget/widget.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/widget.component.ts @@ -466,7 +466,8 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI } private loadFromWidgetInfo() { - this.widgetContext.widgetNamespace = `widget-type-${(this.widget.isSystemType ? 'sys-' : '')}${this.widget.bundleAlias}-${this.widget.typeAlias}`; + this.widgetContext.widgetNamespace = + `widget-type-${(this.widget.isSystemType ? 'sys-' : '')}${this.widget.bundleAlias}-${this.widget.typeAlias}`; const elem = this.elementRef.nativeElement; elem.classList.add('tb-widget'); elem.classList.add(this.widgetContext.widgetNamespace); @@ -691,7 +692,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI private initialize(): Observable { - const initSubject = new ReplaySubject(); + const initSubject = new ReplaySubject(); this.rxSubscriptions.push(this.widgetContext.aliasController.entityAliasesChanged.subscribe( (aliasIds) => { @@ -966,7 +967,7 @@ export class WidgetComponent extends PageComponent implements OnInit, AfterViewI } private createDefaultSubscription(): Observable { - const createSubscriptionSubject = new ReplaySubject(); + const createSubscriptionSubject = new ReplaySubject(); let options: WidgetSubscriptionOptions; if (this.widget.type !== widgetType.rpc && this.widget.type !== widgetType.static) { const comparisonSettings: WidgetComparisonSettings = this.widgetContext.settings; diff --git a/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts b/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts index 0091b670ff..1cce7d2899 100644 --- a/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts +++ b/ui-ngx/src/app/modules/home/models/entity/entities-table-config.models.ts @@ -32,7 +32,6 @@ import { EntityTabsComponent } from '../../components/entity/entity-tabs.compone import { DAY, historyInterval } from '@shared/models/time/time.models'; import { IEntitiesTableComponent } from '@home/models/entity/entity-table-component.models'; import { IEntityDetailsPageComponent } from '@home/models/entity/entity-details-page-component.models'; -import { templateJitUrl } from '@angular/compiler'; export type EntityBooleanFunction> = (entity: T) => boolean; export type EntityStringFunction> = (entity: T) => string; @@ -174,9 +173,8 @@ export class EntityTableConfig, P extends PageLink = P headerComponent: Type>; addEntity: CreateEntityOperation = null; dataSource: (dataLoadedFunction: (col?: number, row?: number) => void) - => EntitiesDataSource = (dataLoadedFunction: (col?: number, row?: number) => void) => { - return new EntitiesDataSource(this.entitiesFetchFunction, this.entitySelectionEnabled, dataLoadedFunction); - } + => EntitiesDataSource = (dataLoadedFunction: (col?: number, row?: number) => void) => + new EntitiesDataSource(this.entitiesFetchFunction, this.entitySelectionEnabled, dataLoadedFunction); detailsReadonly: EntityBooleanFunction = () => false; entitySelectionEnabled: EntityBooleanFunction = () => true; deleteEnabled: EntityBooleanFunction = () => true; @@ -244,6 +242,5 @@ export class EntityTableConfig, P extends PageLink = P } } -export function checkBoxCell(value: boolean): string { - return `${value ? 'check_box' : 'check_box_outline_blank'}`; -} +export const checkBoxCell = + (value: boolean): string => `${value ? 'check_box' : 'check_box_outline_blank'}`; diff --git a/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts b/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts index 167ea38472..ea34794a3c 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/admin/admin-routing.module.ts @@ -61,6 +61,7 @@ const routes: Routes = [ children: [ { path: '', + children: [], data: { auth: [Authority.SYS_ADMIN, Authority.TENANT_ADMIN], redirectTo: { diff --git a/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts b/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts index 839755ba15..7833c745f4 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts +++ b/ui-ngx/src/app/modules/home/pages/admin/mail-server.component.ts @@ -43,7 +43,7 @@ export class MailServerComponent extends PageComponent implements OnInit, OnDest tlsVersions = ['TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3']; - private destroy$ = new Subject(); + private destroy$ = new Subject(); constructor(protected store: Store, private router: Router, diff --git a/ui-ngx/src/app/modules/home/pages/admin/resource/resources-library.component.ts b/ui-ngx/src/app/modules/home/pages/admin/resource/resources-library.component.ts index cf6e03cf4f..078f87b5ef 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/resource/resources-library.component.ts +++ b/ui-ngx/src/app/modules/home/pages/admin/resource/resources-library.component.ts @@ -42,7 +42,7 @@ export class ResourcesLibraryComponent extends EntityComponent impleme readonly resourceTypes = Object.values(this.resourceType); readonly resourceTypesTranslationMap = ResourceTypeTranslationMap; - private destroy$ = new Subject(); + private destroy$ = new Subject(); constructor(protected store: Store, protected translate: TranslateService, diff --git a/ui-ngx/src/app/modules/home/pages/device/data/coap-device-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/pages/device/data/coap-device-transport-configuration.component.ts index ea33dfc5a8..17c8a89beb 100644 --- a/ui-ngx/src/app/modules/home/pages/device/data/coap-device-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/pages/device/data/coap-device-transport-configuration.component.ts @@ -54,7 +54,7 @@ export class CoapDeviceTransportConfigurationComponent implements ControlValueAc @Input() disabled: boolean; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => { }; constructor(private store: Store, diff --git a/ui-ngx/src/app/modules/home/pages/device/data/lwm2m-device-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/pages/device/data/lwm2m-device-transport-configuration.component.ts index 2e338fd45b..0f05849b62 100644 --- a/ui-ngx/src/app/modules/home/pages/device/data/lwm2m-device-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/pages/device/data/lwm2m-device-transport-configuration.component.ts @@ -54,7 +54,7 @@ export class Lwm2mDeviceTransportConfigurationComponent implements ControlValueA @Input() disabled: boolean; - private destroy$ = new Subject(); + private destroy$ = new Subject(); private propagateChange = (v: any) => { }; constructor(private store: Store, diff --git a/ui-ngx/src/app/modules/home/pages/device/device-credentials-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/device/device-credentials-dialog.component.ts index 5aaea41e92..41986b2b03 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device-credentials-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/pages/device/device-credentials-dialog.component.ts @@ -80,9 +80,10 @@ export class DeviceCredentialsDialogComponent extends } loadDeviceCredentials() { - const task = []; - task.push(this.deviceService.getDeviceCredentials(this.data.deviceId)); - task.push(this.deviceProfileService.getDeviceProfileInfo(this.data.deviceProfileId)); + const task = [ + this.deviceService.getDeviceCredentials(this.data.deviceId), + this.deviceProfileService.getDeviceProfileInfo(this.data.deviceProfileId) + ]; forkJoin(task).subscribe(([deviceCredentials, deviceProfile]: [DeviceCredentials, DeviceProfileInfo]) => { this.deviceTransportType = deviceProfile.transportType; this.deviceCredentials = deviceCredentials; diff --git a/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts b/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts index f983819b19..44e0c9c00f 100644 --- a/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/edge/edge-routing.module.ts @@ -296,6 +296,7 @@ const routes: Routes = [ children: [ { path: '', + children: [], data: { auth: [Authority.TENANT_ADMIN, Authority.CUSTOMER_USER], redirectTo: '/edgeManagement/ruleChains' diff --git a/ui-ngx/src/app/modules/home/pages/ota-update/ota-update.component.ts b/ui-ngx/src/app/modules/home/pages/ota-update/ota-update.component.ts index 2788a938d6..da479fa190 100644 --- a/ui-ngx/src/app/modules/home/pages/ota-update/ota-update.component.ts +++ b/ui-ngx/src/app/modules/home/pages/ota-update/ota-update.component.ts @@ -39,7 +39,7 @@ import { isNotEmptyStr } from '@core/utils'; }) export class OtaUpdateComponent extends EntityComponent implements OnInit, OnDestroy { - private destroy$ = new Subject(); + private destroy$ = new Subject(); checksumAlgorithms = Object.values(ChecksumAlgorithm); checksumAlgorithmTranslationMap = ChecksumAlgorithmTranslationMap; diff --git a/ui-ngx/src/app/modules/home/pages/profiles/profiles-routing.module.ts b/ui-ngx/src/app/modules/home/pages/profiles/profiles-routing.module.ts index 2f415eb906..8edb4f036b 100644 --- a/ui-ngx/src/app/modules/home/pages/profiles/profiles-routing.module.ts +++ b/ui-ngx/src/app/modules/home/pages/profiles/profiles-routing.module.ts @@ -33,6 +33,7 @@ const routes: Routes = [ children: [ { path: '', + children: [], data: { auth: [Authority.TENANT_ADMIN], redirectTo: '/profiles/deviceProfiles' diff --git a/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.ts b/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.ts index 5e88c5dd26..1f43d26198 100644 --- a/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.ts +++ b/ui-ngx/src/app/modules/home/pages/rulechain/rulechain-page.component.ts @@ -180,9 +180,8 @@ export class RuleChainPageComponent extends PageComponent mouseLeave: this.destroyTooltips.bind(this), mouseDown: this.destroyTooltips.bind(this) }, - isValidEdge: (source, destination) => { - return source.type === FlowchartConstants.rightConnectorType && destination.type === FlowchartConstants.leftConnectorType; - }, + isValidEdge: (source, destination) => + source.type === FlowchartConstants.rightConnectorType && destination.type === FlowchartConstants.leftConnectorType, createEdge: (event, edge: FcRuleEdge) => { const sourceNode = this.ruleChainCanvas.modelService.nodes.getNodeByConnectorId(edge.source) as FcRuleNode; if (sourceNode.component.type === RuleNodeType.INPUT) { @@ -226,7 +225,7 @@ export class RuleChainPageComponent extends PageComponent nextConnectorID: number; inputConnectorId: number; - ruleNodeTypesModel: {[type: string]: {model: FcRuleNodeTypeModel, selectedObjects: any[]}} = {}; + ruleNodeTypesModel: {[type: string]: {model: FcRuleNodeTypeModel; selectedObjects: any[]}} = {}; nodeLibCallbacks: UserCallbacks = { nodeCallbacks: { @@ -486,9 +485,7 @@ export class RuleChainPageComponent extends PageComponent }); if (this.expansionPanels) { for (let i = 0; i < ruleNodeTypesLibrary.length; i++) { - const panel = this.expansionPanels.find((item, index) => { - return index === i; - }); + const panel = this.expansionPanels.find((item, index) => index === i); if (panel) { const type = ruleNodeTypesLibrary[i]; if (!this.ruleNodeTypesModel[type].model.nodes.length) { @@ -1390,7 +1387,7 @@ export class RuleChainPageComponent extends PageComponent } saveRuleChain(): Observable { - const saveResult = new ReplaySubject(); + const saveResult = new ReplaySubject(); let saveRuleChainObservable: Observable; if (this.isImport) { saveRuleChainObservable = this.ruleChainService.saveRuleChain(this.ruleChain); diff --git a/ui-ngx/src/app/shared/components/circular-progress.directive.ts b/ui-ngx/src/app/shared/components/circular-progress.directive.ts index ab0b301ad0..cc1f7e7e2e 100644 --- a/ui-ngx/src/app/shared/components/circular-progress.directive.ts +++ b/ui-ngx/src/app/shared/components/circular-progress.directive.ts @@ -14,10 +14,11 @@ /// limitations under the License. /// -import { ComponentFactoryResolver, ComponentRef, Directive, ElementRef, Input, ViewContainerRef } from '@angular/core'; -import { MatSpinner } from '@angular/material/progress-spinner'; +import { ComponentRef, Directive, ElementRef, Input, ViewContainerRef } from '@angular/core'; +import { MatProgressSpinner } from '@angular/material/progress-spinner'; @Directive({ + // eslint-disable-next-line @angular-eslint/directive-selector selector: '[tb-circular-progress]' }) export class CircularProgressDirective { @@ -56,18 +57,16 @@ export class CircularProgressDirective { } } - spinnerRef: ComponentRef; + spinnerRef: ComponentRef; constructor(private elementRef: ElementRef, - private componentFactoryResolver: ComponentFactoryResolver, private viewContainerRef: ViewContainerRef) { this.createCircularProgress(); } createCircularProgress() { this.elementRef.nativeElement.style.position = 'relative'; - const factory = this.componentFactoryResolver.resolveComponentFactory(MatSpinner); - this.spinnerRef = this.viewContainerRef.createComponent(factory, 0); + this.spinnerRef = this.viewContainerRef.createComponent(MatProgressSpinner, {index: 0}); this.spinnerRef.instance.mode = 'indeterminate'; this.spinnerRef.instance.diameter = 20; const el = this.spinnerRef.instance._elementRef.nativeElement; diff --git a/ui-ngx/src/app/shared/components/dashboard-autocomplete.component.ts b/ui-ngx/src/app/shared/components/dashboard-autocomplete.component.ts index 5d92e72536..c92bd14aaa 100644 --- a/ui-ngx/src/app/shared/components/dashboard-autocomplete.component.ts +++ b/ui-ngx/src/app/shared/components/dashboard-autocomplete.component.ts @@ -29,7 +29,7 @@ import { getCurrentAuthUser } from '@app/core/auth/auth.selectors'; import { Authority } from '@shared/models/authority.enum'; import { TranslateService } from '@ngx-translate/core'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; -import { FloatLabelType } from '@angular/material/form-field/form-field'; +import { FloatLabelType } from '@angular/material/form-field'; @Component({ selector: 'tb-dashboard-autocomplete', diff --git a/ui-ngx/src/app/shared/components/entity/entity-autocomplete.component.ts b/ui-ngx/src/app/shared/components/entity/entity-autocomplete.component.ts index 034826c810..27feb73b67 100644 --- a/ui-ngx/src/app/shared/components/entity/entity-autocomplete.component.ts +++ b/ui-ngx/src/app/shared/components/entity/entity-autocomplete.component.ts @@ -25,7 +25,7 @@ import { Output, ViewChild } from '@angular/core'; -import { MatFormFieldAppearance } from '@angular/material/form-field/form-field'; +import { MatFormFieldAppearance } from '@angular/material/form-field'; import { ControlValueAccessor, UntypedFormBuilder, UntypedFormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; import { merge, Observable, of, Subject } from 'rxjs'; import { catchError, debounceTime, map, share, switchMap, tap } from 'rxjs/operators'; diff --git a/ui-ngx/src/app/shared/components/fab-toolbar.component.ts b/ui-ngx/src/app/shared/components/fab-toolbar.component.ts index 41f24859fd..e4584b6beb 100644 --- a/ui-ngx/src/app/shared/components/fab-toolbar.component.ts +++ b/ui-ngx/src/app/shared/components/fab-toolbar.component.ts @@ -28,7 +28,7 @@ import { ViewEncapsulation } from '@angular/core'; import { WINDOW } from '@core/services/window.service'; -import { CanColorCtor, mixinColor } from '@angular/material/core'; +import { _Constructor, CanColor, mixinColor, ThemePalette } from '@angular/material/core'; import { ResizeObserver } from '@juggle/resize-observer'; export declare type FabToolbarDirection = 'left' | 'right'; @@ -37,7 +37,7 @@ class MatFabToolbarBase { // eslint-disable-next-line @typescript-eslint/naming-convention, no-underscore-dangle, id-blacklist, id-match constructor(public _elementRef: ElementRef) {} } -const MatFabToolbarMixinBase: CanColorCtor & typeof MatFabToolbarBase = mixinColor(MatFabToolbarBase); +const MatFabToolbarMixinBase: _Constructor & typeof MatFabToolbarBase = mixinColor(MatFabToolbarBase); @Directive({ // eslint-disable-next-line @angular-eslint/directive-selector @@ -73,7 +73,6 @@ export class FabActionsDirective implements OnInit { selector: 'mat-fab-toolbar', templateUrl: './fab-toolbar.component.html', styleUrls: ['./fab-toolbar.component.scss'], - inputs: ['color'], encapsulation: ViewEncapsulation.None }) export class FabToolbarComponent extends MatFabToolbarMixinBase implements OnInit, OnDestroy, AfterViewInit, OnChanges { @@ -86,6 +85,9 @@ export class FabToolbarComponent extends MatFabToolbarMixinBase implements OnIni @Input() direction: FabToolbarDirection; + @Input() + color: ThemePalette; + constructor(private el: ElementRef, @Inject(WINDOW) private window: Window) { super(el); diff --git a/ui-ngx/src/app/shared/components/json-form/react/styles/thingsboardTheme.ts b/ui-ngx/src/app/shared/components/json-form/react/styles/thingsboardTheme.ts index e819906b3a..a0af0623dd 100644 --- a/ui-ngx/src/app/shared/components/json-form/react/styles/thingsboardTheme.ts +++ b/ui-ngx/src/app/shared/components/json-form/react/styles/thingsboardTheme.ts @@ -14,23 +14,7 @@ /// limitations under the License. /// -/* - * Copyright © 2016-2019 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import indigo from '@material-ui/core/colors/indigo'; -import deeepOrange from '@material-ui/core/colors/deepOrange'; +import { indigo, deepOrange } from '@material-ui/core/colors'; import { ThemeOptions } from '@material-ui/core/styles'; import { PaletteOptions } from '@material-ui/core/styles/createPalette'; import { mergeDeep } from '@core/utils'; @@ -48,7 +32,7 @@ const tbIndigo = mergeDeep({}, indigo, { const thingsboardPalette: PaletteOptions = { primary: tbIndigo, - secondary: deeepOrange, + secondary: deepOrange, background: { default: '#eee' } diff --git a/ui-ngx/src/app/shared/components/markdown.component.ts b/ui-ngx/src/app/shared/components/markdown.component.ts index a4e243799b..95c0ccd23b 100644 --- a/ui-ngx/src/app/shared/components/markdown.component.ts +++ b/ui-ngx/src/app/shared/components/markdown.component.ts @@ -88,7 +88,7 @@ export class TbMarkdownComponent implements OnChanges { } private render(markdown: string) { - const compiled = this.markdownService.compile(markdown, false); + const compiled = this.markdownService.parse(markdown, { decodeHtml: false }); let template = this.sanitizeCurlyBraces(compiled); let markdownClass = 'tb-markdown-view'; if (this.markdownClass) { diff --git a/ui-ngx/src/app/shared/components/phone-input.component.ts b/ui-ngx/src/app/shared/components/phone-input.component.ts index 4a2fbbe218..f5383405c3 100644 --- a/ui-ngx/src/app/shared/components/phone-input.component.ts +++ b/ui-ngx/src/app/shared/components/phone-input.component.ts @@ -31,7 +31,7 @@ import { TranslateService } from '@ngx-translate/core'; import { Country, CountryData } from '@shared/models/country.models'; import examples from 'libphonenumber-js/examples.mobile.json'; import { Subscription } from 'rxjs'; -import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field/form-field'; +import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field'; @Component({ selector: 'tb-phone-input', diff --git a/ui-ngx/src/app/shared/components/popover.component.ts b/ui-ngx/src/app/shared/components/popover.component.ts index 8dcfe03bb3..59fd8fd313 100644 --- a/ui-ngx/src/app/shared/components/popover.component.ts +++ b/ui-ngx/src/app/shared/components/popover.component.ts @@ -149,7 +149,7 @@ export class TbPopoverDirective implements OnChanges, OnDestroy, AfterViewInit { this.renderer.parentNode(this.elementRef.nativeElement), componentRef.location.nativeElement ); - this.component.setOverlayOrigin({ elementRef: this.origin || this.elementRef }); + this.component.setOverlayOrigin(new CdkOverlayOrigin(this.origin || this.elementRef)); this.initProperties(); diff --git a/ui-ngx/src/app/shared/components/popover.service.ts b/ui-ngx/src/app/shared/components/popover.service.ts index 5b5de8630f..f547200316 100644 --- a/ui-ngx/src/app/shared/components/popover.service.ts +++ b/ui-ngx/src/app/shared/components/popover.service.ts @@ -30,6 +30,7 @@ import { PopoverPlacement, PopoverWithTrigger } from '@shared/components/popover import { TbPopoverComponent } from '@shared/components/popover.component'; import { ComponentType } from '@angular/cdk/portal'; import { HELP_MARKDOWN_COMPONENT_TOKEN } from '@shared/components/tokens'; +import { CdkOverlayOrigin } from '@angular/cdk/overlay'; @Injectable() export class TbPopoverService { @@ -84,7 +85,7 @@ export class TbPopoverService { componentRef.location.nativeElement ); const originElementRef = new ElementRef(trigger); - component.setOverlayOrigin({ elementRef: originElementRef }); + component.setOverlayOrigin(new CdkOverlayOrigin(originElementRef)); component.tbPlacement = preferredPlacement; component.tbComponentFactory = this.resolver.resolveComponentFactory(componentType); component.tbComponentInjector = injector; @@ -132,7 +133,7 @@ export class TbPopoverService { const originElementRef = new ElementRef(trigger); component.tbAnimationState = 'void'; component.tbOverlayStyle = {...overlayStyle, opacity: '0' }; - component.setOverlayOrigin({ elementRef: originElementRef }); + component.setOverlayOrigin(new CdkOverlayOrigin(originElementRef)); component.tbPlacement = preferredPlacement; component.tbComponentFactory = this.resolver.resolveComponentFactory(this.helpMarkdownComponent); component.tbComponentInjector = injector; diff --git a/ui-ngx/src/app/shared/components/time/timezone-select.component.ts b/ui-ngx/src/app/shared/components/time/timezone-select.component.ts index f27cce674d..500598455e 100644 --- a/ui-ngx/src/app/shared/components/time/timezone-select.component.ts +++ b/ui-ngx/src/app/shared/components/time/timezone-select.component.ts @@ -16,7 +16,7 @@ import { AfterViewInit, Component, forwardRef, Input, NgZone, OnInit, ViewChild } from '@angular/core'; import { ControlValueAccessor, UntypedFormBuilder, UntypedFormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { MatFormFieldAppearance } from '@angular/material/form-field/form-field'; +import { MatFormFieldAppearance } from '@angular/material/form-field'; import { Observable, of } from 'rxjs'; import { map, mergeMap, share, tap } from 'rxjs/operators'; import { Store } from '@ngrx/store'; diff --git a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts index 6e0f205d07..78a3fc760c 100644 --- a/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts +++ b/ui-ngx/src/app/shared/models/telemetry/telemetry.models.ts @@ -60,13 +60,13 @@ export enum TelemetryFeature { export type TelemetryType = LatestTelemetry | AttributeScope; -export function toTelemetryType(val: string): TelemetryType { +export const toTelemetryType = (val: string): TelemetryType => { if (LatestTelemetry[val]) { return LatestTelemetry[val]; } else { return AttributeScope[val]; } -} +}; export const telemetryTypeTranslations = new Map( [ @@ -367,20 +367,20 @@ export interface EntityCountUpdateMsg extends CmdUpdateMsg { export type WebsocketDataMsg = AlarmDataUpdateMsg | EntityDataUpdateMsg | EntityCountUpdateMsg | SubscriptionUpdateMsg; -export function isEntityDataUpdateMsg(message: WebsocketDataMsg): message is EntityDataUpdateMsg { +export const isEntityDataUpdateMsg = (message: WebsocketDataMsg): message is EntityDataUpdateMsg => { const updateMsg = (message as CmdUpdateMsg); return updateMsg.cmdId !== undefined && updateMsg.cmdUpdateType === CmdUpdateType.ENTITY_DATA; -} +}; -export function isAlarmDataUpdateMsg(message: WebsocketDataMsg): message is AlarmDataUpdateMsg { +export const isAlarmDataUpdateMsg = (message: WebsocketDataMsg): message is AlarmDataUpdateMsg => { const updateMsg = (message as CmdUpdateMsg); return updateMsg.cmdId !== undefined && updateMsg.cmdUpdateType === CmdUpdateType.ALARM_DATA; -} +}; -export function isEntityCountUpdateMsg(message: WebsocketDataMsg): message is EntityCountUpdateMsg { +export const isEntityCountUpdateMsg = (message: WebsocketDataMsg): message is EntityCountUpdateMsg => { const updateMsg = (message as CmdUpdateMsg); return updateMsg.cmdId !== undefined && updateMsg.cmdUpdateType === CmdUpdateType.COUNT_DATA; -} +}; export class SubscriptionUpdate implements SubscriptionUpdateMsg { subscriptionId: number; @@ -574,7 +574,7 @@ export class TelemetrySubscriber { private entityDataSubject = new ReplaySubject(1); private alarmDataSubject = new ReplaySubject(1); private entityCountSubject = new ReplaySubject(1); - private reconnectSubject = new Subject(); + private reconnectSubject = new Subject(); private tsOffset = undefined; diff --git a/ui-ngx/yarn.lock b/ui-ngx/yarn.lock index 4d72e4ef71..63b438264e 100644 --- a/ui-ngx/yarn.lock +++ b/ui-ngx/yarn.lock @@ -1425,22 +1425,17 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== -"@date-io/core@1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.6.tgz#5c518cee6fa011e754293aebc6f1192360061797" - integrity sha512-cihiu8YaTHh7IqrzekbZcA7dh+7uhViHgWyxcKAO2cg1DYGYC5J7z4/rnGGL7swrK5xFVLIeyoxJ+sacziIRKg== - -"@date-io/core@1.x", "@date-io/core@^1.3.6": - version "1.3.13" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" - integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== +"@date-io/core@1.3.7", "@date-io/core@1.x", "@date-io/core@^1.3.7": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.7.tgz#c65d2979ee7696c0551d8f24df618b21b83cde4a" + integrity sha512-oHFBOjQskqrFngyDnJPOM1o4FVpKPyNe/aDtkj1HQEfCe7BV3cggwuTll0AOchNdiYY0yJEVyUl8Vi63HZxfBA== -"@date-io/date-fns@1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-1.3.6.tgz#556fa6d324361258b7fab02d9327f80a989a7ef0" - integrity sha512-fY55kQ0Js+oTE/i7CuQfjR/5L81rDXvYys47Py3Lt69kIOTY4KpPaw7MuE9B7dgCHOMfKHQ+LkyLApDcgPlYXA== +"@date-io/date-fns@1.3.7": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-1.3.7.tgz#723034fd1a71721331a951b35a2162f00cc86a3a" + integrity sha512-7TqK8xhCrWVY6L3/o/DfTXtJq7HV4KMiiQ6WPsR/mmvWXPrH5AFvjEAPJoFLBYEtX5KqpXbp5lRDwVlH9ZSVQw== dependencies: - "@date-io/core" "^1.3.6" + "@date-io/core" "^1.3.7" "@discoveryjs/json-ext@0.5.7": version "0.5.7" @@ -1452,6 +1447,15 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@es-joy/jsdoccomment@~0.36.1": + version "0.36.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz#c37db40da36e4b848da5fd427a74bae3b004a30f" + integrity sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg== + dependencies: + comment-parser "1.3.1" + esquery "^1.4.0" + jsdoc-type-pratt-parser "~3.1.0" + "@esbuild/linux-loong64@0.15.5": version "0.15.5" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz#91aef76d332cdc7c8942b600fa2307f3387e6f82" @@ -2113,6 +2117,11 @@ dependencies: "@types/jquery" "*" +"@types/flowjs@^2.13.9": + version "2.13.9" + resolved "https://registry.yarnpkg.com/@types/flowjs/-/flowjs-2.13.9.tgz#b280e977a7b9d8e26d4a09ceab43e23ad2f148e5" + integrity sha512-iItTP2tOL9NalAR3C9o+psuvoBLwmEFPf1xr9BlDojyynizLBTtLw2aqrlaiZJW4z/QUwz7ryXFm4FjxjWatTQ== + "@types/geojson@*": version "7946.0.10" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" @@ -2878,6 +2887,17 @@ array-flatten@^2.1.2: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -2895,6 +2915,26 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== +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" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -3480,6 +3520,11 @@ commander@^8.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +comment-parser@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -4057,7 +4102,7 @@ debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, de dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.6: +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -4241,6 +4286,13 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/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.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -4429,6 +4481,45 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + 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.3" + 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.4" + is-array-buffer "^3.0.1" + 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-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + 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-get-iterator@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -4449,6 +4540,31 @@ es-module-lexer@^0.9.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +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" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +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" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -4613,6 +4729,61 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +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-import@latest: + 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-jsdoc@latest: + version "39.7.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.7.5.tgz#473f9fd372a231a1dae5d55df70b1d0fb64f95da" + integrity sha512-6L90P0AnZcE4ra7nocolp9vTjgVr2wEZ7jPnEA/X30XAoQPk+wvnaq61n164Tf7Fg4QPpJtRSCPpApOsfWDdNA== + dependencies: + "@es-joy/jsdoccomment" "~0.36.1" + comment-parser "1.3.1" + debug "^4.3.4" + escape-string-regexp "^4.0.0" + esquery "^1.4.0" + semver "^7.3.8" + spdx-expression-parse "^3.0.1" + +eslint-plugin-prefer-arrow@latest: + version "1.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz#e7fbb3fa4cd84ff1015b9c51ad86550e55041041" + integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== + eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -5086,6 +5257,16 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -5145,6 +5326,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/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.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -5217,6 +5406,13 @@ globals@^13.19.0: 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" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -5306,7 +5502,7 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: +has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== @@ -5328,6 +5524,11 @@ has-property-descriptors@^1.0.0: 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" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -5716,7 +5917,7 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-callable@^1.1.3: +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" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -5728,14 +5929,14 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" -is-date-object@^1.0.5: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -5784,6 +5985,11 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" @@ -5864,14 +6070,14 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-symbol@^1.0.3: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10: +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" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== @@ -5897,6 +6103,13 @@ is-weakmap@^2.0.1: resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-weakset@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" @@ -6101,6 +6314,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== +jsdoc-type-pratt-parser@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz#a4a56bdc6e82e5865ffd9febc5b1a227ff28e67e" + integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -7262,7 +7480,7 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -7290,6 +7508,15 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + objectpath@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/objectpath/-/objectpath-2.0.0.tgz#c4463123fcf00469be8282a2ea51704fb9469cc1" @@ -8524,7 +8751,7 @@ resolve-url-loader@5.0.0: postcss "^8.2.14" source-map "0.6.1" -resolve@1.22.1, resolve@^1.1.7, resolve@^1.14.2: +resolve@1.22.1, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -8628,6 +8855,15 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, resolved "https://registry.yarnpkg.com/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.yarnpkg.com/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" + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -8754,7 +8990,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.3.7: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== @@ -9013,7 +9249,7 @@ spdx-exceptions@^2.1.0: resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.0: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -9121,6 +9357,24 @@ streamroller@^3.1.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +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" + 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.yarnpkg.com/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.20.4" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -9329,10 +9583,10 @@ tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tinycolor2@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.5.2.tgz#7d30b4584d8b7d62b9a94dacc505614a6516a95f" - integrity sha512-h80m9GPFGbcLzZByXlNSEhp1gf8Dy+VX/2JCGUZsWLo7lV1mnE/XlxGYgRBoMLJh1lIDXP0EMC4RPTjlRaV+Bg== +tinycolor2@~1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" + integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== tmp@0.0.30: version "0.0.30" @@ -9414,7 +9668,7 @@ ts-transformer-keys@^0.4.4: resolved "https://registry.yarnpkg.com/ts-transformer-keys/-/ts-transformer-keys-0.4.4.tgz#c185508b3ae9b79236aac58f788c85ca3ac807d7" integrity sha512-LrqgvaFvar01/5mbunRyeLTSIkqoC2xfcpL/90aDY6vR07DGyH+UaYGdIEsUudnlAw2Sr0pxFgdZvE0QIyI4qA== -tsconfig-paths@^3.9.0: +tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== @@ -9488,6 +9742,15 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +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" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typed-assert@^1.0.8: version "1.0.9" resolved "https://registry.yarnpkg.com/typed-assert/-/typed-assert-1.0.9.tgz#8af9d4f93432c4970ec717e3006f33f135b06213" @@ -9518,6 +9781,16 @@ ua-parser-js@^0.7.30: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"