diff --git a/opensearch-dashboards-2.yaml b/opensearch-dashboards-2.yaml index bfa12100d28..6ee95e52447 100644 --- a/opensearch-dashboards-2.yaml +++ b/opensearch-dashboards-2.yaml @@ -1,7 +1,7 @@ package: name: opensearch-dashboards-2 - version: 2.11.1 - epoch: 2 + version: 2.12.0 + epoch: 0 description: Open source visualization dashboards for OpenSearch copyright: - license: Apache-2.0 @@ -53,13 +53,24 @@ pipeline: with: repository: https://github.com/opensearch-project/OpenSearch-Dashboards.git tag: ${{package.version}} - expected-commit: 989d8f41f37cca3275bf3fedc5c2057a717d1d64 + expected-commit: 9ec9a677af5f28e5450926ce07e9d6c3273717a7 + + - uses: patch + with: + patches: 0001-Backport-Bump-typescript-and-axios.patch - runs: | # Workaround for "OpenSearch Dashboards should not be run as root. Use --allow-root to continue." # This change will add the --allow-root when running the build_ts_refs and register_git_hook scripts sed -i 's/\("osd:bootstrap": "scripts\/use_node scripts\/build_ts_refs\)\( && scripts\/use_node scripts\/register_git_hook\)/\1 --allow-root\2 --allow-root/' package.json + - runs: | + # Create "resolutions" section of package.json + jq '.resolutions |= (if . then . else {} end)' package.json > temp.json && mv temp.json package.json + for override in '"**/hoek"="npm:@hapi/hoek@>=8.5.1"'; do + jq ".resolutions.${override}" package.json > temp.json && mv temp.json package.json + done + - runs: | set -x @@ -89,7 +100,7 @@ subpackages: repository: https://github.com/opensearch-project/opensearch-build tag: ${{package.version}} destination: opensearch-build - expected-commit: dce080075c219010371c02e699e816dd4df7758f # will need to be manually updated when opensearch dashboard auto update happens + expected-commit: 7e150e42bd47e989af58d508e9d7668e45bc31e8 # will need to be manually updated when opensearch dashboard auto update happens - runs: | install -Dm755 opensearch-build/docker/release/config/opensearch-dashboards/opensearch-dashboards-docker-entrypoint-2.x.sh ${{targets.contextdir}}/usr/share/opensearch-dashboards/opensearch-dashboards-docker-entrypoint.sh install -Dm666 opensearch-build/config/opensearch_dashboards-2.x.yml ${{targets.contextdir}}/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml @@ -108,18 +119,18 @@ subpackages: tag: ${{package.version}}.0 destination: ./plugins/${{range.value}} - runs: | - if [ ${{range.value}} = "ganttChartDashboards" ] - then - mv ./plugins/ganttChartDashboards/gantt-chart ./plugins/gantt-chart - rm -r ./plugins/ganttChartDashboards - mv ./plugins/gantt-chart ./plugins/ganttChartDashboards - fi - yarn osd bootstrap --allow-root cd ./plugins/${{range.value}} node /home/build/scripts/plugin_helpers build --allow-root --skip-archive + if [ ${{range.value}} = "reportsDashboards" ] + then + # Remove a test directory of the `resolver` package to prevent surfacing a false-positive. + # See https://github.com/browserify/resolve/issues/288 + rm -r build/opensearch-dashboards/${{range.value}}/node_modules/resolve/test + fi + mkdir -p "${{targets.contextdir}}/usr/share/opensearch-dashboards/plugins" cp -r build/opensearch-dashboards/${{range.value}} "${{targets.contextdir}}/usr/share/opensearch-dashboards/plugins/" diff --git a/opensearch-dashboards-2/0001-Backport-Bump-typescript-and-axios.patch b/opensearch-dashboards-2/0001-Backport-Bump-typescript-and-axios.patch new file mode 100644 index 00000000000..4f0ff0bba1a --- /dev/null +++ b/opensearch-dashboards-2/0001-Backport-Bump-typescript-and-axios.patch @@ -0,0 +1,1058 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Philippe Deslauriers +Date: Wed, 21 Feb 2024 14:46:14 -0800 +Subject: [PATCH] Backport: Bump typescript and axios + +Signed-off-by: Philippe Deslauriers +--- + package.json | 2 +- + packages/osd-babel-preset/common_preset.js | 4 +- + packages/osd-cross-platform/src/repo_root.ts | 2 +- + packages/osd-dev-utils/package.json | 2 +- + .../src/osd_client/osd_client_requester.ts | 2 +- + packages/osd-opensearch-archiver/src/cli.ts | 2 +- + packages/osd-pm/dist/index.js | 6 +++ + .../extract_collectors.test.ts.snap | 38 +++++++++---------- + .../src/failed_tests_reporter/github_api.ts | 6 +-- + .../lib/lifecycle_phase.ts | 11 +++--- + packages/osd-ui-shared-deps/package.json | 2 +- + packages/osd-ui-shared-deps/webpack.config.js | 11 ++++++ + .../application/application_service.test.ts | 2 +- + .../application_service.test.tsx | 8 ++-- + .../application/ui/app_container.test.tsx | 2 +- + src/core/public/chrome/chrome_service.test.ts | 7 +++- + src/core/public/chrome/chrome_service.tsx | 2 +- + .../recently_accessed_service.test.ts | 2 - + src/core/public/context/context_service.ts | 2 +- + src/core/public/core_app/core_app.ts | 4 +- + .../public/doc_links/doc_links_service.ts | 2 +- + .../fatal_errors/fatal_errors_service.tsx | 2 +- + src/core/public/http/fetch.ts | 2 + + .../injected_metadata_service.ts | 10 +++-- + .../integrations/integrations_service.ts | 2 +- + .../notifications/notifications_service.ts | 4 +- + .../public/rendering/rendering_service.tsx | 2 +- + .../public/ui_settings/ui_settings_api.ts | 2 +- + .../public/ui_settings/ui_settings_client.ts | 2 +- + .../public/ui_settings/ui_settings_service.ts | 2 +- + src/core/server/context/context_service.ts | 2 +- + src/core/server/http/http_service.ts | 2 +- + .../server/http/router/response_adapter.ts | 4 +- + .../logging/appenders/file/file_appender.ts | 2 +- + src/core/server/logging/logging_service.ts | 2 +- + src/core/server/metrics/metrics_service.ts | 2 +- + .../opensearch/client/cluster_client.test.ts | 8 ++-- + .../server/opensearch/opensearch_service.ts | 4 +- + .../server/rendering/rendering_service.tsx | 5 +-- + src/core/server/status/status_service.ts | 2 +- + src/dev/build/lib/download.ts | 6 +-- + src/dev/build/lib/fs.ts | 18 ++++++--- + src/dev/jest/config.js | 2 +- + .../common/of.test.ts | 4 +- + tsconfig.base.json | 1 + + yarn.lock | 27 ++++++------- + 46 files changed, 133 insertions(+), 105 deletions(-) + +diff --git a/package.json b/package.json +index 351e33db12..29eb5f4e6f 100644 +--- a/package.json ++++ b/package.json +@@ -98,7 +98,7 @@ + "**/nth-check": "^2.0.1", + "**/qs": "^6.11.0", + "**/trim": "^0.0.3", +- "**/typescript": "4.0.2", ++ "**/typescript": "4.6.4", + "**/unset-value": "^2.0.1", + "**/minimatch": "^3.0.5", + "**/jest-config": "npm:@amoo-miki/jest-config@27.5.1", +diff --git a/packages/osd-babel-preset/common_preset.js b/packages/osd-babel-preset/common_preset.js +index 493c67afbc..dc324f6efd 100644 +--- a/packages/osd-babel-preset/common_preset.js ++++ b/packages/osd-babel-preset/common_preset.js +@@ -29,8 +29,8 @@ + */ + + const plugins = [ +- '@babel/plugin-transform-class-properties', +- '@babel/plugin-transform-private-methods', ++ require.resolve('@babel/plugin-transform-class-properties'), ++ require.resolve('@babel/plugin-transform-private-methods'), + require.resolve('babel-plugin-add-module-exports'), + + // Optional Chaining proposal is stage 4 (https://github.com/tc39/proposal-optional-chaining) +diff --git a/packages/osd-cross-platform/src/repo_root.ts b/packages/osd-cross-platform/src/repo_root.ts +index a7ffc19a7f..ea2975d19e 100644 +--- a/packages/osd-cross-platform/src/repo_root.ts ++++ b/packages/osd-cross-platform/src/repo_root.ts +@@ -41,7 +41,7 @@ const readOpenSearchDashboardsPkgJson = (dir: string) => { + return json; + } + } catch (error) { +- if (error && error.code === 'ENOENT') { ++ if (error?.code === 'ENOENT') { + return; + } + +diff --git a/packages/osd-dev-utils/package.json b/packages/osd-dev-utils/package.json +index 73c66c4009..f35b795bb9 100644 +--- a/packages/osd-dev-utils/package.json ++++ b/packages/osd-dev-utils/package.json +@@ -15,7 +15,7 @@ + "dependencies": { + "@babel/core": "^7.22.9", + "@osd/utils": "1.0.0", +- "axios": "^0.27.2", ++ "axios": "^1.6.1", + "chalk": "^4.1.0", + "cheerio": "1.0.0-rc.1", + "dedent": "^0.7.0", +diff --git a/packages/osd-dev-utils/src/osd_client/osd_client_requester.ts b/packages/osd-dev-utils/src/osd_client/osd_client_requester.ts +index effa5da6dd..dbda8d19ec 100644 +--- a/packages/osd-dev-utils/src/osd_client/osd_client_requester.ts ++++ b/packages/osd-dev-utils/src/osd_client/osd_client_requester.ts +@@ -37,7 +37,7 @@ import { ToolingLog } from '../tooling_log'; + + const isConcliftOnGetError = (error: any) => { + return ( +- isAxiosResponseError(error) && error.config.method === 'GET' && error.response.status === 409 ++ isAxiosResponseError(error) && error.config?.method === 'GET' && error.response.status === 409 + ); + }; + +diff --git a/packages/osd-opensearch-archiver/src/cli.ts b/packages/osd-opensearch-archiver/src/cli.ts +index bf652b3bf8..3c4f650a0f 100644 +--- a/packages/osd-opensearch-archiver/src/cli.ts ++++ b/packages/osd-opensearch-archiver/src/cli.ts +@@ -240,7 +240,7 @@ export function runCli() { + output: process.stdout, + }); + +- await new Promise((resolveInput) => { ++ await new Promise((resolveInput) => { + rl.question(`Press enter when you're done`, () => { + rl.close(); + resolveInput(); +diff --git a/packages/osd-pm/dist/index.js b/packages/osd-pm/dist/index.js +index 458aacd225..9c3ee9e700 100644 +--- a/packages/osd-pm/dist/index.js ++++ b/packages/osd-pm/dist/index.js +@@ -537,6 +537,7 @@ module.exports = require("path"); + "use strict"; + + ++ + /* + * SPDX-License-Identifier: Apache-2.0 + * +@@ -611,6 +612,7 @@ Object.defineProperty(exports, "ToolingLogCollectingWriter", { + "use strict"; + + ++ + /* + * SPDX-License-Identifier: Apache-2.0 + * +@@ -6769,6 +6771,7 @@ var ZipBufferIterator = /*@__PURE__*/ (function (_super) { + "use strict"; + + ++ + /* + * SPDX-License-Identifier: Apache-2.0 + * +@@ -8919,6 +8922,7 @@ exports.parseLogLevel = parseLogLevel; + "use strict"; + + ++ + /* + * SPDX-License-Identifier: Apache-2.0 + * +@@ -8994,6 +8998,7 @@ var _watch = __webpack_require__(463); + * GitHub history for details. + */ + ++ + /* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with +@@ -40212,6 +40217,7 @@ module.exports = process && support(supportLevel); + "use strict"; + + ++ + /* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 +diff --git a/packages/osd-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap b/packages/osd-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap +index 4725be7753..cf9cf12a75 100644 +--- a/packages/osd-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap ++++ b/packages/osd-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap +@@ -9,7 +9,7 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "locale": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +@@ -31,7 +31,7 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "locale": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +@@ -53,7 +53,7 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "locale": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +@@ -75,7 +75,7 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "locale": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +@@ -98,11 +98,11 @@ Array [ + "typeDescriptor": Object { + "@@INDEX@@": Object { + "count_1": Object { +- "kind": 143, ++ "kind": 146, + "type": "NumberKeyword", + }, + "count_2": Object { +- "kind": 143, ++ "kind": 146, + "type": "NumberKeyword", + }, + }, +@@ -127,7 +127,7 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "locale": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +@@ -149,21 +149,21 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "flat": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + "my_objects": Object { + "total": Object { +- "kind": 143, ++ "kind": 146, + "type": "NumberKeyword", + }, + "type": Object { +- "kind": 131, ++ "kind": 133, + "type": "BooleanKeyword", + }, + }, + "my_str": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +@@ -196,44 +196,44 @@ Array [ + "fetch": Object { + "typeDescriptor": Object { + "flat": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + "my_array": Object { + "items": Object { + "total": Object { +- "kind": 143, ++ "kind": 146, + "type": "NumberKeyword", + }, + "type": Object { +- "kind": 131, ++ "kind": 133, + "type": "BooleanKeyword", + }, + }, + }, + "my_index_signature_prop": Object { + "@@INDEX@@": Object { +- "kind": 143, ++ "kind": 146, + "type": "NumberKeyword", + }, + }, + "my_objects": Object { + "total": Object { +- "kind": 143, ++ "kind": 146, + "type": "NumberKeyword", + }, + "type": Object { +- "kind": 131, ++ "kind": 133, + "type": "BooleanKeyword", + }, + }, + "my_str": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + "my_str_array": Object { + "items": Object { +- "kind": 146, ++ "kind": 149, + "type": "StringKeyword", + }, + }, +diff --git a/packages/osd-test/src/failed_tests_reporter/github_api.ts b/packages/osd-test/src/failed_tests_reporter/github_api.ts +index c384d56eb1..766d4e14f1 100644 +--- a/packages/osd-test/src/failed_tests_reporter/github_api.ts ++++ b/packages/osd-test/src/failed_tests_reporter/github_api.ts +@@ -30,7 +30,7 @@ + + import Url from 'url'; + +-import Axios, { AxiosRequestConfig, AxiosInstance } from 'axios'; ++import Axios, { AxiosRequestConfig, AxiosInstance, AxiosHeaderValue } from 'axios'; + import parseLinkHeader from 'parse-link-header'; + import { ToolingLog, isAxiosResponseError, isAxiosRequestError } from '@osd/dev-utils'; + +@@ -208,7 +208,7 @@ export class GithubApi { + ): Promise<{ + status: number; + statusText: string; +- headers: Record; ++ headers: Record; + data: T; + }> { + const executeRequest = !this.dryRun || options.safeForDryRun; +@@ -233,7 +233,7 @@ export class GithubApi { + const githubApiFailed = isAxiosResponseError(error) && error.response.status >= 500; + const errorResponseLog = + isAxiosResponseError(error) && +- `[${error.config.method} ${error.config.url}] ${error.response.status} ${error.response.statusText} Error`; ++ `[${error.config?.method} ${error.config?.url}] ${error.response.status} ${error.response.statusText} Error`; + + if ((unableToReachGithub || githubApiFailed) && attempt < maxAttempts) { + const waitMs = 1000 * attempt; +diff --git a/packages/osd-test/src/functional_test_runner/lib/lifecycle_phase.ts b/packages/osd-test/src/functional_test_runner/lib/lifecycle_phase.ts +index 02106a4b1d..f39f5ee642 100644 +--- a/packages/osd-test/src/functional_test_runner/lib/lifecycle_phase.ts ++++ b/packages/osd-test/src/functional_test_runner/lib/lifecycle_phase.ts +@@ -44,16 +44,17 @@ export class LifecyclePhase { + private readonly beforeSubj = new Rx.Subject(); + public readonly before$ = this.beforeSubj.asObservable(); + +- private readonly afterSubj = this.options.singular +- ? new Rx.ReplaySubject(1) +- : new Rx.Subject(); +- public readonly after$ = this.afterSubj.asObservable(); ++ private readonly afterSubj: Rx.Subject; ++ public readonly after$: Rx.Observable; + + constructor( + private readonly options: { + singular?: boolean; + } = {} +- ) {} ++ ) { ++ this.afterSubj = this.options.singular ? new Rx.ReplaySubject(1) : new Rx.Subject(); ++ this.after$ = this.afterSubj.asObservable(); ++ } + + public add(fn: (...args: Args) => Promise | void) { + this.handlers.push(fn); +diff --git a/packages/osd-ui-shared-deps/package.json b/packages/osd-ui-shared-deps/package.json +index 8a342a98f0..1c0a69be93 100644 +--- a/packages/osd-ui-shared-deps/package.json ++++ b/packages/osd-ui-shared-deps/package.json +@@ -16,7 +16,7 @@ + "@osd/i18n": "1.0.0", + "@osd/monaco": "1.0.0", + "abortcontroller-polyfill": "^1.4.0", +- "axios": "^0.27.2", ++ "axios": "^1.6.1", + "compression-webpack-plugin": "npm:@amoo-miki/compression-webpack-plugin@4.0.1-rc.1", + "core-js": "^3.6.5", + "custom-event-polyfill": "^0.3.0", +diff --git a/packages/osd-ui-shared-deps/webpack.config.js b/packages/osd-ui-shared-deps/webpack.config.js +index d9bfd81af5..80e7aeef9c 100644 +--- a/packages/osd-ui-shared-deps/webpack.config.js ++++ b/packages/osd-ui-shared-deps/webpack.config.js +@@ -131,6 +131,17 @@ exports.getWebpackConfig = ({ dev = false } = {}) => ({ + }, + ], + }, ++ { ++ test: /worker_proxy_service\.js$/, ++ exclude: /node_modules/, ++ use: { ++ loader: 'babel-loader', ++ options: { ++ babelrc: false, ++ presets: [require.resolve('@osd/babel-preset/webpack_preset')], ++ }, ++ }, ++ }, + ], + }, + +diff --git a/src/core/public/application/application_service.test.ts b/src/core/public/application/application_service.test.ts +index c03afbba27..691ba64cf0 100644 +--- a/src/core/public/application/application_service.test.ts ++++ b/src/core/public/application/application_service.test.ts +@@ -708,7 +708,7 @@ describe('#start()', () => { + // Create an app and a promise that allows us to control when the app completes mounting + const createWaitingApp = (props: Partial): [App, () => void] => { + let finishMount: () => void; +- const mountPromise = new Promise((resolve) => (finishMount = resolve)); ++ const mountPromise = new Promise((resolve) => (finishMount = resolve)); + const app = { + id: 'some-id', + title: 'some-title', +diff --git a/src/core/public/application/integration_tests/application_service.test.tsx b/src/core/public/application/integration_tests/application_service.test.tsx +index 1b659c0dec..9d53d99c9d 100644 +--- a/src/core/public/application/integration_tests/application_service.test.tsx ++++ b/src/core/public/application/integration_tests/application_service.test.tsx +@@ -77,7 +77,7 @@ describe('ApplicationService', () => { + const { register } = service.setup(setupDeps); + + let resolveMount: () => void; +- const promise = new Promise((resolve) => { ++ const promise = new Promise((resolve) => { + resolveMount = resolve; + }); + +@@ -111,7 +111,7 @@ describe('ApplicationService', () => { + const { register } = service.setup(setupDeps); + + let resolveMount: () => void; +- const promise = new Promise((resolve) => { ++ const promise = new Promise((resolve) => { + resolveMount = resolve; + }); + +@@ -453,7 +453,7 @@ describe('ApplicationService', () => { + const { register } = service.setup(setupDeps); + + let resolveMount: () => void; +- const promise = new Promise((resolve) => { ++ const promise = new Promise((resolve) => { + resolveMount = resolve; + }); + +@@ -491,7 +491,7 @@ describe('ApplicationService', () => { + const { register } = service.setup(setupDeps); + + let resolveMount: () => void; +- const promise = new Promise((resolve) => { ++ const promise = new Promise((resolve) => { + resolveMount = resolve; + }); + +diff --git a/src/core/public/application/ui/app_container.test.tsx b/src/core/public/application/ui/app_container.test.tsx +index e9e2caed02..3e658fa256 100644 +--- a/src/core/public/application/ui/app_container.test.tsx ++++ b/src/core/public/application/ui/app_container.test.tsx +@@ -50,7 +50,7 @@ describe('AppContainer', () => { + }); + + const flushPromises = async () => { +- await new Promise(async (resolve) => { ++ await new Promise(async (resolve) => { + setImmediate(() => resolve()); + }); + }; +diff --git a/src/core/public/chrome/chrome_service.test.ts b/src/core/public/chrome/chrome_service.test.ts +index f11b0f3965..e91056ed77 100644 +--- a/src/core/public/chrome/chrome_service.test.ts ++++ b/src/core/public/chrome/chrome_service.test.ts +@@ -43,9 +43,12 @@ import { ChromeService } from './chrome_service'; + import { getAppInfo } from '../application/utils'; + + class FakeApp implements App { +- public title = `${this.id} App`; ++ public title: string; + public mount = () => () => {}; +- constructor(public id: string, public chromeless?: boolean) {} ++ ++ constructor(public id: string, public chromeless?: boolean) { ++ this.title = `${this.id} App`; ++ } + } + const store = new Map(); + const originalLocalStorage = window.localStorage; +diff --git a/src/core/public/chrome/chrome_service.tsx b/src/core/public/chrome/chrome_service.tsx +index 7994c6dcc0..f2ffc8d14c 100644 +--- a/src/core/public/chrome/chrome_service.tsx ++++ b/src/core/public/chrome/chrome_service.tsx +@@ -90,7 +90,7 @@ interface ConstructorParams { + browserSupportsCsp: boolean; + } + +-interface StartDeps { ++export interface StartDeps { + application: InternalApplicationStart; + docLinks: DocLinksStart; + http: HttpStart; +diff --git a/src/core/public/chrome/recently_accessed/recently_accessed_service.test.ts b/src/core/public/chrome/recently_accessed/recently_accessed_service.test.ts +index 7046d5efc2..90e72af356 100644 +--- a/src/core/public/chrome/recently_accessed/recently_accessed_service.test.ts ++++ b/src/core/public/chrome/recently_accessed/recently_accessed_service.test.ts +@@ -69,11 +69,9 @@ describe('RecentlyAccessed#start()', () => { + + // @ts-expect-error to allow redeclaring a readonly prop + delete window.localStorage; +- // @ts-expect-error + window.localStorage = new LocalStorageMock(); + }); + beforeEach(() => localStorage.clear()); +- // @ts-expect-error + afterAll(() => (window.localStorage = originalLocalStorage)); + + const getStart = async () => { +diff --git a/src/core/public/context/context_service.ts b/src/core/public/context/context_service.ts +index 5071288a14..433e96c48d 100644 +--- a/src/core/public/context/context_service.ts ++++ b/src/core/public/context/context_service.ts +@@ -32,7 +32,7 @@ import { PluginOpaqueId } from '../../server'; + import { IContextContainer, ContextContainer, HandlerFunction } from '../../utils/context'; + import { CoreContext } from '../core_system'; + +-interface StartDeps { ++export interface StartDeps { + pluginDependencies: ReadonlyMap; + } + +diff --git a/src/core/public/core_app/core_app.ts b/src/core/public/core_app/core_app.ts +index fcbcc5de56..e1e91b7753 100644 +--- a/src/core/public/core_app/core_app.ts ++++ b/src/core/public/core_app/core_app.ts +@@ -43,14 +43,14 @@ import type { InjectedMetadataSetup } from '../injected_metadata'; + import { renderApp as renderErrorApp, setupUrlOverflowDetection } from './errors'; + import { renderApp as renderStatusApp } from './status'; + +-interface SetupDeps { ++export interface SetupDeps { + application: InternalApplicationSetup; + http: HttpSetup; + injectedMetadata: InjectedMetadataSetup; + notifications: NotificationsSetup; + } + +-interface StartDeps { ++export interface StartDeps { + application: InternalApplicationStart; + http: HttpStart; + notifications: NotificationsStart; +diff --git a/src/core/public/doc_links/doc_links_service.ts b/src/core/public/doc_links/doc_links_service.ts +index 0acf4524ab..d73a663a64 100644 +--- a/src/core/public/doc_links/doc_links_service.ts ++++ b/src/core/public/doc_links/doc_links_service.ts +@@ -32,7 +32,7 @@ import { deepFreeze } from '@osd/std'; + import { parse } from 'semver'; + import { InjectedMetadataSetup } from '../injected_metadata'; + +-interface StartDeps { ++export interface StartDeps { + injectedMetadata: InjectedMetadataSetup; + } + +diff --git a/src/core/public/fatal_errors/fatal_errors_service.tsx b/src/core/public/fatal_errors/fatal_errors_service.tsx +index 59a23171ed..73159ff20e 100644 +--- a/src/core/public/fatal_errors/fatal_errors_service.tsx ++++ b/src/core/public/fatal_errors/fatal_errors_service.tsx +@@ -38,7 +38,7 @@ import { InjectedMetadataSetup } from '../injected_metadata'; + import { FatalErrorsScreen } from './fatal_errors_screen'; + import { FatalErrorInfo, getErrorInfo } from './get_error_info'; + +-interface Deps { ++export interface Deps { + i18n: I18nStart; + injectedMetadata: InjectedMetadataSetup; + } +diff --git a/src/core/public/http/fetch.ts b/src/core/public/http/fetch.ts +index 9a25ecc5ea..03b01fc357 100644 +--- a/src/core/public/http/fetch.ts ++++ b/src/core/public/http/fetch.ts +@@ -220,6 +220,8 @@ export class Fetch { + } + + private shorthand(method: string): HttpHandler { ++ // ToDo: find why 'TResponseBody' of HttpHandler is not assignable to type 'HttpResponse' ++ // @ts-expect-error + return (pathOrOptions: string | HttpFetchOptionsWithPath, options?: HttpFetchOptions) => { + const optionsWithPath = validateFetchArguments(pathOrOptions, options); + return this.fetch({ ...optionsWithPath, method }); +diff --git a/src/core/public/injected_metadata/injected_metadata_service.ts b/src/core/public/injected_metadata/injected_metadata_service.ts +index f4c6a7f7b9..6be782c367 100644 +--- a/src/core/public/injected_metadata/injected_metadata_service.ts ++++ b/src/core/public/injected_metadata/injected_metadata_service.ts +@@ -88,11 +88,13 @@ export interface InjectedMetadataParams { + * @internal + */ + export class InjectedMetadataService { +- private state = deepFreeze( +- this.params.injectedMetadata +- ) as InjectedMetadataParams['injectedMetadata']; ++ private state: InjectedMetadataParams['injectedMetadata']; + +- constructor(private readonly params: InjectedMetadataParams) {} ++ constructor(private readonly params: InjectedMetadataParams) { ++ this.state = deepFreeze( ++ this.params.injectedMetadata ++ ) as InjectedMetadataParams['injectedMetadata']; ++ } + + public start(): InjectedMetadataStart { + return this.setup(); +diff --git a/src/core/public/integrations/integrations_service.ts b/src/core/public/integrations/integrations_service.ts +index df92f0b76d..4c133eff82 100644 +--- a/src/core/public/integrations/integrations_service.ts ++++ b/src/core/public/integrations/integrations_service.ts +@@ -34,7 +34,7 @@ import { CoreService } from '../../types'; + import { MomentService } from './moment'; + import { StylesService } from './styles'; + +-interface Deps { ++export interface Deps { + uiSettings: IUiSettingsClient; + } + +diff --git a/src/core/public/notifications/notifications_service.ts b/src/core/public/notifications/notifications_service.ts +index fcdf746f2a..3f3d2bdf3a 100644 +--- a/src/core/public/notifications/notifications_service.ts ++++ b/src/core/public/notifications/notifications_service.ts +@@ -36,11 +36,11 @@ import { ToastsService, ToastsSetup, ToastsStart } from './toasts'; + import { IUiSettingsClient } from '../ui_settings'; + import { OverlayStart } from '../overlays'; + +-interface SetupDeps { ++export interface SetupDeps { + uiSettings: IUiSettingsClient; + } + +-interface StartDeps { ++export interface StartDeps { + i18n: I18nStart; + overlays: OverlayStart; + targetDomElement: HTMLElement; +diff --git a/src/core/public/rendering/rendering_service.tsx b/src/core/public/rendering/rendering_service.tsx +index ffb147bc39..83168bb745 100644 +--- a/src/core/public/rendering/rendering_service.tsx ++++ b/src/core/public/rendering/rendering_service.tsx +@@ -37,7 +37,7 @@ import { InternalApplicationStart } from '../application'; + import { OverlayStart } from '../overlays'; + import { AppWrapper, AppContainer } from './app_containers'; + +-interface StartDeps { ++export interface StartDeps { + application: InternalApplicationStart; + chrome: InternalChromeStart; + overlays: OverlayStart; +diff --git a/src/core/public/ui_settings/ui_settings_api.ts b/src/core/public/ui_settings/ui_settings_api.ts +index d8a68ac035..62e06cf571 100644 +--- a/src/core/public/ui_settings/ui_settings_api.ts ++++ b/src/core/public/ui_settings/ui_settings_api.ts +@@ -66,7 +66,7 @@ export class UiSettingsApi { + * before sending the next request + */ + public batchSet(key: string, value: any) { +- return new Promise((resolve, reject) => { ++ return new Promise((resolve, reject) => { + const prev = this.pendingChanges || NOOP_CHANGES; + + this.pendingChanges = { +diff --git a/src/core/public/ui_settings/ui_settings_client.ts b/src/core/public/ui_settings/ui_settings_client.ts +index 8a5701de6b..4aaa4dcd50 100644 +--- a/src/core/public/ui_settings/ui_settings_client.ts ++++ b/src/core/public/ui_settings/ui_settings_client.ts +@@ -198,7 +198,7 @@ You can use \`IUiSettingsClient.get("${key}", defaultValue)\`, which will just r + this.setLocally(key, newVal); + + try { +- const { settings } = await this.api.batchSet(key, newVal); ++ const { settings } = (await this.api.batchSet(key, newVal)) || {}; + this.cache = defaultsDeep({}, defaults, settings); + this.saved$.next({ key, newValue: newVal, oldValue: initialVal }); + return true; +diff --git a/src/core/public/ui_settings/ui_settings_service.ts b/src/core/public/ui_settings/ui_settings_service.ts +index 9c677ff1c9..10c6b9ed78 100644 +--- a/src/core/public/ui_settings/ui_settings_service.ts ++++ b/src/core/public/ui_settings/ui_settings_service.ts +@@ -37,7 +37,7 @@ import { UiSettingsApi } from './ui_settings_api'; + import { UiSettingsClient } from './ui_settings_client'; + import { IUiSettingsClient } from './types'; + +-interface UiSettingsServiceDeps { ++export interface UiSettingsServiceDeps { + http: HttpSetup; + injectedMetadata: InjectedMetadataSetup; + } +diff --git a/src/core/server/context/context_service.ts b/src/core/server/context/context_service.ts +index fd8ede37a8..2ec1234b75 100644 +--- a/src/core/server/context/context_service.ts ++++ b/src/core/server/context/context_service.ts +@@ -32,7 +32,7 @@ import { PluginOpaqueId } from '../../server'; + import { IContextContainer, ContextContainer, HandlerFunction } from '../../utils/context'; + import { CoreContext } from '../core_context'; + +-interface SetupDeps { ++export interface SetupDeps { + pluginDependencies: ReadonlyMap; + } + +diff --git a/src/core/server/http/http_service.ts b/src/core/server/http/http_service.ts +index 8627557c73..ed1da87547 100644 +--- a/src/core/server/http/http_service.ts ++++ b/src/core/server/http/http_service.ts +@@ -56,7 +56,7 @@ import { + import { RequestHandlerContext } from '../../server'; + import { registerCoreHandlers } from './lifecycle_handlers'; + +-interface SetupDeps { ++export interface SetupDeps { + context: ContextSetup; + } + +diff --git a/src/core/server/http/router/response_adapter.ts b/src/core/server/http/router/response_adapter.ts +index ff5ff5ca84..1597a2d7ab 100644 +--- a/src/core/server/http/router/response_adapter.ts ++++ b/src/core/server/http/router/response_adapter.ts +@@ -127,7 +127,9 @@ export class HapiResponseAdapter { + private toRedirect( + opensearchDashboardsResponse: OpenSearchDashboardsResponse + ) { +- const { headers } = opensearchDashboardsResponse.options; ++ const { ++ headers, ++ }: { headers?: Record } = opensearchDashboardsResponse.options; + if (!headers || typeof headers.location !== 'string') { + throw new Error("expected 'location' header to be set"); + } +diff --git a/src/core/server/logging/appenders/file/file_appender.ts b/src/core/server/logging/appenders/file/file_appender.ts +index 87959641e9..9d00d26fe6 100644 +--- a/src/core/server/logging/appenders/file/file_appender.ts ++++ b/src/core/server/logging/appenders/file/file_appender.ts +@@ -82,7 +82,7 @@ export class FileAppender implements DisposableAppender { + * Disposes `FileAppender`. Waits for the underlying file stream to be completely flushed and closed. + */ + public async dispose() { +- await new Promise((resolve) => { ++ await new Promise((resolve) => { + if (this.outputStream === undefined) { + return resolve(); + } +diff --git a/src/core/server/logging/logging_service.ts b/src/core/server/logging/logging_service.ts +index 7459d4b179..80a67f1265 100644 +--- a/src/core/server/logging/logging_service.ts ++++ b/src/core/server/logging/logging_service.ts +@@ -68,7 +68,7 @@ export interface InternalLoggingServiceSetup { + configure(contextParts: string[], config$: Observable): void; + } + +-interface SetupDeps { ++export interface SetupDeps { + loggingSystem: ILoggingSystem; + } + +diff --git a/src/core/server/metrics/metrics_service.ts b/src/core/server/metrics/metrics_service.ts +index 62e1c97063..4181d40e4b 100644 +--- a/src/core/server/metrics/metrics_service.ts ++++ b/src/core/server/metrics/metrics_service.ts +@@ -38,7 +38,7 @@ import { InternalMetricsServiceSetup, InternalMetricsServiceStart, OpsMetrics } + import { OpsMetricsCollector } from './ops_metrics_collector'; + import { opsConfig, OpsConfigType } from './ops_config'; + +-interface MetricsServiceSetupDeps { ++export interface MetricsServiceSetupDeps { + http: InternalHttpServiceSetup; + } + +diff --git a/src/core/server/opensearch/client/cluster_client.test.ts b/src/core/server/opensearch/client/cluster_client.test.ts +index 0d17326e44..f7cb5bbdba 100644 +--- a/src/core/server/opensearch/client/cluster_client.test.ts ++++ b/src/core/server/opensearch/client/cluster_client.test.ts +@@ -534,7 +534,7 @@ describe('ClusterClient', () => { + let closeScopedClientWithLongNumeralsSupport: () => void; + + internalClient.close.mockReturnValue( +- new Promise((resolve) => { ++ new Promise((resolve) => { + closeInternalClient = resolve; + }).then(() => { + expect(clusterClientClosed).toBe(false); +@@ -542,7 +542,7 @@ describe('ClusterClient', () => { + }) + ); + scopedClient.close.mockReturnValue( +- new Promise((resolve) => { ++ new Promise((resolve) => { + closeScopedClient = resolve; + }).then(() => { + expect(clusterClientClosed).toBe(false); +@@ -550,7 +550,7 @@ describe('ClusterClient', () => { + }) + ); + internalClientWithLongNumeralsSupport.close.mockReturnValue( +- new Promise((resolve) => { ++ new Promise((resolve) => { + closeInternalClientWithLongNumeralsSupport = resolve; + }).then(() => { + expect(clusterClientClosed).toBe(false); +@@ -558,7 +558,7 @@ describe('ClusterClient', () => { + }) + ); + scopedClientWithLongNumeralsSupport.close.mockReturnValue( +- new Promise((resolve) => { ++ new Promise((resolve) => { + closeScopedClientWithLongNumeralsSupport = resolve; + }).then(() => { + expect(clusterClientClosed).toBe(false); +diff --git a/src/core/server/opensearch/opensearch_service.ts b/src/core/server/opensearch/opensearch_service.ts +index bab3e7ede9..6881ce06a0 100644 +--- a/src/core/server/opensearch/opensearch_service.ts ++++ b/src/core/server/opensearch/opensearch_service.ts +@@ -48,11 +48,11 @@ import { InternalOpenSearchServiceSetup, InternalOpenSearchServiceStart } from ' + import { pollOpenSearchNodesVersion } from './version_check/ensure_opensearch_version'; + import { calculateStatus$ } from './status'; + +-interface SetupDeps { ++export interface SetupDeps { + http: InternalHttpServiceSetup; + } + +-interface StartDeps { ++export interface StartDeps { + auditTrail: AuditTrailStart; + } + +diff --git a/src/core/server/rendering/rendering_service.tsx b/src/core/server/rendering/rendering_service.tsx +index acaee7f42b..437d8e1e3d 100644 +--- a/src/core/server/rendering/rendering_service.tsx ++++ b/src/core/server/rendering/rendering_service.tsx +@@ -35,8 +35,7 @@ import { i18n } from '@osd/i18n'; + import { Agent as HttpsAgent } from 'https'; + + import Axios from 'axios'; +-// @ts-expect-error untyped internal module used to prevent axios from using xhr adapter in tests +-import AxiosHttpAdapter from 'axios/lib/adapters/http'; ++ + import { UiPlugins } from '../plugins'; + import { CoreContext } from '../core_context'; + import { Template } from './views'; +@@ -377,7 +376,7 @@ export class RenderingService { + } + return await Axios.get(url, { + httpsAgent: this.httpsAgent, +- adapter: AxiosHttpAdapter, ++ adapter: 'http', + maxRedirects: 0, + }) + .then(() => { +diff --git a/src/core/server/status/status_service.ts b/src/core/server/status/status_service.ts +index 10547e510f..d243aa4f50 100644 +--- a/src/core/server/status/status_service.ts ++++ b/src/core/server/status/status_service.ts +@@ -48,7 +48,7 @@ import { ServiceStatus, CoreStatus, InternalStatusServiceSetup } from './types'; + import { getSummaryStatus } from './get_summary_status'; + import { PluginsStatusService } from './plugins_status'; + +-interface SetupDeps { ++export interface SetupDeps { + opensearch: Pick; + environment: InternalEnvironmentServiceSetup; + pluginDependencies: ReadonlyMap; +diff --git a/src/dev/build/lib/download.ts b/src/dev/build/lib/download.ts +index cf5c0f675f..65fd54583c 100644 +--- a/src/dev/build/lib/download.ts ++++ b/src/dev/build/lib/download.ts +@@ -36,10 +36,6 @@ import { createHash } from 'crypto'; + import Axios from 'axios'; + import { ToolingLog } from '@osd/dev-utils'; + +-// https://github.com/axios/axios/tree/ffea03453f77a8176c51554d5f6c3c6829294649/lib/adapters +-// @ts-expect-error untyped internal module used to prevent axios from using xhr adapter in tests +-import AxiosHttpAdapter from 'axios/lib/adapters/http'; +- + import { mkdirp } from './fs'; + + function tryUnlink(path: string) { +@@ -77,7 +73,7 @@ export async function download(options: DownloadOptions): Promise { + const response = await Axios.request({ + url, + responseType: 'stream', +- adapter: AxiosHttpAdapter, ++ adapter: 'http', + }); + + if (response.status !== 200) { +diff --git a/src/dev/build/lib/fs.ts b/src/dev/build/lib/fs.ts +index b2313220f9..772db6689d 100644 +--- a/src/dev/build/lib/fs.ts ++++ b/src/dev/build/lib/fs.ts +@@ -114,13 +114,17 @@ export async function deleteAll(patterns: string[], log: ToolingLog) { + assertAbsolute(pattern.startsWith('!') ? pattern.slice(1) : pattern); + } + +- const files = await del(patterns, { ++ // Doing a dry run to get a list but `rm` will do the actual deleting ++ const filesToDelete = await del(patterns, { + concurrency: 4, ++ dryRun: true, + }); + ++ await Promise.all(filesToDelete.map((folder) => rm(folder, { force: true, recursive: true }))); ++ + if (log) { +- log.debug('Deleted %d files/directories', files.length); +- log.verbose('Deleted:', longInspect(files)); ++ log.debug('Deleted %d files/directories', filesToDelete.length); ++ log.verbose('Deleted:', longInspect(filesToDelete)); + } + } + +@@ -145,9 +149,11 @@ export async function deleteEmptyFolders( + dryRun: true, + }); + +- const foldersToDelete = emptyFoldersList.filter((folderToDelete) => { +- return !foldersToKeep.some((folderToKeep) => folderToDelete.includes(folderToKeep)); +- }); ++ const foldersToDelete = Array.isArray(emptyFoldersList) ++ ? emptyFoldersList.filter((folderToDelete: string[]) => { ++ return !foldersToKeep.some((folderToKeep) => folderToDelete.includes(folderToKeep)); ++ }) ++ : []; + + await Promise.all(foldersToDelete.map((folder) => rm(folder, { force: true, recursive: true }))); + +diff --git a/src/dev/jest/config.js b/src/dev/jest/config.js +index c9239710b3..b3f7fc0986 100644 +--- a/src/dev/jest/config.js ++++ b/src/dev/jest/config.js +@@ -186,7 +186,7 @@ export default { + transformIgnorePatterns: [ + // ignore all node_modules except those which require babel transforms to handle dynamic import() + // since ESM modules are not natively supported in Jest yet (https://github.com/facebook/jest/issues/4842) +- '[/\\\\]node_modules(?![\\/\\\\](monaco-editor|weak-lru-cache|ordered-binary|d3-color))[/\\\\].+\\.js$', ++ '[/\\\\]node_modules(?![\\/\\\\](monaco-editor|weak-lru-cache|ordered-binary|d3-color|axios))[/\\\\].+\\.js$', + 'packages/osd-pm/dist/index.js', + ], + snapshotSerializers: [ +diff --git a/src/plugins/opensearch_dashboards_utils/common/of.test.ts b/src/plugins/opensearch_dashboards_utils/common/of.test.ts +index 499f831042..66280559d9 100644 +--- a/src/plugins/opensearch_dashboards_utils/common/of.test.ts ++++ b/src/plugins/opensearch_dashboards_utils/common/of.test.ts +@@ -32,7 +32,7 @@ import { of } from './of'; + + describe('of()', () => { + describe('when promise resolves', () => { +- const promise = new Promise((resolve) => resolve()).then(() => 123); ++ const promise = new Promise((resolve) => resolve()).then(() => 123); + + test('first member of 3-tuple is the promise value', async () => { + const [result] = await of(promise); +@@ -51,7 +51,7 @@ describe('of()', () => { + }); + + describe('when promise rejects', () => { +- const promise = new Promise((resolve) => resolve()).then(() => { ++ const promise = new Promise((resolve) => resolve()).then(() => { + // eslint-disable-next-line no-throw-literal + throw 123; + }); +diff --git a/tsconfig.base.json b/tsconfig.base.json +index 5c31f795ff..5aba1b3bc5 100644 +--- a/tsconfig.base.json ++++ b/tsconfig.base.json +@@ -53,6 +53,7 @@ + "downlevelIteration": true, + // import tslib helpers rather than inlining helpers for iteration or spreading, for instance + "importHelpers": true, ++ "useUnknownInCatchVariables": false, + // adding global typings + "types": [ + "node", +diff --git a/yarn.lock b/yarn.lock +index 1843167afd..fdefb6aae9 100644 +--- a/yarn.lock ++++ b/yarn.lock +@@ -4909,14 +4909,6 @@ axe-core@^4.0.2, axe-core@^4.3.5: + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" + integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== + +-axios@^0.27.2: +- version "0.27.2" +- resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" +- integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== +- dependencies: +- follow-redirects "^1.14.9" +- form-data "^4.0.0" +- + axios@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.0.tgz#1cb65bd75162c70e9f8d118a905126c4a201d383" +@@ -4926,6 +4918,15 @@ axios@^1.1.3: + form-data "^4.0.0" + proxy-from-env "^1.1.0" + ++axios@^1.6.1: ++ version "1.6.7" ++ resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" ++ integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== ++ dependencies: ++ follow-redirects "^1.15.4" ++ form-data "^4.0.0" ++ proxy-from-env "^1.1.0" ++ + axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" +@@ -8816,7 +8817,7 @@ focus-lock@^0.10.2: + dependencies: + tslib "^2.0.3" + +-follow-redirects@^1.14.9, follow-redirects@^1.15.0, follow-redirects@^1.15.4: ++follow-redirects@^1.15.0, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== +@@ -17363,10 +17364,10 @@ typedarray@^0.0.6: + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +-typescript@4.0.2, typescript@~4.5.2: +- version "4.0.2" +- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" +- integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== ++typescript@4.0.2, typescript@4.6.4, typescript@~4.5.2: ++ version "4.6.4" ++ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" ++ integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== + + uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6"