From dde2d112d09769ef864250c80bcd8a137a423809 Mon Sep 17 00:00:00 2001 From: Pete Harverson Date: Fri, 13 Nov 2020 09:39:33 +0000 Subject: [PATCH 01/11] [ML] Adds functional tests for the index data visualizer card contents (#83174) * [ML] Adds functional tests for the index data visualizer card contents * [ML] Fix translations * [ML] Fix type errors in permissions tests * [ML] Address comments from review --- .../content_types/date_content.tsx | 6 +- .../content_types/keyword_content.tsx | 4 +- .../content_types/number_content.tsx | 24 +- .../document_count_chart.tsx | 2 +- .../examples_list/examples_list.tsx | 2 +- .../field_data_card/field_data_card.tsx | 2 +- .../metric_distribution_chart.tsx | 2 +- .../field_data_card/top_values/top_values.tsx | 6 +- .../components/search_panel/search_panel.tsx | 36 ++- .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../data_visualizer/index_data_visualizer.ts | 148 +++++++++---- .../apps/ml/permissions/full_ml_access.ts | 2 +- .../apps/ml/permissions/read_ml_access.ts | 2 +- .../ml/data_visualizer_index_based.ts | 206 +++++++++++++++++- x-pack/test/functional/services/ml/index.ts | 5 +- .../apps/ml/permissions/full_ml_access.ts | 2 +- .../apps/ml/permissions/read_ml_access.ts | 2 +- 18 files changed, 365 insertions(+), 88 deletions(-) diff --git a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/content_types/date_content.tsx b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/content_types/date_content.tsx index 76d05539c0c82..61addb4689f4e 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/content_types/date_content.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/content_types/date_content.tsx @@ -25,7 +25,7 @@ export const DateContent: FC = ({ config }) => { return (
- +   = ({ config }) => { -
+
= ({ config }) => { -
+
= ({ config }) => { return (
- +   = ({ config }) => {
- +   = ({ config }) => { return (
- +   = ({ config }) => {
- +   = ({ config }) => { - + - + - + @@ -145,14 +147,14 @@ export const NumberContent: FC = ({ config }) => { setDetailsMode(optionId as DETAILS_MODE)} + onChange={(optionId) => setDetailsMode(optionId as DetailsModeType)} legend={i18n.translate( 'xpack.ml.fieldDataCard.cardNumber.selectMetricDetailsDisplayAriaLabel', { defaultMessage: 'Select display option for metric details', } )} - data-test-subj="mlFieldDataCardNumberDetailsSelect" + data-test-subj="mlFieldDataCardDetailsSelect" isFullWidth={true} buttonSize="compressed" /> diff --git a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/document_count_chart/document_count_chart.tsx b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/document_count_chart/document_count_chart.tsx index a2cc59bb38939..7e2671884b101 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/document_count_chart/document_count_chart.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/document_count_chart/document_count_chart.tsx @@ -61,7 +61,7 @@ export const DocumentCountChart: FC = ({ const EVENT_RATE_COLOR = themeName.euiColorVis2; return ( -
+
= ({ examples }) => { }); return ( -
+
= ({ config }) => { hasShadow={false} > -
+
{loading === true ? : getCardContent()}
diff --git a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/metric_distribution_chart/metric_distribution_chart.tsx b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/metric_distribution_chart/metric_distribution_chart.tsx index 4189308a3bc99..9ff6e99dbc5c2 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/metric_distribution_chart/metric_distribution_chart.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/field_data_card/metric_distribution_chart/metric_distribution_chart.tsx @@ -72,7 +72,7 @@ export const MetricDistributionChart: FC = ({ width, height, chartData, f }; return ( -
+
= ({ stats, fieldFormat, barColor }) => { const progressBarMax = isTopValuesSampled === true ? topValuesSampleSize : count; return ( - +
{topValues.map((value: any) => ( @@ -55,7 +55,7 @@ export const TopValues: FC = ({ stats, fieldFormat, barColor }) => { - + @@ -79,6 +79,6 @@ export const TopValues: FC = ({ stats, fieldFormat, barColor }) => { )} - +
); }; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/search_panel/search_panel.tsx b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/search_panel/search_panel.tsx index b93ae9e67ef72..9e14e4044a297 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/search_panel/search_panel.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/index_based/components/search_panel/search_panel.tsx @@ -48,16 +48,20 @@ const searchSizeOptions = [1000, 5000, 10000, 100000, -1].map((v) => { value: String(v), inputDisplay: v > 0 ? ( - {v} }} - /> + + {v} }} + /> + ) : ( - + + + ), }; }); @@ -174,10 +178,18 @@ export const SearchPanel: FC = ({ {totalCount}, + strongTotalCount: ( + + + + ), }} /> diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 6a5be2e99dc3f..ba6ac32f2e3d0 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -12270,7 +12270,6 @@ "xpack.ml.datavisualizer.page.fieldsPanelTitle": "フィールド", "xpack.ml.datavisualizer.page.metricsPanelTitle": "メトリック", "xpack.ml.datavisualizer.searchPanel.allOptionLabel": "すべて検索", - "xpack.ml.datavisualizer.searchPanel.documentsPerShardLabel": "合計ドキュメント数: {wrappedTotalCount}", "xpack.ml.datavisualizer.searchPanel.invalidKuerySyntaxErrorMessageQueryBar": "無効なクエリ", "xpack.ml.datavisualizer.searchPanel.queryBarPlaceholder": "小さいサンプルサイズを選択することで、クエリの実行時間を短縮しクラスターへの負荷を軽減できます。", "xpack.ml.datavisualizer.searchPanel.queryBarPlaceholderText": "検索… (例: status:200 AND extension:\"PHP\")", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b01d0db9d244a..822ccf5cc8409 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -12284,7 +12284,6 @@ "xpack.ml.datavisualizer.page.fieldsPanelTitle": "字段", "xpack.ml.datavisualizer.page.metricsPanelTitle": "指标", "xpack.ml.datavisualizer.searchPanel.allOptionLabel": "搜索全部", - "xpack.ml.datavisualizer.searchPanel.documentsPerShardLabel": "文档总数:{wrappedTotalCount}", "xpack.ml.datavisualizer.searchPanel.invalidKuerySyntaxErrorMessageQueryBar": "无效查询", "xpack.ml.datavisualizer.searchPanel.queryBarPlaceholder": "选择较小的样例大小将减少查询运行时间和集群上的负载。", "xpack.ml.datavisualizer.searchPanel.queryBarPlaceholderText": "搜索……(例如,status:200 AND extension:\"PHP\")", diff --git a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts index 1c1afd86fb7d7..a7660e68e93e1 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/index_data_visualizer.ts @@ -8,6 +8,17 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; import { ML_JOB_FIELD_TYPES } from '../../../../../plugins/ml/common/constants/field_types'; import { FieldVisConfig } from '../../../../../plugins/ml/public/application/datavisualizer/index_based/common'; +interface MetricFieldVisConfig extends FieldVisConfig { + statsMaxDecimalPlaces: number; + docCountFormatted: string; + selectedDetailsMode: 'distribution' | 'top_values'; + topValuesCount: number; +} + +interface NonMetricFieldVisConfig extends FieldVisConfig { + exampleCount?: number; +} + interface TestData { suiteTitle: string; sourceIndexOrSavedSearch: string; @@ -15,10 +26,11 @@ interface TestData { nonMetricFieldsFilter: string; nonMetricFieldsTypeFilter: string; expected: { - totalDocCount: number; + totalDocCountFormatted: string; fieldsPanelCount: number; - metricCards?: FieldVisConfig[]; - nonMetricCards?: FieldVisConfig[]; + documentCountCard: FieldVisConfig; + metricCards?: MetricFieldVisConfig[]; + nonMetricCards?: NonMetricFieldVisConfig[]; nonMetricFieldsTypeFilterCardCount: number; metricFieldsFilterCardCount: number; nonMetricFieldsFilterCardCount: number; @@ -48,21 +60,25 @@ export default function ({ getService }: FtrProviderContext) { nonMetricFieldsFilter: 'airline', nonMetricFieldsTypeFilter: 'keyword', expected: { - totalDocCount: 86274, + totalDocCountFormatted: '86,274', fieldsPanelCount: 2, // Metrics panel and Fields panel + documentCountCard: { + type: ML_JOB_FIELD_TYPES.NUMBER, + existsInDocs: true, + aggregatable: true, + loading: false, + }, metricCards: [ - { - type: ML_JOB_FIELD_TYPES.NUMBER, // document count card - existsInDocs: true, - aggregatable: true, - loading: false, - }, { fieldName: 'responsetime', type: ML_JOB_FIELD_TYPES.NUMBER, existsInDocs: true, aggregatable: true, loading: false, + docCountFormatted: '5,000', + statsMaxDecimalPlaces: 3, + selectedDetailsMode: 'distribution', + topValuesCount: 10, }, ], nonMetricCards: [ @@ -79,6 +95,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: false, loading: false, + exampleCount: 1, }, { fieldName: '@version.keyword', @@ -86,6 +103,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 1, }, { fieldName: 'airline', @@ -93,6 +111,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 10, }, { fieldName: 'type', @@ -100,6 +119,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: false, loading: false, + exampleCount: 1, }, { fieldName: 'type.keyword', @@ -107,6 +127,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 1, }, ], nonMetricFieldsTypeFilterCardCount: 3, @@ -122,21 +143,25 @@ export default function ({ getService }: FtrProviderContext) { nonMetricFieldsFilter: 'airline', nonMetricFieldsTypeFilter: 'keyword', expected: { - totalDocCount: 34415, + totalDocCountFormatted: '34,415', fieldsPanelCount: 2, // Metrics panel and Fields panel + documentCountCard: { + type: ML_JOB_FIELD_TYPES.NUMBER, + existsInDocs: true, + aggregatable: true, + loading: false, + }, metricCards: [ - { - type: ML_JOB_FIELD_TYPES.NUMBER, // document count card - existsInDocs: true, - aggregatable: true, - loading: false, - }, { fieldName: 'responsetime', type: ML_JOB_FIELD_TYPES.NUMBER, existsInDocs: true, aggregatable: true, loading: false, + docCountFormatted: '5,000', + statsMaxDecimalPlaces: 3, + selectedDetailsMode: 'distribution', + topValuesCount: 10, }, ], nonMetricCards: [ @@ -153,6 +178,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: false, loading: false, + exampleCount: 1, }, { fieldName: '@version.keyword', @@ -160,6 +186,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 1, }, { fieldName: 'airline', @@ -167,6 +194,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 5, }, { fieldName: 'type', @@ -174,6 +202,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: false, loading: false, + exampleCount: 1, }, { fieldName: 'type.keyword', @@ -181,6 +210,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 1, }, ], nonMetricFieldsTypeFilterCardCount: 3, @@ -196,21 +226,25 @@ export default function ({ getService }: FtrProviderContext) { nonMetricFieldsFilter: 'version', nonMetricFieldsTypeFilter: 'keyword', expected: { - totalDocCount: 34416, + totalDocCountFormatted: '34,416', fieldsPanelCount: 2, // Metrics panel and Fields panel + documentCountCard: { + type: ML_JOB_FIELD_TYPES.NUMBER, // document count card + existsInDocs: true, + aggregatable: true, + loading: false, + }, metricCards: [ - { - type: ML_JOB_FIELD_TYPES.NUMBER, // document count card - existsInDocs: true, - aggregatable: true, - loading: false, - }, { fieldName: 'responsetime', type: ML_JOB_FIELD_TYPES.NUMBER, existsInDocs: true, aggregatable: true, loading: false, + docCountFormatted: '5,000', + statsMaxDecimalPlaces: 3, + selectedDetailsMode: 'distribution', + topValuesCount: 10, }, ], nonMetricCards: [ @@ -227,6 +261,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: false, loading: false, + exampleCount: 1, }, { fieldName: '@version.keyword', @@ -234,6 +269,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 1, }, { fieldName: 'airline', @@ -241,6 +277,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 5, }, { fieldName: 'type', @@ -248,6 +285,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: false, loading: false, + exampleCount: 1, }, { fieldName: 'type.keyword', @@ -255,6 +293,7 @@ export default function ({ getService }: FtrProviderContext) { existsInDocs: true, aggregatable: true, loading: false, + exampleCount: 1, }, ], nonMetricFieldsTypeFilterCardCount: 3, @@ -283,22 +322,42 @@ export default function ({ getService }: FtrProviderContext) { await ml.dataVisualizerIndexBased.assertTimeRangeSelectorSectionExists(); await ml.testExecution.logTestStep(`${testData.suiteTitle} loads data for full time range`); - await ml.dataVisualizerIndexBased.clickUseFullDataButton(testData.expected.totalDocCount); + await ml.dataVisualizerIndexBased.clickUseFullDataButton( + testData.expected.totalDocCountFormatted + ); await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the panels of fields`); await ml.dataVisualizerIndexBased.assertFieldsPanelsExist(testData.expected.fieldsPanelCount); - if (testData.expected.metricCards !== undefined && testData.expected.metricCards.length > 0) { - await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the Metrics panel`); - await ml.dataVisualizerIndexBased.assertFieldsPanelForTypesExist([ - ML_JOB_FIELD_TYPES.NUMBER, - ]); // document_count not exposed as a type in the panel + await ml.testExecution.logTestStep(`${testData.suiteTitle} displays the Metrics panel`); + await ml.dataVisualizerIndexBased.assertFieldsPanelForTypesExist([ML_JOB_FIELD_TYPES.NUMBER]); + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays the expected document count card` + ); + await ml.dataVisualizerIndexBased.assertCardExists( + testData.expected.documentCountCard.type, + testData.expected.documentCountCard.fieldName + ); + await ml.dataVisualizerIndexBased.assertDocumentCountCardContents(); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays the expected metric field cards and contents` + ); + + if (testData.expected.metricCards !== undefined && testData.expected.metricCards.length > 0) { await ml.testExecution.logTestStep( - `${testData.suiteTitle} displays the expected metric field cards` + `${testData.suiteTitle} displays the expected metric field cards and contents` ); - for (const fieldCard of testData.expected.metricCards as FieldVisConfig[]) { + for (const fieldCard of testData.expected.metricCards as MetricFieldVisConfig[]) { await ml.dataVisualizerIndexBased.assertCardExists(fieldCard.type, fieldCard.fieldName); + await ml.dataVisualizerIndexBased.assertNumberCardContents( + fieldCard.fieldName!, + fieldCard.docCountFormatted, + fieldCard.statsMaxDecimalPlaces, + fieldCard.selectedDetailsMode, + fieldCard.topValuesCount + ); } await ml.testExecution.logTestStep( @@ -323,10 +382,15 @@ export default function ({ getService }: FtrProviderContext) { ); await ml.testExecution.logTestStep( - `${testData.suiteTitle} displays the expected non-metric field cards` + `${testData.suiteTitle} displays the expected non-metric field cards and contents` ); for (const fieldCard of testData.expected.nonMetricCards!) { await ml.dataVisualizerIndexBased.assertCardExists(fieldCard.type, fieldCard.fieldName); + await ml.dataVisualizerIndexBased.assertNonMetricCardContents( + fieldCard.type, + fieldCard.fieldName!, + fieldCard.exampleCount + ); } await ml.testExecution.logTestStep( @@ -346,10 +410,22 @@ export default function ({ getService }: FtrProviderContext) { `${testData.suiteTitle} filters non-metric fields cards with search` ); await ml.dataVisualizerIndexBased.filterFieldsPanelWithSearchString( - getFieldTypes(testData.expected.nonMetricCards as FieldVisConfig[]), + fieldTypes, testData.nonMetricFieldsFilter, testData.expected.nonMetricFieldsFilterCardCount ); + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} sample size control changes non-metric field cards doc count` + ); + await ml.dataVisualizerIndexBased.clearFieldsPanelSearchInput(fieldTypes); + await ml.dataVisualizerIndexBased.assertSampleSizeInputExists(); + await ml.dataVisualizerIndexBased.setSampleSizeInputValue( + 1000, + ML_JOB_FIELD_TYPES.KEYWORD, + 'airline', + '1,000' + ); } }); } @@ -366,10 +442,6 @@ export default function ({ getService }: FtrProviderContext) { await ml.securityUI.loginAsMlPowerUser(); }); - // TODO - add tests for - // - validating metrics displayed inside the cards - // - selecting a document sample size - describe('with farequote', function () { // Run tests on full farequote index. it(`${farequoteIndexPatternTestData.suiteTitle} loads the data visualizer selector page`, async () => { diff --git a/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts b/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts index 4abf4dabf7939..285ea49419bbd 100644 --- a/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts +++ b/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts @@ -96,7 +96,7 @@ export default function ({ getService }: FtrProviderContext) { const filterItems = ['filter_item_permission']; const ecIndexPattern = 'ft_module_sample_ecommerce'; - const ecExpectedTotalCount = 287; + const ecExpectedTotalCount = '287'; const ecExpectedFieldPanelCount = 2; const ecExpectedModuleId = 'sample_data_ecommerce'; diff --git a/x-pack/test/functional/apps/ml/permissions/read_ml_access.ts b/x-pack/test/functional/apps/ml/permissions/read_ml_access.ts index 22dcc945acd5c..1557d2b4ec2fb 100644 --- a/x-pack/test/functional/apps/ml/permissions/read_ml_access.ts +++ b/x-pack/test/functional/apps/ml/permissions/read_ml_access.ts @@ -97,7 +97,7 @@ export default function ({ getService }: FtrProviderContext) { const filterItems = ['filter_item_permission']; const ecIndexPattern = 'ft_module_sample_ecommerce'; - const ecExpectedTotalCount = 287; + const ecExpectedTotalCount = '287'; const ecExpectedFieldPanelCount = 2; const uploadFilePath = path.join( diff --git a/x-pack/test/functional/services/ml/data_visualizer_index_based.ts b/x-pack/test/functional/services/ml/data_visualizer_index_based.ts index 31cd17e4df826..60677423a2aa1 100644 --- a/x-pack/test/functional/services/ml/data_visualizer_index_based.ts +++ b/x-pack/test/functional/services/ml/data_visualizer_index_based.ts @@ -7,10 +7,12 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; import { ML_JOB_FIELD_TYPES } from '../../../../plugins/ml/common/constants/field_types'; +import { MlCommonUI } from './common_ui'; -export function MachineLearningDataVisualizerIndexBasedProvider({ - getService, -}: FtrProviderContext) { +export function MachineLearningDataVisualizerIndexBasedProvider( + { getService }: FtrProviderContext, + mlCommonUI: MlCommonUI +) { const testSubjects = getService('testSubjects'); const retry = getService('retry'); const browser = getService('browser'); @@ -20,19 +22,19 @@ export function MachineLearningDataVisualizerIndexBasedProvider({ await testSubjects.existOrFail('mlDataVisualizerTimeRangeSelectorSection'); }, - async assertTotalDocumentCount(expectedTotalDocCount: number) { + async assertTotalDocumentCount(expectedFormattedTotalDocCount: string) { await retry.tryForTime(5000, async () => { const docCount = await testSubjects.getVisibleText('mlDataVisualizerTotalDocCount'); expect(docCount).to.eql( - expectedTotalDocCount, - `Expected total document count to be '${expectedTotalDocCount}' (got '${docCount}')` + expectedFormattedTotalDocCount, + `Expected total document count to be '${expectedFormattedTotalDocCount}' (got '${docCount}')` ); }); }, - async clickUseFullDataButton(expectedTotalDocCount: number) { + async clickUseFullDataButton(expectedFormattedTotalDocCount: string) { await testSubjects.clickWhenNotDisabled('mlButtonUseFullData'); - await this.assertTotalDocumentCount(expectedTotalDocCount); + await this.assertTotalDocumentCount(expectedFormattedTotalDocCount); }, async assertFieldsPanelsExist(expectedPanelCount: number) { @@ -51,6 +53,166 @@ export function MachineLearningDataVisualizerIndexBasedProvider({ await testSubjects.existOrFail(`mlFieldDataCard ${fieldName} ${cardType}`); }, + async assertCardContentsExists(cardType: string, fieldName?: string) { + await testSubjects.existOrFail( + `mlFieldDataCard ${fieldName} ${cardType} > mlFieldDataCardContent` + ); + }, + + async assertNonMetricCardContents(cardType: string, fieldName: string, exampleCount?: number) { + await this.assertCardContentsExists(cardType, fieldName); + + // Currently the data used in the data visualizer tests only contains these field types. + if (cardType === ML_JOB_FIELD_TYPES.DATE) { + await this.assertDateCardContents(fieldName); + } else if (cardType === ML_JOB_FIELD_TYPES.KEYWORD) { + await this.assertKeywordCardContents(fieldName, exampleCount!); + } else if (cardType === ML_JOB_FIELD_TYPES.TEXT) { + await this.assertTextCardContents(fieldName, exampleCount!); + } + }, + + async assertDocumentCountCardContents() { + await this.assertCardContentsExists('number', undefined); + await testSubjects.existOrFail( + 'mlFieldDataCard undefined number > mlFieldDataCardDocumentCountChart' + ); + }, + + async assertNumberCardContents( + fieldName: string, + docCountFormatted: string, + statsMaxDecimalPlaces: number, + selectedDetailsMode: 'distribution' | 'top_values', + topValuesCount: number + ) { + await this.assertCardContentsExists('number', fieldName); + await this.assertFieldDocCountExists('number', fieldName); + await this.assertFieldDocCountContents('number', fieldName, docCountFormatted); + await this.assertFieldCardinalityExists('number', fieldName); + + await this.assertNumberStatsContents(fieldName, 'Min', statsMaxDecimalPlaces); + await this.assertNumberStatsContents(fieldName, 'Median', statsMaxDecimalPlaces); + await this.assertNumberStatsContents(fieldName, 'Max', statsMaxDecimalPlaces); + + await testSubjects.existOrFail( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardDetailsSelect` + ); + + if (selectedDetailsMode === 'distribution') { + await mlCommonUI.assertRadioGroupValue( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardDetailsSelect`, + 'distribution' + ); + await testSubjects.existOrFail( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardMetricDistributionChart` + ); + + await mlCommonUI.selectRadioGroupValue( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardDetailsSelect`, + 'top_values' + ); + await this.assertTopValuesContents('number', fieldName, topValuesCount); + } else { + await mlCommonUI.assertRadioGroupValue( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardDetailsSelect`, + 'top_values' + ); + await this.assertTopValuesContents('number', fieldName, topValuesCount); + + await mlCommonUI.selectRadioGroupValue( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardDetailsSelect`, + 'distribution' + ); + await testSubjects.existOrFail( + `mlFieldDataCard ${fieldName} number > mlFieldDataCardMetricDistributionChart` + ); + } + }, + + async assertDateCardContents(fieldName: string) { + await this.assertFieldDocCountExists('date', fieldName); + await testSubjects.existOrFail(`mlFieldDataCard ${fieldName} date > mlFieldDataCardEarliest`); + await testSubjects.existOrFail(`mlFieldDataCard ${fieldName} date > mlFieldDataCardLatest`); + }, + + async assertKeywordCardContents(fieldName: string, expectedTopValuesCount: number) { + await this.assertFieldDocCountExists('keyword', fieldName); + await this.assertFieldCardinalityExists('keyword', fieldName); + await this.assertTopValuesContents('keyword', fieldName, expectedTopValuesCount); + }, + + async assertTextCardContents(fieldName: string, expectedExamplesCount: number) { + const examplesList = await testSubjects.find( + `mlFieldDataCard ${fieldName} text > mlFieldDataCardExamplesList` + ); + const examplesListItems = await examplesList.findAllByTagName('li'); + expect(examplesListItems).to.have.length( + expectedExamplesCount, + `Expected example list item count for field '${fieldName}' to be '${expectedExamplesCount}' (got '${examplesListItems.length}')` + ); + }, + + async assertFieldDocCountExists(cardType: string, fieldName: string) { + await testSubjects.existOrFail( + `mlFieldDataCard ${fieldName} ${cardType} > mlFieldDataCardDocCount` + ); + }, + + async assertFieldDocCountContents( + cardType: string, + fieldName: string, + docCountFormatted: string + ) { + const docCountText = await testSubjects.getVisibleText( + `mlFieldDataCard ${fieldName} ${cardType} > mlFieldDataCardDocCount` + ); + expect(docCountText).to.contain( + docCountFormatted, + `Expected doc count for '${fieldName}' to be '${docCountFormatted}' (got contents '${docCountText}')` + ); + }, + + async assertFieldCardinalityExists(cardType: string, fieldName: string) { + await testSubjects.existOrFail( + `mlFieldDataCard ${fieldName} ${cardType} > mlFieldDataCardCardinality` + ); + }, + + async assertNumberStatsContents( + fieldName: string, + stat: 'Min' | 'Median' | 'Max', + maxDecimalPlaces: number + ) { + const statElement = await testSubjects.find( + `mlFieldDataCard ${fieldName} number > mlFieldDataCard${stat}` + ); + const statValue = await statElement.getVisibleText(); + const dotIdx = statValue.indexOf('.'); + const numDecimalPlaces = dotIdx === -1 ? 0 : statValue.length - dotIdx - 1; + expect(numDecimalPlaces).to.be.lessThan( + maxDecimalPlaces + 1, + `Expected number of decimal places for '${fieldName}' '${stat}' to be less than or equal to '${maxDecimalPlaces}' (got '${numDecimalPlaces}')` + ); + }, + + async assertTopValuesContents( + cardType: string, + fieldName: string, + expectedTopValuesCount: number + ) { + const topValuesElement = await testSubjects.find( + `mlFieldDataCard ${fieldName} ${cardType} > mlFieldDataCardTopValues` + ); + const topValuesBars = await topValuesElement.findAllByTestSubject( + 'mlFieldDataCardTopValueBar' + ); + expect(topValuesBars).to.have.length( + expectedTopValuesCount, + `Expected top values count for field '${fieldName}' to be '${expectedTopValuesCount}' (got '${topValuesBars.length}')` + ); + }, + async assertFieldsPanelCardCount(panelFieldTypes: string[], expectedCardCount: number) { await retry.tryForTime(5000, async () => { const filteredCards = await testSubjects.findAll( @@ -75,6 +237,15 @@ export function MachineLearningDataVisualizerIndexBasedProvider({ ); }, + async clearFieldsPanelSearchInput(fieldTypes: string[]) { + const searchBar = await testSubjects.find( + `mlDataVisualizerFieldsPanel ${fieldTypes} > mlDataVisualizerFieldsSearchBarDiv` + ); + const searchBarInput = await searchBar.findByTagName('input'); + await searchBarInput.clearValueWithKeyboard(); + await searchBarInput.pressKeys(browser.keys.ENTER); + }, + async filterFieldsPanelWithSearchString( fieldTypes: string[], filter: string, @@ -119,6 +290,25 @@ export function MachineLearningDataVisualizerIndexBasedProvider({ await this.assertFieldsPanelCardCount(panelFieldTypes, expectedCardCount); }, + async assertSampleSizeInputExists() { + await testSubjects.existOrFail('mlDataVisualizerShardSizeSelect'); + }, + + async setSampleSizeInputValue( + sampleSize: number, + cardType: string, + fieldName: string, + docCountFormatted: string + ) { + await testSubjects.clickWhenNotDisabled('mlDataVisualizerShardSizeSelect'); + await testSubjects.existOrFail(`mlDataVisualizerShardSizeOption ${sampleSize}`); + await testSubjects.click(`mlDataVisualizerShardSizeOption ${sampleSize}`); + + await retry.tryForTime(5000, async () => { + await this.assertFieldDocCountContents(cardType, fieldName, docCountFormatted); + }); + }, + async assertActionsPanelExists() { await testSubjects.existOrFail('mlDataVisualizerActionsPanel'); }, diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index b9ff0692cb737..3744e3cad6471 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -62,7 +62,10 @@ export function MachineLearningProvider(context: FtrProviderContext) { const dataFrameAnalyticsTable = MachineLearningDataFrameAnalyticsTableProvider(context); const dataVisualizer = MachineLearningDataVisualizerProvider(context); const dataVisualizerFileBased = MachineLearningDataVisualizerFileBasedProvider(context, commonUI); - const dataVisualizerIndexBased = MachineLearningDataVisualizerIndexBasedProvider(context); + const dataVisualizerIndexBased = MachineLearningDataVisualizerIndexBasedProvider( + context, + commonUI + ); const jobManagement = MachineLearningJobManagementProvider(context, api); const jobSelection = MachineLearningJobSelectionProvider(context); const jobSourceSelection = MachineLearningJobSourceSelectionProvider(context); diff --git a/x-pack/test/functional_basic/apps/ml/permissions/full_ml_access.ts b/x-pack/test/functional_basic/apps/ml/permissions/full_ml_access.ts index 7a8a58a359b4e..8140b471fc6c8 100644 --- a/x-pack/test/functional_basic/apps/ml/permissions/full_ml_access.ts +++ b/x-pack/test/functional_basic/apps/ml/permissions/full_ml_access.ts @@ -20,7 +20,7 @@ export default function ({ getService }: FtrProviderContext) { for (const user of testUsers) { describe(`(${user})`, function () { const ecIndexPattern = 'ft_module_sample_ecommerce'; - const ecExpectedTotalCount = 287; + const ecExpectedTotalCount = '287'; const ecExpectedFieldPanelCount = 2; const ecExpectedModuleId = 'sample_data_ecommerce'; diff --git a/x-pack/test/functional_basic/apps/ml/permissions/read_ml_access.ts b/x-pack/test/functional_basic/apps/ml/permissions/read_ml_access.ts index 331f2c83639fc..522ca15934e22 100644 --- a/x-pack/test/functional_basic/apps/ml/permissions/read_ml_access.ts +++ b/x-pack/test/functional_basic/apps/ml/permissions/read_ml_access.ts @@ -20,7 +20,7 @@ export default function ({ getService }: FtrProviderContext) { for (const user of testUsers) { describe(`(${user})`, function () { const ecIndexPattern = 'ft_module_sample_ecommerce'; - const ecExpectedTotalCount = 287; + const ecExpectedTotalCount = '287'; const ecExpectedFieldPanelCount = 2; const ecExpectedModuleId = 'sample_data_ecommerce'; From 4ad3cefec9ba581ce2726f30ffe6185fbec9b52b Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Fri, 13 Nov 2020 17:35:04 -0800 Subject: [PATCH 02/11] Added ability to fire actions when an alert instance is resolved (#82799) * Added ability to fire actions when an alert instance is resolved * Fixed due to comments * Fixed merge issue * Fixed tests and added skip for muted resolve * added test for muted alert * Fixed due to comments * Fixed registry error message * Fixed jest test --- .../alerts/common/builtin_action_groups.ts | 18 +++ x-pack/plugins/alerts/common/index.ts | 6 +- .../alerts/server/alert_type_registry.test.ts | 35 +++++ .../alerts/server/alert_type_registry.ts | 25 ++++ .../server/task_runner/task_runner.test.ts | 87 +++++++++++- .../alerts/server/task_runner/task_runner.ts | 38 ++++++ .../plugins/alerts/server/alert_types.ts | 14 ++ .../tests/alerting/list_alert_types.ts | 10 +- .../spaces_only/tests/alerting/alerts_base.ts | 128 ++++++++++++++++++ .../tests/alerting/list_alert_types.ts | 5 +- 10 files changed, 355 insertions(+), 11 deletions(-) create mode 100644 x-pack/plugins/alerts/common/builtin_action_groups.ts diff --git a/x-pack/plugins/alerts/common/builtin_action_groups.ts b/x-pack/plugins/alerts/common/builtin_action_groups.ts new file mode 100644 index 0000000000000..d31f75357d370 --- /dev/null +++ b/x-pack/plugins/alerts/common/builtin_action_groups.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { i18n } from '@kbn/i18n'; +import { ActionGroup } from './alert_type'; + +export const ResolvedActionGroup: ActionGroup = { + id: 'resolved', + name: i18n.translate('xpack.alerts.builtinActionGroups.resolved', { + defaultMessage: 'Resolved', + }), +}; + +export function getBuiltinActionGroups(): ActionGroup[] { + return [ResolvedActionGroup]; +} diff --git a/x-pack/plugins/alerts/common/index.ts b/x-pack/plugins/alerts/common/index.ts index 65aeec840da7e..4d0e7bf7eb0bc 100644 --- a/x-pack/plugins/alerts/common/index.ts +++ b/x-pack/plugins/alerts/common/index.ts @@ -12,11 +12,7 @@ export * from './alert_instance'; export * from './alert_task_instance'; export * from './alert_navigation'; export * from './alert_instance_summary'; - -export interface ActionGroup { - id: string; - name: string; -} +export * from './builtin_action_groups'; export interface AlertingFrameworkHealth { isSufficientlySecure: boolean; diff --git a/x-pack/plugins/alerts/server/alert_type_registry.test.ts b/x-pack/plugins/alerts/server/alert_type_registry.test.ts index 9e1545bae5384..8dc387f96addb 100644 --- a/x-pack/plugins/alerts/server/alert_type_registry.test.ts +++ b/x-pack/plugins/alerts/server/alert_type_registry.test.ts @@ -95,6 +95,33 @@ describe('register()', () => { ); }); + test('throws if AlertType action groups contains reserved group id', () => { + const alertType = { + id: 'test', + name: 'Test', + actionGroups: [ + { + id: 'default', + name: 'Default', + }, + { + id: 'resolved', + name: 'Resolved', + }, + ], + defaultActionGroupId: 'default', + executor: jest.fn(), + producer: 'alerts', + }; + const registry = new AlertTypeRegistry(alertTypeRegistryParams); + + expect(() => registry.register(alertType)).toThrowError( + new Error( + `Alert type [id="${alertType.id}"] cannot be registered. Action groups [resolved] are reserved by the framework.` + ) + ); + }); + test('registers the executor with the task manager', () => { const alertType = { id: 'test', @@ -201,6 +228,10 @@ describe('get()', () => { "id": "default", "name": "Default", }, + Object { + "id": "resolved", + "name": "Resolved", + }, ], "actionVariables": Object { "context": Array [], @@ -255,6 +286,10 @@ describe('list()', () => { "id": "testActionGroup", "name": "Test Action Group", }, + Object { + "id": "resolved", + "name": "Resolved", + }, ], "actionVariables": Object { "context": Array [], diff --git a/x-pack/plugins/alerts/server/alert_type_registry.ts b/x-pack/plugins/alerts/server/alert_type_registry.ts index 1d2d9981faeaa..8fe2ab06acd9a 100644 --- a/x-pack/plugins/alerts/server/alert_type_registry.ts +++ b/x-pack/plugins/alerts/server/alert_type_registry.ts @@ -8,6 +8,8 @@ import Boom from '@hapi/boom'; import { i18n } from '@kbn/i18n'; import { schema } from '@kbn/config-schema'; import typeDetect from 'type-detect'; +import { intersection } from 'lodash'; +import _ from 'lodash'; import { RunContext, TaskManagerSetupContract } from '../../task_manager/server'; import { TaskRunnerFactory } from './task_runner'; import { @@ -16,7 +18,9 @@ import { AlertTypeState, AlertInstanceState, AlertInstanceContext, + ActionGroup, } from './types'; +import { getBuiltinActionGroups } from '../common'; interface ConstructorOptions { taskManager: TaskManagerSetupContract; @@ -82,6 +86,8 @@ export class AlertTypeRegistry { ); } alertType.actionVariables = normalizedActionVariables(alertType.actionVariables); + validateActionGroups(alertType.id, alertType.actionGroups); + alertType.actionGroups = [...alertType.actionGroups, ..._.cloneDeep(getBuiltinActionGroups())]; this.alertTypes.set(alertIdSchema.validate(alertType.id), { ...alertType } as AlertType); this.taskManager.registerTaskDefinitions({ [`alerting:${alertType.id}`]: { @@ -137,3 +143,22 @@ function normalizedActionVariables(actionVariables: AlertType['actionVariables'] params: actionVariables?.params ?? [], }; } + +function validateActionGroups(alertTypeId: string, actionGroups: ActionGroup[]) { + const reservedActionGroups = intersection( + actionGroups.map((item) => item.id), + getBuiltinActionGroups().map((item) => item.id) + ); + if (reservedActionGroups.length > 0) { + throw new Error( + i18n.translate('xpack.alerts.alertTypeRegistry.register.reservedActionGroupUsageError', { + defaultMessage: + 'Alert type [id="{alertTypeId}"] cannot be registered. Action groups [{actionGroups}] are reserved by the framework.', + values: { + actionGroups: reservedActionGroups.join(', '), + alertTypeId, + }, + }) + ); + } +} diff --git a/x-pack/plugins/alerts/server/task_runner/task_runner.test.ts b/x-pack/plugins/alerts/server/task_runner/task_runner.test.ts index 859b6ec4362ce..bd583159af5d5 100644 --- a/x-pack/plugins/alerts/server/task_runner/task_runner.test.ts +++ b/x-pack/plugins/alerts/server/task_runner/task_runner.test.ts @@ -25,12 +25,12 @@ import { alertsMock, alertsClientMock } from '../mocks'; import { eventLoggerMock } from '../../../event_log/server/event_logger.mock'; import { IEventLogger } from '../../../event_log/server'; import { SavedObjectsErrorHelpers } from '../../../../../src/core/server'; -import { Alert } from '../../common'; +import { Alert, ResolvedActionGroup } from '../../common'; import { omit } from 'lodash'; const alertType = { id: 'test', name: 'My test alert', - actionGroups: [{ id: 'default', name: 'Default' }], + actionGroups: [{ id: 'default', name: 'Default' }, ResolvedActionGroup], defaultActionGroupId: 'default', executor: jest.fn(), producer: 'alerts', @@ -91,7 +91,7 @@ describe('Task Runner', () => { throttle: null, muteAll: false, enabled: true, - alertTypeId: '123', + alertTypeId: alertType.id, apiKey: '', apiKeyOwner: 'elastic', schedule: { interval: '10s' }, @@ -112,6 +112,14 @@ describe('Task Runner', () => { foo: true, }, }, + { + group: ResolvedActionGroup.id, + id: '2', + actionTypeId: 'action', + params: { + isResolved: true, + }, + }, ], executionStatus: { status: 'unknown', @@ -507,6 +515,79 @@ describe('Task Runner', () => { `); }); + test('fire resolved actions for execution for the alertInstances which is in the resolved state', async () => { + taskRunnerFactoryInitializerParams.actionsPlugin.isActionTypeEnabled.mockReturnValue(true); + taskRunnerFactoryInitializerParams.actionsPlugin.isActionExecutable.mockReturnValue(true); + + alertType.executor.mockImplementation( + ({ services: executorServices }: AlertExecutorOptions) => { + executorServices.alertInstanceFactory('1').scheduleActions('default'); + } + ); + const taskRunner = new TaskRunner( + alertType, + { + ...mockedTaskInstance, + state: { + ...mockedTaskInstance.state, + alertInstances: { + '1': { meta: {}, state: { bar: false } }, + '2': { meta: {}, state: { bar: false } }, + }, + }, + }, + taskRunnerFactoryInitializerParams + ); + alertsClient.get.mockResolvedValue(mockedAlertTypeSavedObject); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValue({ + id: '1', + type: 'alert', + attributes: { + apiKey: Buffer.from('123:abc').toString('base64'), + }, + references: [], + }); + const runnerResult = await taskRunner.run(); + expect(runnerResult.state.alertInstances).toMatchInlineSnapshot(` + Object { + "1": Object { + "meta": Object { + "lastScheduledActions": Object { + "date": 1970-01-01T00:00:00.000Z, + "group": "default", + }, + }, + "state": Object { + "bar": false, + }, + }, + } + `); + + const eventLogger = taskRunnerFactoryInitializerParams.eventLogger; + expect(eventLogger.logEvent).toHaveBeenCalledTimes(5); + expect(actionsClient.enqueueExecution).toHaveBeenCalledTimes(2); + expect(actionsClient.enqueueExecution.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "apiKey": "MTIzOmFiYw==", + "id": "2", + "params": Object { + "isResolved": true, + }, + "source": Object { + "source": Object { + "id": "1", + "type": "alert", + }, + "type": "SAVED_OBJECT", + }, + "spaceId": undefined, + }, + ] + `); + }); + test('persists alertInstances passed in from state, only if they are scheduled for execution', async () => { alertType.executor.mockImplementation( ({ services: executorServices }: AlertExecutorOptions) => { diff --git a/x-pack/plugins/alerts/server/task_runner/task_runner.ts b/x-pack/plugins/alerts/server/task_runner/task_runner.ts index 5bccf5c497a60..0dad952a86590 100644 --- a/x-pack/plugins/alerts/server/task_runner/task_runner.ts +++ b/x-pack/plugins/alerts/server/task_runner/task_runner.ts @@ -37,6 +37,7 @@ import { IEvent, IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '../../../event_l import { isAlertSavedObjectNotFoundError } from '../lib/is_alert_not_found_error'; import { AlertsClient } from '../alerts_client'; import { partiallyUpdateAlert } from '../saved_objects'; +import { ResolvedActionGroup } from '../../common'; const FALLBACK_RETRY_INTERVAL = '5m'; @@ -210,6 +211,7 @@ export class TaskRunner { const instancesWithScheduledActions = pickBy(alertInstances, (alertInstance: AlertInstance) => alertInstance.hasScheduledActions() ); + generateNewAndResolvedInstanceEvents({ eventLogger, originalAlertInstances, @@ -220,6 +222,14 @@ export class TaskRunner { }); if (!muteAll) { + scheduleActionsForResolvedInstances( + alertInstances, + executionHandler, + originalAlertInstances, + instancesWithScheduledActions, + alert.mutedInstanceIds + ); + const mutedInstanceIdsSet = new Set(mutedInstanceIds); await Promise.all( @@ -479,6 +489,34 @@ function generateNewAndResolvedInstanceEvents(params: GenerateNewAndResolvedInst } } +function scheduleActionsForResolvedInstances( + alertInstancesMap: Record, + executionHandler: ReturnType, + originalAlertInstances: Record, + currentAlertInstances: Dictionary, + mutedInstanceIds: string[] +) { + const currentAlertInstanceIds = Object.keys(currentAlertInstances); + const originalAlertInstanceIds = Object.keys(originalAlertInstances); + const resolvedIds = without( + originalAlertInstanceIds, + ...currentAlertInstanceIds, + ...mutedInstanceIds + ); + for (const id of resolvedIds) { + const instance = alertInstancesMap[id]; + instance.updateLastScheduledActions(ResolvedActionGroup.id); + instance.unscheduleActions(); + executionHandler({ + actionGroup: ResolvedActionGroup.id, + context: {}, + state: {}, + alertInstanceId: id, + }); + instance.scheduleActions(ResolvedActionGroup.id); + } +} + /** * If an error is thrown, wrap it in an AlertTaskRunResult * so that we can treat each field independantly diff --git a/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts b/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts index d43c3363f86b1..7ed864afac4cc 100644 --- a/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts +++ b/x-pack/test/alerting_api_integration/common/fixtures/plugins/alerts/server/alert_types.ts @@ -7,6 +7,7 @@ import { CoreSetup } from 'src/core/server'; import { schema, TypeOf } from '@kbn/config-schema'; import { times } from 'lodash'; +import { ES_TEST_INDEX_NAME } from '../../../../lib'; import { FixtureStartDeps, FixtureSetupDeps } from './plugin'; import { AlertType, @@ -330,6 +331,7 @@ function getValidationAlertType() { function getPatternFiringAlertType() { const paramsSchema = schema.object({ pattern: schema.recordOf(schema.string(), schema.arrayOf(schema.boolean())), + reference: schema.maybe(schema.string()), }); type ParamsType = TypeOf; interface State { @@ -353,6 +355,18 @@ function getPatternFiringAlertType() { maxPatternLength = Math.max(maxPatternLength, instancePattern.length); } + if (params.reference) { + await services.scopedClusterClient.index({ + index: ES_TEST_INDEX_NAME, + refresh: 'wait_for', + body: { + reference: params.reference, + source: 'alert:test.patternFiring', + ...alertExecutorOptions, + }, + }); + } + // get the pattern index, return if past it const patternIndex = state.patternIndex ?? 0; if (patternIndex >= maxPatternLength) { diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/list_alert_types.ts b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/list_alert_types.ts index ad60ed6941caf..b3635b9f40e27 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/list_alert_types.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/tests/alerting/list_alert_types.ts @@ -15,7 +15,10 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { const supertestWithoutAuth = getService('supertestWithoutAuth'); const expectedNoOpType = { - actionGroups: [{ id: 'default', name: 'Default' }], + actionGroups: [ + { id: 'default', name: 'Default' }, + { id: 'resolved', name: 'Resolved' }, + ], defaultActionGroupId: 'default', id: 'test.noop', name: 'Test: Noop', @@ -28,7 +31,10 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { }; const expectedRestrictedNoOpType = { - actionGroups: [{ id: 'default', name: 'Default' }], + actionGroups: [ + { id: 'default', name: 'Default' }, + { id: 'resolved', name: 'Resolved' }, + ], defaultActionGroupId: 'default', id: 'test.restricted-noop', name: 'Test: Restricted Noop', diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/alerts_base.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/alerts_base.ts index 75628f6c72487..26f52475a2d4e 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/alerts_base.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/alerts_base.ts @@ -6,6 +6,7 @@ import expect from '@kbn/expect'; import { Response as SupertestResponse } from 'supertest'; +import { ResolvedActionGroup } from '../../../../../plugins/alerts/common'; import { Space } from '../../../common/types'; import { FtrProviderContext } from '../../../common/ftr_provider_context'; import { @@ -135,6 +136,133 @@ instanceStateValue: true await taskManagerUtils.waitForActionTaskParamsToBeCleanedUp(testStart); }); + it('should fire actions when an alert instance is resolved', async () => { + const reference = alertUtils.generateReference(); + + const { body: createdAction } = await supertestWithoutAuth + .post(`${getUrlPrefix(space.id)}/api/actions/action`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + actionTypeId: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire. + const pattern = { + instance: [true, true], + }; + + const createdAlert = await supertestWithoutAuth + .post(`${getUrlPrefix(space.id)}/api/alerts/alert`) + .set('kbn-xsrf', 'foo') + .send( + getTestAlertData({ + alertTypeId: 'test.patternFiring', + schedule: { interval: '1s' }, + throttle: null, + params: { + pattern, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + }, + { + group: ResolvedActionGroup.id, + id: indexRecordActionId, + params: { + index: ES_TEST_INDEX_NAME, + reference, + message: 'Resolved message', + }, + }, + ], + }) + ); + + expect(createdAlert.status).to.eql(200); + const alertId = createdAlert.body.id; + objectRemover.add(space.id, alertId, 'alert', 'alerts'); + + const actionTestRecord = ( + await esTestIndexTool.waitForDocs('action:test.index-record', reference) + )[0]; + + expect(actionTestRecord._source.params.message).to.eql('Resolved message'); + }); + + it('should not fire actions when an alert instance is resolved, but alert is muted', async () => { + const testStart = new Date(); + const reference = alertUtils.generateReference(); + + const { body: createdAction } = await supertestWithoutAuth + .post(`${getUrlPrefix(space.id)}/api/actions/action`) + .set('kbn-xsrf', 'foo') + .send({ + name: 'MY action', + actionTypeId: 'test.noop', + config: {}, + secrets: {}, + }) + .expect(200); + + // pattern of when the alert should fire. + const pattern = { + instance: [true, true], + }; + // created disabled alert + const createdAlert = await supertestWithoutAuth + .post(`${getUrlPrefix(space.id)}/api/alerts/alert`) + .set('kbn-xsrf', 'foo') + .send( + getTestAlertData({ + alertTypeId: 'test.patternFiring', + schedule: { interval: '1s' }, + enabled: false, + throttle: null, + params: { + pattern, + reference, + }, + actions: [ + { + id: createdAction.id, + group: 'default', + params: {}, + }, + { + group: ResolvedActionGroup.id, + id: indexRecordActionId, + params: { + index: ES_TEST_INDEX_NAME, + reference, + message: 'Resolved message', + }, + }, + ], + }) + ); + expect(createdAlert.status).to.eql(200); + const alertId = createdAlert.body.id; + + await alertUtils.muteAll(alertId); + + await alertUtils.enable(alertId); + + await esTestIndexTool.search('alert:test.patternFiring', reference); + + await taskManagerUtils.waitForActionTaskParamsToBeCleanedUp(testStart); + + const actionTestRecord = await esTestIndexTool.search('action:test.index-record', reference); + expect(actionTestRecord.hits.total.value).to.eql(0); + objectRemover.add(space.id, alertId, 'alert', 'alerts'); + }); + it('should reschedule failing alerts using the Task Manager retry logic with alert schedule interval', async () => { /* Alerts should set the Task Manager schedule interval with initial value. diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/list_alert_types.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/list_alert_types.ts index 6fb573c7344b3..3fb2cc40437d8 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/list_alert_types.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/list_alert_types.ts @@ -23,7 +23,10 @@ export default function listAlertTypes({ getService }: FtrProviderContext) { (alertType: any) => alertType.id === 'test.noop' ); expect(fixtureAlertType).to.eql({ - actionGroups: [{ id: 'default', name: 'Default' }], + actionGroups: [ + { id: 'default', name: 'Default' }, + { id: 'resolved', name: 'Resolved' }, + ], defaultActionGroupId: 'default', id: 'test.noop', name: 'Test: Noop', From 380fa5b3f6f00e2f500ed9cb64896327f5ae68cf Mon Sep 17 00:00:00 2001 From: John Schulz Date: Sat, 14 Nov 2020 07:32:02 -0500 Subject: [PATCH 03/11] [bundle optimization] Update to semver 7.x to get tree-shaking (#83020) ## What's changed in this PR ### Update to latest available `semver`: `7.3.2` * `semver` 5.x pulls in the entire library in one large file (~38k uncompressed / ~9k gz), when we might only use 1-2K. * `semver` 7.0+ supports tree-shaking: https://github.com/npm/node-semver/blob/master/CHANGELOG.md#700 ### Update paths to only import individual function(s) used instead of the entire library * Getting the smaller bundle requires a different import style [as shown in the docs](https://github.com/npm/node-semver#usage) * Only changed code in `public` & `common` folders; not `server`. We could also update `server` as well for consistency, but I skipped because the new import style is more verbose and the filesize didn't seem as important on the server ### Results The build stats show a 10K+ improvement for initial page bundles https://github.com/elastic/kibana/pull/83020#issuecomment-724724432 | id | [before](https://github.com/elastic/kibana/commit/c6afc47f32e4630d032a7cf4a4c3ee02660ef40b) | [after](https://github.com/elastic/kibana/commit/213bb52a8cdc8c6d5609d136c9c88a35cfb9b63c) | diff | | --- | --- | --- | --- | | `ingestManager` | 386.2KB | 373.9KB | -12.3KB | | `telemetry` | 63.5KB | 50.1KB | -13.5KB | | `upgradeAssistant` | 74.5KB | 60.5KB | -14.0KB | | total | | | -39.7KB | ### The import paths look odd. Are they required? I agree and, no, they're not strictly required. If you'd like me to revert to the prior style just drop a comment and I'll undo them. The caveat is that the current style (in `master` & this PR) pulls in the entire `semver` library. In 7.x that added ~15K to the initial size. Some more details in the comments: https://github.com/elastic/kibana/pull/83020#issuecomment-724859130 ### Possible issues Moving 2 major versions. We're currently on 5.7 and the latest available is 7.3. * changelog says 5.x (our current) to 6.0 should be safe: https://github.com/npm/node-semver/blob/master/CHANGELOG.md#60 * There 6.x & 7.x changes all appear to be new features or bugfixes around the `includePrerelease` flag added in 5.6, but I'm not sure if those "fixes" will break existing code * https://github.com/npm/node-semver/blob/master/CHANGELOG.md#613 * https://github.com/npm/node-semver/blob/master/CHANGELOG.md#722 ### Stats / screenshots generated with `node scripts/build_kibana_platform_plugins.js --profile --focus=ingestManager`
Ingest Manager in `master`: imports entire `semver` lib, totals 40k+, only 1 large file (orange arc below) Screen Shot 2020-11-09 at 6 50 23 PM
Ingest Manager in PR after upgrade to 7: still imports entire lib. file size *increased* to ~60k, but now individual files are imported (orange arcs below) Screen Shot 2020-11-09 at 5 46 30 PM Screen Shot 2020-11-09 at 5 47 06 PM
Ingest Manager in PR after changing `import`s: total imported size down to ~20k. Can see individual imported files Screen Shot 2020-11-10 at 6 10 23 AM Screen Shot 2020-11-10 at 6 10 53 AM
### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- package.json | 4 +- packages/kbn-pm/dist/index.js | 3507 ++++++++++++----- .../dashboard/common/migrate_to_730_panels.ts | 12 +- .../application/lib/migrate_app_state.ts | 4 +- .../telemetry_config/get_telemetry_opt_in.ts | 7 +- .../enterprise_search/common/version.ts | 2 +- .../common/services/is_agent_upgradeable.ts | 9 +- .../server/routes/agent/upgrade_handler.ts | 6 +- .../agents/checkin/state_new_actions.ts | 12 +- .../fleet/server/services/agents/enroll.ts | 13 +- .../server/services/epm/packages/install.ts | 7 +- .../server/services/epm/registry/index.ts | 4 +- x-pack/plugins/ml/common/util/job_utils.ts | 5 +- .../public/lib/logstash/pipelines.js | 4 +- .../upgrade_assistant/common/version.ts | 2 +- x-pack/tasks/helpers/pkg.ts | 4 +- yarn.lock | 8 +- 17 files changed, 2551 insertions(+), 1059 deletions(-) diff --git a/package.json b/package.json index 7315007edf93d..1a19b322bf655 100644 --- a/package.json +++ b/package.json @@ -295,7 +295,7 @@ "rison-node": "1.0.2", "rxjs": "^6.5.5", "seedrandom": "^3.0.5", - "semver": "^5.7.0", + "semver": "^7.3.2", "set-value": "^3.0.2", "source-map-support": "^0.5.19", "squel": "^5.13.0", @@ -536,7 +536,7 @@ "@types/request": "^2.48.2", "@types/seedrandom": ">=2.0.0 <4.0.0", "@types/selenium-webdriver": "^4.0.9", - "@types/semver": "^5.5.0", + "@types/semver": "^7", "@types/set-value": "^2.0.0", "@types/sinon": "^7.0.13", "@types/source-map-support": "^0.5.3", diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index f0ac050b128ff..cd8b1f674fa40 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -94,7 +94,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _cli__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "run", function() { return _cli__WEBPACK_IMPORTED_MODULE_0__["run"]; }); -/* harmony import */ var _production__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(505); +/* harmony import */ var _production__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(506); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return _production__WEBPACK_IMPORTED_MODULE_1__["buildProductionProjects"]; }); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(248); @@ -106,7 +106,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(251); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transformDependencies", function() { return _utils_package_json__WEBPACK_IMPORTED_MODULE_4__["transformDependencies"]; }); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(504); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(505); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getProjectPaths", function() { return _config__WEBPACK_IMPORTED_MODULE_5__["getProjectPaths"]; }); /* @@ -150,7 +150,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5); /* harmony import */ var _kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(128); -/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(498); +/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(499); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(246); /* * Licensed to Elasticsearch B.V. under one or more contributor @@ -8897,9 +8897,9 @@ exports.ToolingLogCollectingWriter = ToolingLogCollectingWriter; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commands", function() { return commands; }); /* harmony import */ var _bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(129); -/* harmony import */ var _clean__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(366); -/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(397); -/* harmony import */ var _watch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(398); +/* harmony import */ var _clean__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(367); +/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(398); +/* harmony import */ var _watch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(399); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -8942,10 +8942,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(246); /* harmony import */ var _utils_parallelize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(247); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(248); -/* harmony import */ var _utils_project_checksums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(358); -/* harmony import */ var _utils_bootstrap_cache_file__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(363); -/* harmony import */ var _utils_yarn_lock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(360); -/* harmony import */ var _utils_validate_dependencies__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(364); +/* harmony import */ var _utils_project_checksums__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(359); +/* harmony import */ var _utils_bootstrap_cache_file__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(364); +/* harmony import */ var _utils_yarn_lock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(361); +/* harmony import */ var _utils_validate_dependencies__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(365); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -22997,7 +22997,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(249); /* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(246); /* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(251); -/* harmony import */ var _scripts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(312); +/* harmony import */ var _scripts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(313); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -30996,7 +30996,7 @@ const writeFileAtomic = __webpack_require__(302); const sortKeys = __webpack_require__(307); const makeDir = __webpack_require__(309); const pify = __webpack_require__(310); -const detectIndent = __webpack_require__(311); +const detectIndent = __webpack_require__(312); const init = (fn, filePath, data, options) => { if (!filePath) { @@ -31767,7 +31767,7 @@ module.exports = function (x) { const fs = __webpack_require__(134); const path = __webpack_require__(4); const pify = __webpack_require__(310); -const semver = __webpack_require__(276); +const semver = __webpack_require__(311); const defaults = { mode: 0o777 & (~process.umask()), @@ -31981,6 +31981,1495 @@ module.exports = (input, options) => { /***/ }), /* 311 */ +/***/ (function(module, exports) { + +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var R = 0 + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++ +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' +var NUMERICIDENTIFIERLOOSE = R++ +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++ +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++ +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')' + +var MAINVERSIONLOOSE = R++ +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++ +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +var PRERELEASEIDENTIFIERLOOSE = R++ +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++ +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' + +var PRERELEASELOOSE = R++ +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++ +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++ +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++ +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?' + +src[FULL] = '^' + FULLPLAIN + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?' + +var LOOSE = R++ +src[LOOSE] = '^' + LOOSEPLAIN + '$' + +var GTLT = R++ +src[GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++ +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +var XRANGEIDENTIFIER = R++ +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' + +var XRANGEPLAIN = R++ +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGEPLAINLOOSE = R++ +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGE = R++ +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' +var XRANGELOOSE = R++ +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++ +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++ +src[LONETILDE] = '(?:~>?)' + +var TILDETRIM = R++ +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +var TILDE = R++ +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' +var TILDELOOSE = R++ +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++ +src[LONECARET] = '(?:\\^)' + +var CARETTRIM = R++ +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +var CARET = R++ +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' +var CARETLOOSE = R++ +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++ +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' +var COMPARATOR = R++ +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++ +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++ +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$' + +var HYPHENRANGELOOSE = R++ +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +var STAR = R++ +src[STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[LOOSE] : re[FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compare(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.rcompare(a, b, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY) { + return true + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return thisComparators.every(function (thisComparator) { + return range.set.some(function (rangeComparators) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + }) + }) +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[TILDELOOSE] : re[TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[CARETLOOSE] : re[CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], '') +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version) { + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + var match = version.match(re[COERCE]) + + if (match == null) { + return null + } + + return parse(match[1] + + '.' + (match[2] || '0') + + '.' + (match[3] || '0')) +} + + +/***/ }), +/* 312 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -32109,7 +33598,7 @@ module.exports = str => { /***/ }), -/* 312 */ +/* 313 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -32117,7 +33606,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "installInDir", function() { return installInDir; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "runScriptInPackage", function() { return runScriptInPackage; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "runScriptInPackageStreaming", function() { return runScriptInPackageStreaming; }); -/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313); +/* harmony import */ var _child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(314); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -32180,7 +33669,7 @@ function runScriptInPackageStreaming({ } /***/ }), -/* 313 */ +/* 314 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -32191,9 +33680,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(stream__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(113); /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(chalk__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(314); +/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(315); /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(execa__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var strong_log_transformer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(350); +/* harmony import */ var strong_log_transformer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(351); /* harmony import */ var strong_log_transformer__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(strong_log_transformer__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(246); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } @@ -32281,23 +33770,23 @@ function spawnStreaming(command, args, opts, { } /***/ }), -/* 314 */ +/* 315 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const childProcess = __webpack_require__(315); -const crossSpawn = __webpack_require__(316); -const stripFinalNewline = __webpack_require__(329); -const npmRunPath = __webpack_require__(330); -const onetime = __webpack_require__(332); -const makeError = __webpack_require__(334); -const normalizeStdio = __webpack_require__(339); -const {spawnedKill, spawnedCancel, setupTimeout, setExitHandler} = __webpack_require__(340); -const {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = __webpack_require__(341); -const {mergePromise, getSpawnedPromise} = __webpack_require__(348); -const {joinCommand, parseCommand} = __webpack_require__(349); +const childProcess = __webpack_require__(316); +const crossSpawn = __webpack_require__(317); +const stripFinalNewline = __webpack_require__(330); +const npmRunPath = __webpack_require__(331); +const onetime = __webpack_require__(333); +const makeError = __webpack_require__(335); +const normalizeStdio = __webpack_require__(340); +const {spawnedKill, spawnedCancel, setupTimeout, setExitHandler} = __webpack_require__(341); +const {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = __webpack_require__(342); +const {mergePromise, getSpawnedPromise} = __webpack_require__(349); +const {joinCommand, parseCommand} = __webpack_require__(350); const DEFAULT_MAX_BUFFER = 1000 * 1000 * 100; @@ -32544,21 +34033,21 @@ module.exports.node = (scriptPath, args, options = {}) => { /***/ }), -/* 315 */ +/* 316 */ /***/ (function(module, exports) { module.exports = require("child_process"); /***/ }), -/* 316 */ +/* 317 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const cp = __webpack_require__(315); -const parse = __webpack_require__(317); -const enoent = __webpack_require__(328); +const cp = __webpack_require__(316); +const parse = __webpack_require__(318); +const enoent = __webpack_require__(329); function spawn(command, args, options) { // Parse the arguments @@ -32596,16 +34085,16 @@ module.exports._enoent = enoent; /***/ }), -/* 317 */ +/* 318 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const resolveCommand = __webpack_require__(318); -const escape = __webpack_require__(324); -const readShebang = __webpack_require__(325); +const resolveCommand = __webpack_require__(319); +const escape = __webpack_require__(325); +const readShebang = __webpack_require__(326); const isWin = process.platform === 'win32'; const isExecutableRegExp = /\.(?:com|exe)$/i; @@ -32694,15 +34183,15 @@ module.exports = parse; /***/ }), -/* 318 */ +/* 319 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const which = __webpack_require__(319); -const pathKey = __webpack_require__(323)(); +const which = __webpack_require__(320); +const pathKey = __webpack_require__(324)(); function resolveCommandAttempt(parsed, withoutPathExt) { const cwd = process.cwd(); @@ -32752,7 +34241,7 @@ module.exports = resolveCommand; /***/ }), -/* 319 */ +/* 320 */ /***/ (function(module, exports, __webpack_require__) { const isWindows = process.platform === 'win32' || @@ -32761,7 +34250,7 @@ const isWindows = process.platform === 'win32' || const path = __webpack_require__(4) const COLON = isWindows ? ';' : ':' -const isexe = __webpack_require__(320) +const isexe = __webpack_require__(321) const getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) @@ -32883,15 +34372,15 @@ which.sync = whichSync /***/ }), -/* 320 */ +/* 321 */ /***/ (function(module, exports, __webpack_require__) { var fs = __webpack_require__(134) var core if (process.platform === 'win32' || global.TESTING_WINDOWS) { - core = __webpack_require__(321) -} else { core = __webpack_require__(322) +} else { + core = __webpack_require__(323) } module.exports = isexe @@ -32946,7 +34435,7 @@ function sync (path, options) { /***/ }), -/* 321 */ +/* 322 */ /***/ (function(module, exports, __webpack_require__) { module.exports = isexe @@ -32994,7 +34483,7 @@ function sync (path, options) { /***/ }), -/* 322 */ +/* 323 */ /***/ (function(module, exports, __webpack_require__) { module.exports = isexe @@ -33041,7 +34530,7 @@ function checkMode (stat, options) { /***/ }), -/* 323 */ +/* 324 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33064,7 +34553,7 @@ module.exports.default = pathKey; /***/ }), -/* 324 */ +/* 325 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33116,14 +34605,14 @@ module.exports.argument = escapeArgument; /***/ }), -/* 325 */ +/* 326 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); -const shebangCommand = __webpack_require__(326); +const shebangCommand = __webpack_require__(327); function readShebang(command) { // Read the first 150 bytes from the file @@ -33146,12 +34635,12 @@ module.exports = readShebang; /***/ }), -/* 326 */ +/* 327 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const shebangRegex = __webpack_require__(327); +const shebangRegex = __webpack_require__(328); module.exports = (string = '') => { const match = string.match(shebangRegex); @@ -33172,7 +34661,7 @@ module.exports = (string = '') => { /***/ }), -/* 327 */ +/* 328 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33181,7 +34670,7 @@ module.exports = /^#!(.*)/; /***/ }), -/* 328 */ +/* 329 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33247,7 +34736,7 @@ module.exports = { /***/ }), -/* 329 */ +/* 330 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33270,13 +34759,13 @@ module.exports = input => { /***/ }), -/* 330 */ +/* 331 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const pathKey = __webpack_require__(331); +const pathKey = __webpack_require__(332); const npmRunPath = options => { options = { @@ -33324,7 +34813,7 @@ module.exports.env = options => { /***/ }), -/* 331 */ +/* 332 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33347,12 +34836,12 @@ module.exports.default = pathKey; /***/ }), -/* 332 */ +/* 333 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const mimicFn = __webpack_require__(333); +const mimicFn = __webpack_require__(334); const calledFunctions = new WeakMap(); @@ -33404,7 +34893,7 @@ module.exports.callCount = fn => { /***/ }), -/* 333 */ +/* 334 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33424,12 +34913,12 @@ module.exports.default = mimicFn; /***/ }), -/* 334 */ +/* 335 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const {signalsByName} = __webpack_require__(335); +const {signalsByName} = __webpack_require__(336); const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => { if (timedOut) { @@ -33517,14 +35006,14 @@ module.exports = makeError; /***/ }), -/* 335 */ +/* 336 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports,"__esModule",{value:true});exports.signalsByNumber=exports.signalsByName=void 0;var _os=__webpack_require__(121); -var _signals=__webpack_require__(336); -var _realtime=__webpack_require__(338); +var _signals=__webpack_require__(337); +var _realtime=__webpack_require__(339); @@ -33594,14 +35083,14 @@ const signalsByNumber=getSignalsByNumber();exports.signalsByNumber=signalsByNumb //# sourceMappingURL=main.js.map /***/ }), -/* 336 */ +/* 337 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports,"__esModule",{value:true});exports.getSignals=void 0;var _os=__webpack_require__(121); -var _core=__webpack_require__(337); -var _realtime=__webpack_require__(338); +var _core=__webpack_require__(338); +var _realtime=__webpack_require__(339); @@ -33635,7 +35124,7 @@ return{name,number,description,supported,action,forced,standard}; //# sourceMappingURL=signals.js.map /***/ }), -/* 337 */ +/* 338 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33914,7 +35403,7 @@ standard:"other"}];exports.SIGNALS=SIGNALS; //# sourceMappingURL=core.js.map /***/ }), -/* 338 */ +/* 339 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33939,7 +35428,7 @@ const SIGRTMAX=64;exports.SIGRTMAX=SIGRTMAX; //# sourceMappingURL=realtime.js.map /***/ }), -/* 339 */ +/* 340 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -33998,7 +35487,7 @@ module.exports.node = opts => { /***/ }), -/* 340 */ +/* 341 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34117,14 +35606,14 @@ module.exports = { /***/ }), -/* 341 */ +/* 342 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const isStream = __webpack_require__(342); -const getStream = __webpack_require__(343); -const mergeStream = __webpack_require__(347); +const isStream = __webpack_require__(343); +const getStream = __webpack_require__(344); +const mergeStream = __webpack_require__(348); // `input` option const handleInput = (spawned, input) => { @@ -34221,7 +35710,7 @@ module.exports = { /***/ }), -/* 342 */ +/* 343 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34257,13 +35746,13 @@ module.exports = isStream; /***/ }), -/* 343 */ +/* 344 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pump = __webpack_require__(344); -const bufferStream = __webpack_require__(346); +const pump = __webpack_require__(345); +const bufferStream = __webpack_require__(347); class MaxBufferError extends Error { constructor() { @@ -34322,11 +35811,11 @@ module.exports.MaxBufferError = MaxBufferError; /***/ }), -/* 344 */ +/* 345 */ /***/ (function(module, exports, __webpack_require__) { var once = __webpack_require__(162) -var eos = __webpack_require__(345) +var eos = __webpack_require__(346) var fs = __webpack_require__(134) // we only need fs to get the ReadStream and WriteStream prototypes var noop = function () {} @@ -34410,7 +35899,7 @@ module.exports = pump /***/ }), -/* 345 */ +/* 346 */ /***/ (function(module, exports, __webpack_require__) { var once = __webpack_require__(162); @@ -34510,7 +35999,7 @@ module.exports = eos; /***/ }), -/* 346 */ +/* 347 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34569,7 +36058,7 @@ module.exports = options => { /***/ }), -/* 347 */ +/* 348 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34617,7 +36106,7 @@ module.exports = function (/*streams...*/) { /***/ }), -/* 348 */ +/* 349 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34670,7 +36159,7 @@ module.exports = { /***/ }), -/* 349 */ +/* 350 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34715,7 +36204,7 @@ module.exports = { /***/ }), -/* 350 */ +/* 351 */ /***/ (function(module, exports, __webpack_require__) { // Copyright IBM Corp. 2014,2018. All Rights Reserved. @@ -34723,12 +36212,12 @@ module.exports = { // This file is licensed under the Apache License 2.0. // License text available at https://opensource.org/licenses/Apache-2.0 -module.exports = __webpack_require__(351); -module.exports.cli = __webpack_require__(355); +module.exports = __webpack_require__(352); +module.exports.cli = __webpack_require__(356); /***/ }), -/* 351 */ +/* 352 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -34743,9 +36232,9 @@ var stream = __webpack_require__(138); var util = __webpack_require__(112); var fs = __webpack_require__(134); -var through = __webpack_require__(352); -var duplexer = __webpack_require__(353); -var StringDecoder = __webpack_require__(354).StringDecoder; +var through = __webpack_require__(353); +var duplexer = __webpack_require__(354); +var StringDecoder = __webpack_require__(355).StringDecoder; module.exports = Logger; @@ -34934,7 +36423,7 @@ function lineMerger(host) { /***/ }), -/* 352 */ +/* 353 */ /***/ (function(module, exports, __webpack_require__) { var Stream = __webpack_require__(138) @@ -35048,7 +36537,7 @@ function through (write, end, opts) { /***/ }), -/* 353 */ +/* 354 */ /***/ (function(module, exports, __webpack_require__) { var Stream = __webpack_require__(138) @@ -35141,13 +36630,13 @@ function duplex(writer, reader) { /***/ }), -/* 354 */ +/* 355 */ /***/ (function(module, exports) { module.exports = require("string_decoder"); /***/ }), -/* 355 */ +/* 356 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -35158,11 +36647,11 @@ module.exports = require("string_decoder"); -var minimist = __webpack_require__(356); +var minimist = __webpack_require__(357); var path = __webpack_require__(4); -var Logger = __webpack_require__(351); -var pkg = __webpack_require__(357); +var Logger = __webpack_require__(352); +var pkg = __webpack_require__(358); module.exports = cli; @@ -35216,7 +36705,7 @@ function usage($0, p) { /***/ }), -/* 356 */ +/* 357 */ /***/ (function(module, exports) { module.exports = function (args, opts) { @@ -35467,13 +36956,13 @@ function isNumber (x) { /***/ }), -/* 357 */ +/* 358 */ /***/ (function(module) { module.exports = JSON.parse("{\"name\":\"strong-log-transformer\",\"version\":\"2.1.0\",\"description\":\"Stream transformer that prefixes lines with timestamps and other things.\",\"author\":\"Ryan Graham \",\"license\":\"Apache-2.0\",\"repository\":{\"type\":\"git\",\"url\":\"git://github.com/strongloop/strong-log-transformer\"},\"keywords\":[\"logging\",\"streams\"],\"bugs\":{\"url\":\"https://github.com/strongloop/strong-log-transformer/issues\"},\"homepage\":\"https://github.com/strongloop/strong-log-transformer\",\"directories\":{\"test\":\"test\"},\"bin\":{\"sl-log-transformer\":\"bin/sl-log-transformer.js\"},\"main\":\"index.js\",\"scripts\":{\"test\":\"tap --100 test/test-*\"},\"dependencies\":{\"duplexer\":\"^0.1.1\",\"minimist\":\"^1.2.0\",\"through\":\"^2.3.4\"},\"devDependencies\":{\"tap\":\"^12.0.1\"},\"engines\":{\"node\":\">=4\"}}"); /***/ }), -/* 358 */ +/* 359 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -35481,13 +36970,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllChecksums", function() { return getAllChecksums; }); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(134); /* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(359); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(360); /* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(112); /* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(314); +/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(315); /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(execa__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(360); +/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(361); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -35686,20 +37175,20 @@ async function getAllChecksums(kbn, log, yarnLock) { } /***/ }), -/* 359 */ +/* 360 */ /***/ (function(module, exports) { module.exports = require("crypto"); /***/ }), -/* 360 */ +/* 361 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "readYarnLock", function() { return readYarnLock; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveDepsForProject", function() { return resolveDepsForProject; }); -/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(361); +/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(362); /* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(131); /* @@ -35812,7 +37301,7 @@ function resolveDepsForProject({ } /***/ }), -/* 361 */ +/* 362 */ /***/ (function(module, exports, __webpack_require__) { module.exports = @@ -37371,7 +38860,7 @@ module.exports = invariant; /* 9 */ /***/ (function(module, exports) { -module.exports = __webpack_require__(359); +module.exports = __webpack_require__(360); /***/ }), /* 10 */, @@ -39695,7 +41184,7 @@ function onceStrict (fn) { /* 63 */ /***/ (function(module, exports) { -module.exports = __webpack_require__(362); +module.exports = __webpack_require__(363); /***/ }), /* 64 */, @@ -46090,13 +47579,13 @@ module.exports = process && support(supportLevel); /******/ ]); /***/ }), -/* 362 */ +/* 363 */ /***/ (function(module, exports) { module.exports = require("buffer"); /***/ }), -/* 363 */ +/* 364 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -46193,13 +47682,13 @@ class BootstrapCacheFile { } /***/ }), -/* 364 */ +/* 365 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateDependencies", function() { return validateDependencies; }); -/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(361); +/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(362); /* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_1__); @@ -46210,7 +47699,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(131); /* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(246); /* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(251); -/* harmony import */ var _projects_tree__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(365); +/* harmony import */ var _projects_tree__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(366); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -46402,7 +47891,7 @@ function getDevOnlyProductionDepsTree(kbn, projectName) { } /***/ }), -/* 365 */ +/* 366 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -46555,7 +48044,7 @@ function addProjectToTree(tree, pathParts, project) { } /***/ }), -/* 366 */ +/* 367 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -46563,7 +48052,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CleanCommand", function() { return CleanCommand; }); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(143); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(367); +/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(368); /* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(ora__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); @@ -46663,20 +48152,20 @@ const CleanCommand = { }; /***/ }), -/* 367 */ +/* 368 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readline = __webpack_require__(368); -const chalk = __webpack_require__(369); -const cliCursor = __webpack_require__(376); -const cliSpinners = __webpack_require__(378); -const logSymbols = __webpack_require__(380); -const stripAnsi = __webpack_require__(389); -const wcwidth = __webpack_require__(391); -const isInteractive = __webpack_require__(395); -const MuteStream = __webpack_require__(396); +const readline = __webpack_require__(369); +const chalk = __webpack_require__(370); +const cliCursor = __webpack_require__(377); +const cliSpinners = __webpack_require__(379); +const logSymbols = __webpack_require__(381); +const stripAnsi = __webpack_require__(390); +const wcwidth = __webpack_require__(392); +const isInteractive = __webpack_require__(396); +const MuteStream = __webpack_require__(397); const TEXT = Symbol('text'); const PREFIX_TEXT = Symbol('prefixText'); @@ -47029,23 +48518,23 @@ module.exports.promise = (action, options) => { /***/ }), -/* 368 */ +/* 369 */ /***/ (function(module, exports) { module.exports = require("readline"); /***/ }), -/* 369 */ +/* 370 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const ansiStyles = __webpack_require__(370); +const ansiStyles = __webpack_require__(371); const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(120); const { stringReplaceAll, stringEncaseCRLFWithFirstIndex -} = __webpack_require__(374); +} = __webpack_require__(375); // `supportsColor.level` → `ansiStyles.color[name]` mapping const levelMapping = [ @@ -47246,7 +48735,7 @@ const chalkTag = (chalk, ...strings) => { } if (template === undefined) { - template = __webpack_require__(375); + template = __webpack_require__(376); } return template(chalk, parts.join('')); @@ -47275,7 +48764,7 @@ module.exports = chalk; /***/ }), -/* 370 */ +/* 371 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -47321,7 +48810,7 @@ const setLazyProperty = (object, property, get) => { let colorConvert; const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { if (colorConvert === undefined) { - colorConvert = __webpack_require__(371); + colorConvert = __webpack_require__(372); } const offset = isBackground ? 10 : 0; @@ -47446,11 +48935,11 @@ Object.defineProperty(module, 'exports', { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(115)(module))) /***/ }), -/* 371 */ +/* 372 */ /***/ (function(module, exports, __webpack_require__) { -const conversions = __webpack_require__(372); -const route = __webpack_require__(373); +const conversions = __webpack_require__(373); +const route = __webpack_require__(374); const convert = {}; @@ -47533,7 +49022,7 @@ module.exports = convert; /***/ }), -/* 372 */ +/* 373 */ /***/ (function(module, exports, __webpack_require__) { /* MIT license */ @@ -48378,10 +49867,10 @@ convert.rgb.gray = function (rgb) { /***/ }), -/* 373 */ +/* 374 */ /***/ (function(module, exports, __webpack_require__) { -const conversions = __webpack_require__(372); +const conversions = __webpack_require__(373); /* This function routes a model to all other models. @@ -48481,7 +49970,7 @@ module.exports = function (fromModel) { /***/ }), -/* 374 */ +/* 375 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -48527,7 +50016,7 @@ module.exports = { /***/ }), -/* 375 */ +/* 376 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -48668,12 +50157,12 @@ module.exports = (chalk, temporary) => { /***/ }), -/* 376 */ +/* 377 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const restoreCursor = __webpack_require__(377); +const restoreCursor = __webpack_require__(378); let isHidden = false; @@ -48710,12 +50199,12 @@ exports.toggle = (force, writableStream) => { /***/ }), -/* 377 */ +/* 378 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const onetime = __webpack_require__(332); +const onetime = __webpack_require__(333); const signalExit = __webpack_require__(304); module.exports = onetime(() => { @@ -48726,13 +50215,13 @@ module.exports = onetime(() => { /***/ }), -/* 378 */ +/* 379 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const spinners = Object.assign({}, __webpack_require__(379)); +const spinners = Object.assign({}, __webpack_require__(380)); const spinnersList = Object.keys(spinners); @@ -48750,18 +50239,18 @@ module.exports.default = spinners; /***/ }), -/* 379 */ +/* 380 */ /***/ (function(module) { module.exports = JSON.parse("{\"dots\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠹\",\"⠸\",\"⠼\",\"⠴\",\"⠦\",\"⠧\",\"⠇\",\"⠏\"]},\"dots2\":{\"interval\":80,\"frames\":[\"⣾\",\"⣽\",\"⣻\",\"⢿\",\"⡿\",\"⣟\",\"⣯\",\"⣷\"]},\"dots3\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠚\",\"⠞\",\"⠖\",\"⠦\",\"⠴\",\"⠲\",\"⠳\",\"⠓\"]},\"dots4\":{\"interval\":80,\"frames\":[\"⠄\",\"⠆\",\"⠇\",\"⠋\",\"⠙\",\"⠸\",\"⠰\",\"⠠\",\"⠰\",\"⠸\",\"⠙\",\"⠋\",\"⠇\",\"⠆\"]},\"dots5\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\"]},\"dots6\":{\"interval\":80,\"frames\":[\"⠁\",\"⠉\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠤\",\"⠄\",\"⠄\",\"⠤\",\"⠴\",\"⠲\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠚\",\"⠙\",\"⠉\",\"⠁\"]},\"dots7\":{\"interval\":80,\"frames\":[\"⠈\",\"⠉\",\"⠋\",\"⠓\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠖\",\"⠦\",\"⠤\",\"⠠\",\"⠠\",\"⠤\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\",\"⠉\",\"⠈\"]},\"dots8\":{\"interval\":80,\"frames\":[\"⠁\",\"⠁\",\"⠉\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠤\",\"⠄\",\"⠄\",\"⠤\",\"⠠\",\"⠠\",\"⠤\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\",\"⠉\",\"⠈\",\"⠈\"]},\"dots9\":{\"interval\":80,\"frames\":[\"⢹\",\"⢺\",\"⢼\",\"⣸\",\"⣇\",\"⡧\",\"⡗\",\"⡏\"]},\"dots10\":{\"interval\":80,\"frames\":[\"⢄\",\"⢂\",\"⢁\",\"⡁\",\"⡈\",\"⡐\",\"⡠\"]},\"dots11\":{\"interval\":100,\"frames\":[\"⠁\",\"⠂\",\"⠄\",\"⡀\",\"⢀\",\"⠠\",\"⠐\",\"⠈\"]},\"dots12\":{\"interval\":80,\"frames\":[\"⢀⠀\",\"⡀⠀\",\"⠄⠀\",\"⢂⠀\",\"⡂⠀\",\"⠅⠀\",\"⢃⠀\",\"⡃⠀\",\"⠍⠀\",\"⢋⠀\",\"⡋⠀\",\"⠍⠁\",\"⢋⠁\",\"⡋⠁\",\"⠍⠉\",\"⠋⠉\",\"⠋⠉\",\"⠉⠙\",\"⠉⠙\",\"⠉⠩\",\"⠈⢙\",\"⠈⡙\",\"⢈⠩\",\"⡀⢙\",\"⠄⡙\",\"⢂⠩\",\"⡂⢘\",\"⠅⡘\",\"⢃⠨\",\"⡃⢐\",\"⠍⡐\",\"⢋⠠\",\"⡋⢀\",\"⠍⡁\",\"⢋⠁\",\"⡋⠁\",\"⠍⠉\",\"⠋⠉\",\"⠋⠉\",\"⠉⠙\",\"⠉⠙\",\"⠉⠩\",\"⠈⢙\",\"⠈⡙\",\"⠈⠩\",\"⠀⢙\",\"⠀⡙\",\"⠀⠩\",\"⠀⢘\",\"⠀⡘\",\"⠀⠨\",\"⠀⢐\",\"⠀⡐\",\"⠀⠠\",\"⠀⢀\",\"⠀⡀\"]},\"dots8Bit\":{\"interval\":80,\"frames\":[\"⠀\",\"⠁\",\"⠂\",\"⠃\",\"⠄\",\"⠅\",\"⠆\",\"⠇\",\"⡀\",\"⡁\",\"⡂\",\"⡃\",\"⡄\",\"⡅\",\"⡆\",\"⡇\",\"⠈\",\"⠉\",\"⠊\",\"⠋\",\"⠌\",\"⠍\",\"⠎\",\"⠏\",\"⡈\",\"⡉\",\"⡊\",\"⡋\",\"⡌\",\"⡍\",\"⡎\",\"⡏\",\"⠐\",\"⠑\",\"⠒\",\"⠓\",\"⠔\",\"⠕\",\"⠖\",\"⠗\",\"⡐\",\"⡑\",\"⡒\",\"⡓\",\"⡔\",\"⡕\",\"⡖\",\"⡗\",\"⠘\",\"⠙\",\"⠚\",\"⠛\",\"⠜\",\"⠝\",\"⠞\",\"⠟\",\"⡘\",\"⡙\",\"⡚\",\"⡛\",\"⡜\",\"⡝\",\"⡞\",\"⡟\",\"⠠\",\"⠡\",\"⠢\",\"⠣\",\"⠤\",\"⠥\",\"⠦\",\"⠧\",\"⡠\",\"⡡\",\"⡢\",\"⡣\",\"⡤\",\"⡥\",\"⡦\",\"⡧\",\"⠨\",\"⠩\",\"⠪\",\"⠫\",\"⠬\",\"⠭\",\"⠮\",\"⠯\",\"⡨\",\"⡩\",\"⡪\",\"⡫\",\"⡬\",\"⡭\",\"⡮\",\"⡯\",\"⠰\",\"⠱\",\"⠲\",\"⠳\",\"⠴\",\"⠵\",\"⠶\",\"⠷\",\"⡰\",\"⡱\",\"⡲\",\"⡳\",\"⡴\",\"⡵\",\"⡶\",\"⡷\",\"⠸\",\"⠹\",\"⠺\",\"⠻\",\"⠼\",\"⠽\",\"⠾\",\"⠿\",\"⡸\",\"⡹\",\"⡺\",\"⡻\",\"⡼\",\"⡽\",\"⡾\",\"⡿\",\"⢀\",\"⢁\",\"⢂\",\"⢃\",\"⢄\",\"⢅\",\"⢆\",\"⢇\",\"⣀\",\"⣁\",\"⣂\",\"⣃\",\"⣄\",\"⣅\",\"⣆\",\"⣇\",\"⢈\",\"⢉\",\"⢊\",\"⢋\",\"⢌\",\"⢍\",\"⢎\",\"⢏\",\"⣈\",\"⣉\",\"⣊\",\"⣋\",\"⣌\",\"⣍\",\"⣎\",\"⣏\",\"⢐\",\"⢑\",\"⢒\",\"⢓\",\"⢔\",\"⢕\",\"⢖\",\"⢗\",\"⣐\",\"⣑\",\"⣒\",\"⣓\",\"⣔\",\"⣕\",\"⣖\",\"⣗\",\"⢘\",\"⢙\",\"⢚\",\"⢛\",\"⢜\",\"⢝\",\"⢞\",\"⢟\",\"⣘\",\"⣙\",\"⣚\",\"⣛\",\"⣜\",\"⣝\",\"⣞\",\"⣟\",\"⢠\",\"⢡\",\"⢢\",\"⢣\",\"⢤\",\"⢥\",\"⢦\",\"⢧\",\"⣠\",\"⣡\",\"⣢\",\"⣣\",\"⣤\",\"⣥\",\"⣦\",\"⣧\",\"⢨\",\"⢩\",\"⢪\",\"⢫\",\"⢬\",\"⢭\",\"⢮\",\"⢯\",\"⣨\",\"⣩\",\"⣪\",\"⣫\",\"⣬\",\"⣭\",\"⣮\",\"⣯\",\"⢰\",\"⢱\",\"⢲\",\"⢳\",\"⢴\",\"⢵\",\"⢶\",\"⢷\",\"⣰\",\"⣱\",\"⣲\",\"⣳\",\"⣴\",\"⣵\",\"⣶\",\"⣷\",\"⢸\",\"⢹\",\"⢺\",\"⢻\",\"⢼\",\"⢽\",\"⢾\",\"⢿\",\"⣸\",\"⣹\",\"⣺\",\"⣻\",\"⣼\",\"⣽\",\"⣾\",\"⣿\"]},\"line\":{\"interval\":130,\"frames\":[\"-\",\"\\\\\",\"|\",\"/\"]},\"line2\":{\"interval\":100,\"frames\":[\"⠂\",\"-\",\"–\",\"—\",\"–\",\"-\"]},\"pipe\":{\"interval\":100,\"frames\":[\"┤\",\"┘\",\"┴\",\"└\",\"├\",\"┌\",\"┬\",\"┐\"]},\"simpleDots\":{\"interval\":400,\"frames\":[\". \",\".. \",\"...\",\" \"]},\"simpleDotsScrolling\":{\"interval\":200,\"frames\":[\". \",\".. \",\"...\",\" ..\",\" .\",\" \"]},\"star\":{\"interval\":70,\"frames\":[\"✶\",\"✸\",\"✹\",\"✺\",\"✹\",\"✷\"]},\"star2\":{\"interval\":80,\"frames\":[\"+\",\"x\",\"*\"]},\"flip\":{\"interval\":70,\"frames\":[\"_\",\"_\",\"_\",\"-\",\"`\",\"`\",\"'\",\"´\",\"-\",\"_\",\"_\",\"_\"]},\"hamburger\":{\"interval\":100,\"frames\":[\"☱\",\"☲\",\"☴\"]},\"growVertical\":{\"interval\":120,\"frames\":[\"▁\",\"▃\",\"▄\",\"▅\",\"▆\",\"▇\",\"▆\",\"▅\",\"▄\",\"▃\"]},\"growHorizontal\":{\"interval\":120,\"frames\":[\"▏\",\"▎\",\"▍\",\"▌\",\"▋\",\"▊\",\"▉\",\"▊\",\"▋\",\"▌\",\"▍\",\"▎\"]},\"balloon\":{\"interval\":140,\"frames\":[\" \",\".\",\"o\",\"O\",\"@\",\"*\",\" \"]},\"balloon2\":{\"interval\":120,\"frames\":[\".\",\"o\",\"O\",\"°\",\"O\",\"o\",\".\"]},\"noise\":{\"interval\":100,\"frames\":[\"▓\",\"▒\",\"░\"]},\"bounce\":{\"interval\":120,\"frames\":[\"⠁\",\"⠂\",\"⠄\",\"⠂\"]},\"boxBounce\":{\"interval\":120,\"frames\":[\"▖\",\"▘\",\"▝\",\"▗\"]},\"boxBounce2\":{\"interval\":100,\"frames\":[\"▌\",\"▀\",\"▐\",\"▄\"]},\"triangle\":{\"interval\":50,\"frames\":[\"◢\",\"◣\",\"◤\",\"◥\"]},\"arc\":{\"interval\":100,\"frames\":[\"◜\",\"◠\",\"◝\",\"◞\",\"◡\",\"◟\"]},\"circle\":{\"interval\":120,\"frames\":[\"◡\",\"⊙\",\"◠\"]},\"squareCorners\":{\"interval\":180,\"frames\":[\"◰\",\"◳\",\"◲\",\"◱\"]},\"circleQuarters\":{\"interval\":120,\"frames\":[\"◴\",\"◷\",\"◶\",\"◵\"]},\"circleHalves\":{\"interval\":50,\"frames\":[\"◐\",\"◓\",\"◑\",\"◒\"]},\"squish\":{\"interval\":100,\"frames\":[\"╫\",\"╪\"]},\"toggle\":{\"interval\":250,\"frames\":[\"⊶\",\"⊷\"]},\"toggle2\":{\"interval\":80,\"frames\":[\"▫\",\"▪\"]},\"toggle3\":{\"interval\":120,\"frames\":[\"□\",\"■\"]},\"toggle4\":{\"interval\":100,\"frames\":[\"■\",\"□\",\"▪\",\"▫\"]},\"toggle5\":{\"interval\":100,\"frames\":[\"▮\",\"▯\"]},\"toggle6\":{\"interval\":300,\"frames\":[\"ဝ\",\"၀\"]},\"toggle7\":{\"interval\":80,\"frames\":[\"⦾\",\"⦿\"]},\"toggle8\":{\"interval\":100,\"frames\":[\"◍\",\"◌\"]},\"toggle9\":{\"interval\":100,\"frames\":[\"◉\",\"◎\"]},\"toggle10\":{\"interval\":100,\"frames\":[\"㊂\",\"㊀\",\"㊁\"]},\"toggle11\":{\"interval\":50,\"frames\":[\"⧇\",\"⧆\"]},\"toggle12\":{\"interval\":120,\"frames\":[\"☗\",\"☖\"]},\"toggle13\":{\"interval\":80,\"frames\":[\"=\",\"*\",\"-\"]},\"arrow\":{\"interval\":100,\"frames\":[\"←\",\"↖\",\"↑\",\"↗\",\"→\",\"↘\",\"↓\",\"↙\"]},\"arrow2\":{\"interval\":80,\"frames\":[\"⬆️ \",\"↗️ \",\"➡️ \",\"↘️ \",\"⬇️ \",\"↙️ \",\"⬅️ \",\"↖️ \"]},\"arrow3\":{\"interval\":120,\"frames\":[\"▹▹▹▹▹\",\"▸▹▹▹▹\",\"▹▸▹▹▹\",\"▹▹▸▹▹\",\"▹▹▹▸▹\",\"▹▹▹▹▸\"]},\"bouncingBar\":{\"interval\":80,\"frames\":[\"[ ]\",\"[= ]\",\"[== ]\",\"[=== ]\",\"[ ===]\",\"[ ==]\",\"[ =]\",\"[ ]\",\"[ =]\",\"[ ==]\",\"[ ===]\",\"[====]\",\"[=== ]\",\"[== ]\",\"[= ]\"]},\"bouncingBall\":{\"interval\":80,\"frames\":[\"( ● )\",\"( ● )\",\"( ● )\",\"( ● )\",\"( ●)\",\"( ● )\",\"( ● )\",\"( ● )\",\"( ● )\",\"(● )\"]},\"smiley\":{\"interval\":200,\"frames\":[\"😄 \",\"😝 \"]},\"monkey\":{\"interval\":300,\"frames\":[\"🙈 \",\"🙈 \",\"🙉 \",\"🙊 \"]},\"hearts\":{\"interval\":100,\"frames\":[\"💛 \",\"💙 \",\"💜 \",\"💚 \",\"❤️ \"]},\"clock\":{\"interval\":100,\"frames\":[\"🕛 \",\"🕐 \",\"🕑 \",\"🕒 \",\"🕓 \",\"🕔 \",\"🕕 \",\"🕖 \",\"🕗 \",\"🕘 \",\"🕙 \",\"🕚 \"]},\"earth\":{\"interval\":180,\"frames\":[\"🌍 \",\"🌎 \",\"🌏 \"]},\"material\":{\"interval\":17,\"frames\":[\"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"███████▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"██████████▁▁▁▁▁▁▁▁▁▁\",\"███████████▁▁▁▁▁▁▁▁▁\",\"█████████████▁▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁▁██████████████▁▁▁▁\",\"▁▁▁██████████████▁▁▁\",\"▁▁▁▁█████████████▁▁▁\",\"▁▁▁▁██████████████▁▁\",\"▁▁▁▁██████████████▁▁\",\"▁▁▁▁▁██████████████▁\",\"▁▁▁▁▁██████████████▁\",\"▁▁▁▁▁██████████████▁\",\"▁▁▁▁▁▁██████████████\",\"▁▁▁▁▁▁██████████████\",\"▁▁▁▁▁▁▁█████████████\",\"▁▁▁▁▁▁▁█████████████\",\"▁▁▁▁▁▁▁▁████████████\",\"▁▁▁▁▁▁▁▁████████████\",\"▁▁▁▁▁▁▁▁▁███████████\",\"▁▁▁▁▁▁▁▁▁███████████\",\"▁▁▁▁▁▁▁▁▁▁██████████\",\"▁▁▁▁▁▁▁▁▁▁██████████\",\"▁▁▁▁▁▁▁▁▁▁▁▁████████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"████████▁▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"█████████▁▁▁▁▁▁▁▁▁▁▁\",\"███████████▁▁▁▁▁▁▁▁▁\",\"████████████▁▁▁▁▁▁▁▁\",\"████████████▁▁▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"██████████████▁▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁██████████████▁▁▁▁▁\",\"▁▁▁█████████████▁▁▁▁\",\"▁▁▁▁▁████████████▁▁▁\",\"▁▁▁▁▁████████████▁▁▁\",\"▁▁▁▁▁▁███████████▁▁▁\",\"▁▁▁▁▁▁▁▁█████████▁▁▁\",\"▁▁▁▁▁▁▁▁█████████▁▁▁\",\"▁▁▁▁▁▁▁▁▁█████████▁▁\",\"▁▁▁▁▁▁▁▁▁█████████▁▁\",\"▁▁▁▁▁▁▁▁▁▁█████████▁\",\"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\"▁▁▁▁▁▁▁▁▁▁▁████████▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁███████▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁███████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\",\"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁\"]},\"moon\":{\"interval\":80,\"frames\":[\"🌑 \",\"🌒 \",\"🌓 \",\"🌔 \",\"🌕 \",\"🌖 \",\"🌗 \",\"🌘 \"]},\"runner\":{\"interval\":140,\"frames\":[\"🚶 \",\"🏃 \"]},\"pong\":{\"interval\":80,\"frames\":[\"▐⠂ ▌\",\"▐⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂▌\",\"▐ ⠠▌\",\"▐ ⡀▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐⠠ ▌\"]},\"shark\":{\"interval\":120,\"frames\":[\"▐|\\\\____________▌\",\"▐_|\\\\___________▌\",\"▐__|\\\\__________▌\",\"▐___|\\\\_________▌\",\"▐____|\\\\________▌\",\"▐_____|\\\\_______▌\",\"▐______|\\\\______▌\",\"▐_______|\\\\_____▌\",\"▐________|\\\\____▌\",\"▐_________|\\\\___▌\",\"▐__________|\\\\__▌\",\"▐___________|\\\\_▌\",\"▐____________|\\\\▌\",\"▐____________/|▌\",\"▐___________/|_▌\",\"▐__________/|__▌\",\"▐_________/|___▌\",\"▐________/|____▌\",\"▐_______/|_____▌\",\"▐______/|______▌\",\"▐_____/|_______▌\",\"▐____/|________▌\",\"▐___/|_________▌\",\"▐__/|__________▌\",\"▐_/|___________▌\",\"▐/|____________▌\"]},\"dqpb\":{\"interval\":100,\"frames\":[\"d\",\"q\",\"p\",\"b\"]},\"weather\":{\"interval\":100,\"frames\":[\"☀️ \",\"☀️ \",\"☀️ \",\"🌤 \",\"⛅️ \",\"🌥 \",\"☁️ \",\"🌧 \",\"🌨 \",\"🌧 \",\"🌨 \",\"🌧 \",\"🌨 \",\"⛈ \",\"🌨 \",\"🌧 \",\"🌨 \",\"☁️ \",\"🌥 \",\"⛅️ \",\"🌤 \",\"☀️ \",\"☀️ \"]},\"christmas\":{\"interval\":400,\"frames\":[\"🌲\",\"🎄\"]},\"grenade\":{\"interval\":80,\"frames\":[\"، \",\"′ \",\" ´ \",\" ‾ \",\" ⸌\",\" ⸊\",\" |\",\" ⁎\",\" ⁕\",\" ෴ \",\" ⁓\",\" \",\" \",\" \"]},\"point\":{\"interval\":125,\"frames\":[\"∙∙∙\",\"●∙∙\",\"∙●∙\",\"∙∙●\",\"∙∙∙\"]},\"layer\":{\"interval\":150,\"frames\":[\"-\",\"=\",\"≡\"]},\"betaWave\":{\"interval\":80,\"frames\":[\"ρββββββ\",\"βρβββββ\",\"ββρββββ\",\"βββρβββ\",\"ββββρββ\",\"βββββρβ\",\"ββββββρ\"]}}"); /***/ }), -/* 380 */ +/* 381 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const chalk = __webpack_require__(381); +const chalk = __webpack_require__(382); const isSupported = process.platform !== 'win32' || process.env.CI || process.env.TERM === 'xterm-256color'; @@ -48783,16 +50272,16 @@ module.exports = isSupported ? main : fallbacks; /***/ }), -/* 381 */ +/* 382 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const escapeStringRegexp = __webpack_require__(265); -const ansiStyles = __webpack_require__(382); -const stdoutColor = __webpack_require__(387).stdout; +const ansiStyles = __webpack_require__(383); +const stdoutColor = __webpack_require__(388).stdout; -const template = __webpack_require__(388); +const template = __webpack_require__(389); const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); @@ -49018,12 +50507,12 @@ module.exports.default = module.exports; // For TypeScript /***/ }), -/* 382 */ +/* 383 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /* WEBPACK VAR INJECTION */(function(module) { -const colorConvert = __webpack_require__(383); +const colorConvert = __webpack_require__(384); const wrapAnsi16 = (fn, offset) => function () { const code = fn.apply(colorConvert, arguments); @@ -49191,11 +50680,11 @@ Object.defineProperty(module, 'exports', { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(115)(module))) /***/ }), -/* 383 */ +/* 384 */ /***/ (function(module, exports, __webpack_require__) { -var conversions = __webpack_require__(384); -var route = __webpack_require__(386); +var conversions = __webpack_require__(385); +var route = __webpack_require__(387); var convert = {}; @@ -49275,11 +50764,11 @@ module.exports = convert; /***/ }), -/* 384 */ +/* 385 */ /***/ (function(module, exports, __webpack_require__) { /* MIT license */ -var cssKeywords = __webpack_require__(385); +var cssKeywords = __webpack_require__(386); // NOTE: conversions should only return primitive values (i.e. arrays, or // values that give correct `typeof` results). @@ -50149,7 +51638,7 @@ convert.rgb.gray = function (rgb) { /***/ }), -/* 385 */ +/* 386 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50308,10 +51797,10 @@ module.exports = { /***/ }), -/* 386 */ +/* 387 */ /***/ (function(module, exports, __webpack_require__) { -var conversions = __webpack_require__(384); +var conversions = __webpack_require__(385); /* this function routes a model to all other models. @@ -50411,7 +51900,7 @@ module.exports = function (fromModel) { /***/ }), -/* 387 */ +/* 388 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50549,7 +52038,7 @@ module.exports = { /***/ }), -/* 388 */ +/* 389 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50684,18 +52173,18 @@ module.exports = (chalk, tmp) => { /***/ }), -/* 389 */ +/* 390 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const ansiRegex = __webpack_require__(390); +const ansiRegex = __webpack_require__(391); module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; /***/ }), -/* 390 */ +/* 391 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50712,14 +52201,14 @@ module.exports = ({onlyFirst = false} = {}) => { /***/ }), -/* 391 */ +/* 392 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var defaults = __webpack_require__(392) -var combining = __webpack_require__(394) +var defaults = __webpack_require__(393) +var combining = __webpack_require__(395) var DEFAULTS = { nul: 0, @@ -50818,10 +52307,10 @@ function bisearch(ucs) { /***/ }), -/* 392 */ +/* 393 */ /***/ (function(module, exports, __webpack_require__) { -var clone = __webpack_require__(393); +var clone = __webpack_require__(394); module.exports = function(options, defaults) { options = options || {}; @@ -50836,7 +52325,7 @@ module.exports = function(options, defaults) { }; /***/ }), -/* 393 */ +/* 394 */ /***/ (function(module, exports, __webpack_require__) { var clone = (function() { @@ -51008,7 +52497,7 @@ if ( true && module.exports) { /***/ }), -/* 394 */ +/* 395 */ /***/ (function(module, exports) { module.exports = [ @@ -51064,7 +52553,7 @@ module.exports = [ /***/ }), -/* 395 */ +/* 396 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -51080,7 +52569,7 @@ module.exports = ({stream = process.stdout} = {}) => { /***/ }), -/* 396 */ +/* 397 */ /***/ (function(module, exports, __webpack_require__) { var Stream = __webpack_require__(138) @@ -51231,7 +52720,7 @@ MuteStream.prototype.close = proxy('close') /***/ }), -/* 397 */ +/* 398 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51292,7 +52781,7 @@ const RunCommand = { }; /***/ }), -/* 398 */ +/* 399 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51302,7 +52791,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(246); /* harmony import */ var _utils_parallelize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(247); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(248); -/* harmony import */ var _utils_watch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(399); +/* harmony import */ var _utils_watch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(400); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -51388,14 +52877,14 @@ const WatchCommand = { }; /***/ }), -/* 399 */ +/* 400 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "waitUntilWatchIsReady", function() { return waitUntilWatchIsReady; }); /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(400); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(401); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -51462,141 +52951,141 @@ function waitUntilWatchIsReady(stream, opts = {}) { } /***/ }), -/* 400 */ +/* 401 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(401); +/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(402); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"]; }); -/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(402); +/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(403); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"]; }); -/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(403); +/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(404); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"]; }); -/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(404); +/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(405); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"]; }); -/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(405); +/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(406); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"]; }); -/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(406); +/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(407); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"]; }); -/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(407); +/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(408); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"]; }); -/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(408); +/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(409); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"]; }); -/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(409); +/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(410); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"]; }); -/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(410); +/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(411); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"]; }); -/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(411); +/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(412); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"]; }); /* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(80); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"]; }); -/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(412); +/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(413); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"]; }); -/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(413); +/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(414); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"]; }); -/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(414); +/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(415); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "count", function() { return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"]; }); -/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(415); +/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(416); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"]; }); -/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(416); +/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(417); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"]; }); -/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(417); +/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(418); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"]; }); -/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(418); +/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(419); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"]; }); -/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(420); +/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(421); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"]; }); -/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(421); +/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(422); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"]; }); -/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(422); +/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(423); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"]; }); -/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(423); +/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(424); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"]; }); -/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(424); +/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(425); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"]; }); -/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(425); +/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(426); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"]; }); -/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(428); +/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(429); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"]; }); -/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(429); +/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(430); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "every", function() { return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"]; }); -/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(430); +/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(431); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"]; }); -/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(431); +/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(432); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"]; }); -/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(432); +/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(433); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"]; }); /* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(105); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"]; }); -/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(433); +/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(434); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"]; }); -/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(434); +/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(435); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "find", function() { return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"]; }); -/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(435); +/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(436); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"]; }); -/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(436); +/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(437); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "first", function() { return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"]; }); /* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(31); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"]; }); -/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(437); +/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(438); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"]; }); -/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(438); +/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(439); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"]; }); -/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(439); +/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(440); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "last", function() { return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"]; }); /* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(66); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"]; }); -/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(441); +/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(442); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"]; }); -/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(442); +/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(443); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"]; }); -/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(443); +/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(444); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"]; }); -/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(446); +/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(447); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"]; }); /* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(81); @@ -51607,175 +53096,175 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flatMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["flatMap"]; }); -/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(447); +/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(448); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"]; }); -/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(448); +/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(449); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"]; }); -/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(449); +/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(450); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"]; }); -/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(450); +/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(451); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"]; }); /* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(41); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"]; }); -/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(451); +/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(452); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"]; }); -/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(452); +/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(453); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"]; }); -/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(453); +/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(454); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"]; }); -/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(454); +/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(455); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"]; }); -/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(455); +/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(456); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"]; }); -/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(456); +/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(457); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"]; }); -/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(457); +/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(458); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"]; }); -/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(458); +/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(459); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"]; }); -/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(459); +/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(460); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"]; }); -/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(444); +/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(445); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"]; }); -/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(460); +/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(461); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"]; }); -/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(461); +/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(462); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"]; }); -/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(462); +/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(463); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"]; }); -/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(463); +/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(464); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"]; }); /* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(30); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"]; }); -/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(464); +/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(465); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"]; }); -/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(465); +/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(466); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"]; }); -/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(445); +/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(446); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"]; }); -/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(466); +/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(467); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"]; }); -/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(467); +/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(468); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "share", function() { return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"]; }); -/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(468); +/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(469); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"]; }); -/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(469); +/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(470); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "single", function() { return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"]; }); -/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(470); +/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(471); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"]; }); -/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(471); +/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(472); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"]; }); -/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(472); +/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(473); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"]; }); -/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(473); +/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(474); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"]; }); -/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(474); +/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(475); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"]; }); -/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(475); +/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(476); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"]; }); -/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(477); +/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(478); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"]; }); -/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(478); +/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(479); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"]; }); -/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(479); +/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(480); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"]; }); -/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(427); +/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(428); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "take", function() { return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"]; }); -/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(440); +/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(441); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"]; }); -/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(480); +/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(481); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"]; }); -/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(481); +/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(482); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"]; }); -/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(482); +/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(483); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"]; }); -/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(483); +/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(484); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"]; }); -/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(484); +/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(485); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"]; }); -/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(426); +/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(427); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"]; }); -/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(485); +/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(486); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"]; }); -/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(486); +/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(487); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"]; }); -/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(487); +/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(488); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"]; }); -/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(488); +/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(489); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"]; }); -/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(489); +/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(490); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"]; }); -/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(490); +/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(491); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"]; }); -/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(491); +/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(492); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"]; }); -/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(492); +/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(493); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"]; }); -/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(493); +/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(494); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"]; }); -/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(494); +/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(495); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"]; }); -/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(495); +/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(496); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"]; }); -/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(496); +/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(497); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"]; }); -/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(497); +/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(498); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"]; }); /** PURE_IMPORTS_START PURE_IMPORTS_END */ @@ -51886,7 +53375,7 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 401 */ +/* 402 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51965,14 +53454,14 @@ var AuditSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 402 */ +/* 403 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return auditTime; }); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55); -/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(401); +/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(402); /* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(108); /** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */ @@ -51988,7 +53477,7 @@ function auditTime(duration, scheduler) { /***/ }), -/* 403 */ +/* 404 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52035,7 +53524,7 @@ var BufferSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 404 */ +/* 405 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52136,7 +53625,7 @@ var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 405 */ +/* 406 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52297,7 +53786,7 @@ function dispatchBufferClose(arg) { /***/ }), -/* 406 */ +/* 407 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52416,7 +53905,7 @@ var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 407 */ +/* 408 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52509,7 +53998,7 @@ var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 408 */ +/* 409 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52569,7 +54058,7 @@ var CatchSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 409 */ +/* 410 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52585,7 +54074,7 @@ function combineAll(project) { /***/ }), -/* 410 */ +/* 411 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52617,7 +54106,7 @@ function combineLatest() { /***/ }), -/* 411 */ +/* 412 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52637,7 +54126,7 @@ function concat() { /***/ }), -/* 412 */ +/* 413 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52653,13 +54142,13 @@ function concatMap(project, resultSelector) { /***/ }), -/* 413 */ +/* 414 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return concatMapTo; }); -/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(412); +/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(413); /** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */ function concatMapTo(innerObservable, resultSelector) { @@ -52669,7 +54158,7 @@ function concatMapTo(innerObservable, resultSelector) { /***/ }), -/* 414 */ +/* 415 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52734,7 +54223,7 @@ var CountSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 415 */ +/* 416 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52819,7 +54308,7 @@ var DebounceSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 416 */ +/* 417 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52895,7 +54384,7 @@ function dispatchNext(subscriber) { /***/ }), -/* 417 */ +/* 418 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52945,7 +54434,7 @@ var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 418 */ +/* 419 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52953,7 +54442,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return delay; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55); -/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(419); +/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(420); /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11); /* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42); /** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */ @@ -53052,7 +54541,7 @@ var DelayMessage = /*@__PURE__*/ (function () { /***/ }), -/* 419 */ +/* 420 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53066,7 +54555,7 @@ function isDate(value) { /***/ }), -/* 420 */ +/* 421 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53212,7 +54701,7 @@ var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 421 */ +/* 422 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53250,7 +54739,7 @@ var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 422 */ +/* 423 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53326,7 +54815,7 @@ var DistinctSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 423 */ +/* 424 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53397,13 +54886,13 @@ var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 424 */ +/* 425 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return distinctUntilKeyChanged; }); -/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(423); +/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(424); /** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */ function distinctUntilKeyChanged(key, compare) { @@ -53413,7 +54902,7 @@ function distinctUntilKeyChanged(key, compare) { /***/ }), -/* 425 */ +/* 426 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53421,9 +54910,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return elementAt; }); /* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(105); -/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(426); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(417); -/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(427); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(427); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(418); +/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(428); /** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */ @@ -53445,7 +54934,7 @@ function elementAt(index, defaultValue) { /***/ }), -/* 426 */ +/* 427 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53511,7 +55000,7 @@ function defaultErrorFactory() { /***/ }), -/* 427 */ +/* 428 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53573,7 +55062,7 @@ var TakeSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 428 */ +/* 429 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53595,7 +55084,7 @@ function endWith() { /***/ }), -/* 429 */ +/* 430 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53657,7 +55146,7 @@ var EverySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 430 */ +/* 431 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53711,7 +55200,7 @@ var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 431 */ +/* 432 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53805,7 +55294,7 @@ var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 432 */ +/* 433 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53917,7 +55406,7 @@ var ExpandSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 433 */ +/* 434 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53955,7 +55444,7 @@ var FinallySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 434 */ +/* 435 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54027,13 +55516,13 @@ var FindValueSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 435 */ +/* 436 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return findIndex; }); -/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(434); +/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(435); /** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */ function findIndex(predicate, thisArg) { @@ -54043,7 +55532,7 @@ function findIndex(predicate, thisArg) { /***/ }), -/* 436 */ +/* 437 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54051,9 +55540,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "first", function() { return first; }); /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(105); -/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(427); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(417); -/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(426); +/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(428); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(418); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(427); /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(25); /** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */ @@ -54070,7 +55559,7 @@ function first(predicate, defaultValue) { /***/ }), -/* 437 */ +/* 438 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54107,7 +55596,7 @@ var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 438 */ +/* 439 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54151,7 +55640,7 @@ var IsEmptySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 439 */ +/* 440 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54159,9 +55648,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return last; }); /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(105); -/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(440); -/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(426); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(417); +/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(441); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(427); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(418); /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(25); /** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */ @@ -54178,7 +55667,7 @@ function last(predicate, defaultValue) { /***/ }), -/* 440 */ +/* 441 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54255,7 +55744,7 @@ var TakeLastSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 441 */ +/* 442 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54294,7 +55783,7 @@ var MapToSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 442 */ +/* 443 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54344,13 +55833,13 @@ var MaterializeSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 443 */ +/* 444 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; }); -/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(444); +/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(445); /** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */ function max(comparer) { @@ -54363,15 +55852,15 @@ function max(comparer) { /***/ }), -/* 444 */ +/* 445 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return reduce; }); -/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(445); -/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(440); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(417); +/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(446); +/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(441); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(418); /* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(24); /** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */ @@ -54392,7 +55881,7 @@ function reduce(accumulator, seed) { /***/ }), -/* 445 */ +/* 446 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54474,7 +55963,7 @@ var ScanSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 446 */ +/* 447 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54494,7 +55983,7 @@ function merge() { /***/ }), -/* 447 */ +/* 448 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54519,7 +56008,7 @@ function mergeMapTo(innerObservable, resultSelector, concurrent) { /***/ }), -/* 448 */ +/* 449 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54628,13 +56117,13 @@ var MergeScanSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 449 */ +/* 450 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; }); -/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(444); +/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(445); /** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */ function min(comparer) { @@ -54647,7 +56136,7 @@ function min(comparer) { /***/ }), -/* 450 */ +/* 451 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54696,7 +56185,7 @@ var MulticastOperator = /*@__PURE__*/ (function () { /***/ }), -/* 451 */ +/* 452 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54786,7 +56275,7 @@ var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 452 */ +/* 453 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54834,7 +56323,7 @@ var PairwiseSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 453 */ +/* 454 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54857,7 +56346,7 @@ function partition(predicate, thisArg) { /***/ }), -/* 454 */ +/* 455 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54897,14 +56386,14 @@ function plucker(props, length) { /***/ }), -/* 455 */ +/* 456 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return publish; }); /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(450); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(451); /** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */ @@ -54917,14 +56406,14 @@ function publish(selector) { /***/ }), -/* 456 */ +/* 457 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return publishBehavior; }); /* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(32); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(450); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(451); /** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */ @@ -54935,14 +56424,14 @@ function publishBehavior(value) { /***/ }), -/* 457 */ +/* 458 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return publishLast; }); /* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(450); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(451); /** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */ @@ -54953,14 +56442,14 @@ function publishLast() { /***/ }), -/* 458 */ +/* 459 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return publishReplay; }); /* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(450); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(451); /** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */ @@ -54976,7 +56465,7 @@ function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) { /***/ }), -/* 459 */ +/* 460 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55003,7 +56492,7 @@ function race() { /***/ }), -/* 460 */ +/* 461 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55068,7 +56557,7 @@ var RepeatSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 461 */ +/* 462 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55162,7 +56651,7 @@ var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 462 */ +/* 463 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55215,7 +56704,7 @@ var RetrySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 463 */ +/* 464 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55301,7 +56790,7 @@ var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 464 */ +/* 465 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55356,7 +56845,7 @@ var SampleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 465 */ +/* 466 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55416,7 +56905,7 @@ function dispatchNotification(state) { /***/ }), -/* 466 */ +/* 467 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55539,13 +57028,13 @@ var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 467 */ +/* 468 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "share", function() { return share; }); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(450); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(451); /* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30); /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27); /** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */ @@ -55562,7 +57051,7 @@ function share() { /***/ }), -/* 468 */ +/* 469 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55631,7 +57120,7 @@ function shareReplayOperator(_a) { /***/ }), -/* 469 */ +/* 470 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55711,7 +57200,7 @@ var SingleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 470 */ +/* 471 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55753,7 +57242,7 @@ var SkipSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 471 */ +/* 472 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55815,7 +57304,7 @@ var SkipLastSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 472 */ +/* 473 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55872,7 +57361,7 @@ var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 473 */ +/* 474 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55928,7 +57417,7 @@ var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 474 */ +/* 475 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55957,13 +57446,13 @@ function startWith() { /***/ }), -/* 475 */ +/* 476 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return subscribeOn; }); -/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(476); +/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(477); /** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */ function subscribeOn(scheduler, delay) { @@ -55988,7 +57477,7 @@ var SubscribeOnOperator = /*@__PURE__*/ (function () { /***/ }), -/* 476 */ +/* 477 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56052,13 +57541,13 @@ var SubscribeOnObservable = /*@__PURE__*/ (function (_super) { /***/ }), -/* 477 */ +/* 478 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return switchAll; }); -/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(478); +/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(479); /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25); /** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */ @@ -56070,7 +57559,7 @@ function switchAll() { /***/ }), -/* 478 */ +/* 479 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56158,13 +57647,13 @@ var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 479 */ +/* 480 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return switchMapTo; }); -/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(478); +/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(479); /** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */ function switchMapTo(innerObservable, resultSelector) { @@ -56174,7 +57663,7 @@ function switchMapTo(innerObservable, resultSelector) { /***/ }), -/* 480 */ +/* 481 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56222,7 +57711,7 @@ var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 481 */ +/* 482 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56290,7 +57779,7 @@ var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 482 */ +/* 483 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56378,7 +57867,7 @@ var TapSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 483 */ +/* 484 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56480,7 +57969,7 @@ var ThrottleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 484 */ +/* 485 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56489,7 +57978,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12); /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55); -/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(483); +/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(484); /** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */ @@ -56578,7 +58067,7 @@ function dispatchNext(arg) { /***/ }), -/* 485 */ +/* 486 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56586,7 +58075,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return timeInterval; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeInterval", function() { return TimeInterval; }); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55); -/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(445); +/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(446); /* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(91); /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66); /** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */ @@ -56622,7 +58111,7 @@ var TimeInterval = /*@__PURE__*/ (function () { /***/ }), -/* 486 */ +/* 487 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56630,7 +58119,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return timeout; }); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55); /* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); -/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(487); +/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(488); /* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49); /** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */ @@ -56647,7 +58136,7 @@ function timeout(due, scheduler) { /***/ }), -/* 487 */ +/* 488 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56655,7 +58144,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return timeoutWith; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55); -/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(419); +/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(420); /* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(90); /** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_innerSubscribe PURE_IMPORTS_END */ @@ -56726,7 +58215,7 @@ var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 488 */ +/* 489 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56756,13 +58245,13 @@ var Timestamp = /*@__PURE__*/ (function () { /***/ }), -/* 489 */ +/* 490 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; }); -/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(444); +/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(445); /** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */ function toArrayReducer(arr, item, index) { @@ -56779,7 +58268,7 @@ function toArray() { /***/ }), -/* 490 */ +/* 491 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56857,7 +58346,7 @@ var WindowSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 491 */ +/* 492 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56947,7 +58436,7 @@ var WindowCountSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 492 */ +/* 493 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57117,7 +58606,7 @@ function dispatchWindowClose(state) { /***/ }), -/* 493 */ +/* 494 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57260,7 +58749,7 @@ var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 494 */ +/* 495 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57357,7 +58846,7 @@ var WindowSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 495 */ +/* 496 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57452,7 +58941,7 @@ var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 496 */ +/* 497 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57474,7 +58963,7 @@ function zip() { /***/ }), -/* 497 */ +/* 498 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57490,7 +58979,7 @@ function zipAll(project) { /***/ }), -/* 498 */ +/* 499 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57499,8 +58988,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(249); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(246); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(248); -/* harmony import */ var _utils_projects_tree__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(365); -/* harmony import */ var _utils_kibana__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(499); +/* harmony import */ var _utils_projects_tree__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(366); +/* harmony import */ var _utils_kibana__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(500); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -57582,7 +59071,7 @@ function toArray(value) { } /***/ }), -/* 499 */ +/* 500 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57590,13 +59079,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Kibana", function() { return Kibana; }); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(500); +/* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(501); /* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(multimatch__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(239); /* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(is_path_inside__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(360); +/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(361); /* harmony import */ var _projects__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(248); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(504); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(505); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -57758,15 +59247,15 @@ class Kibana { } /***/ }), -/* 500 */ +/* 501 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const minimatch = __webpack_require__(150); -const arrayUnion = __webpack_require__(501); -const arrayDiffer = __webpack_require__(502); -const arrify = __webpack_require__(503); +const arrayUnion = __webpack_require__(502); +const arrayDiffer = __webpack_require__(503); +const arrify = __webpack_require__(504); module.exports = (list, patterns, options = {}) => { list = arrify(list); @@ -57790,7 +59279,7 @@ module.exports = (list, patterns, options = {}) => { /***/ }), -/* 501 */ +/* 502 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57802,7 +59291,7 @@ module.exports = (...arguments_) => { /***/ }), -/* 502 */ +/* 503 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57817,7 +59306,7 @@ module.exports = arrayDiffer; /***/ }), -/* 503 */ +/* 504 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57847,7 +59336,7 @@ module.exports = arrify; /***/ }), -/* 504 */ +/* 505 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57917,12 +59406,12 @@ function getProjectPaths({ } /***/ }), -/* 505 */ +/* 506 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _build_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(506); +/* harmony import */ var _build_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(507); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return _build_production_projects__WEBPACK_IMPORTED_MODULE_0__["buildProductionProjects"]; }); /* @@ -57946,19 +59435,19 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 506 */ +/* 507 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return buildProductionProjects; }); -/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(507); +/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(508); /* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cpy__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(143); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(504); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(505); /* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(131); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(246); /* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(251); @@ -58095,7 +59584,7 @@ async function copyToBuild(project, kibanaRoot, buildRoot) { } /***/ }), -/* 507 */ +/* 508 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58103,14 +59592,14 @@ async function copyToBuild(project, kibanaRoot, buildRoot) { const EventEmitter = __webpack_require__(156); const path = __webpack_require__(4); const os = __webpack_require__(121); -const pMap = __webpack_require__(508); -const arrify = __webpack_require__(503); -const globby = __webpack_require__(509); -const hasGlob = __webpack_require__(705); -const cpFile = __webpack_require__(707); -const junk = __webpack_require__(717); -const pFilter = __webpack_require__(718); -const CpyError = __webpack_require__(720); +const pMap = __webpack_require__(509); +const arrify = __webpack_require__(504); +const globby = __webpack_require__(510); +const hasGlob = __webpack_require__(706); +const cpFile = __webpack_require__(708); +const junk = __webpack_require__(718); +const pFilter = __webpack_require__(719); +const CpyError = __webpack_require__(721); const defaultOptions = { ignoreJunk: true @@ -58261,7 +59750,7 @@ module.exports = (source, destination, { /***/ }), -/* 508 */ +/* 509 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58349,17 +59838,17 @@ module.exports = async ( /***/ }), -/* 509 */ +/* 510 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); -const arrayUnion = __webpack_require__(510); +const arrayUnion = __webpack_require__(511); const glob = __webpack_require__(147); -const fastGlob = __webpack_require__(512); -const dirGlob = __webpack_require__(698); -const gitignore = __webpack_require__(701); +const fastGlob = __webpack_require__(513); +const dirGlob = __webpack_require__(699); +const gitignore = __webpack_require__(702); const DEFAULT_FILTER = () => false; @@ -58504,12 +59993,12 @@ module.exports.gitignore = gitignore; /***/ }), -/* 510 */ +/* 511 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var arrayUniq = __webpack_require__(511); +var arrayUniq = __webpack_require__(512); module.exports = function () { return arrayUniq([].concat.apply([], arguments)); @@ -58517,7 +60006,7 @@ module.exports = function () { /***/ }), -/* 511 */ +/* 512 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58586,10 +60075,10 @@ if ('Set' in global) { /***/ }), -/* 512 */ +/* 513 */ /***/ (function(module, exports, __webpack_require__) { -const pkg = __webpack_require__(513); +const pkg = __webpack_require__(514); module.exports = pkg.async; module.exports.default = pkg.async; @@ -58602,19 +60091,19 @@ module.exports.generateTasks = pkg.generateTasks; /***/ }), -/* 513 */ +/* 514 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var optionsManager = __webpack_require__(514); -var taskManager = __webpack_require__(515); -var reader_async_1 = __webpack_require__(669); -var reader_stream_1 = __webpack_require__(693); -var reader_sync_1 = __webpack_require__(694); -var arrayUtils = __webpack_require__(696); -var streamUtils = __webpack_require__(697); +var optionsManager = __webpack_require__(515); +var taskManager = __webpack_require__(516); +var reader_async_1 = __webpack_require__(670); +var reader_stream_1 = __webpack_require__(694); +var reader_sync_1 = __webpack_require__(695); +var arrayUtils = __webpack_require__(697); +var streamUtils = __webpack_require__(698); /** * Synchronous API. */ @@ -58680,7 +60169,7 @@ function isString(source) { /***/ }), -/* 514 */ +/* 515 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58718,13 +60207,13 @@ exports.prepare = prepare; /***/ }), -/* 515 */ +/* 516 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var patternUtils = __webpack_require__(516); +var patternUtils = __webpack_require__(517); /** * Generate tasks based on parent directory of each pattern. */ @@ -58815,16 +60304,16 @@ exports.convertPatternGroupToTask = convertPatternGroupToTask; /***/ }), -/* 516 */ +/* 517 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var globParent = __webpack_require__(517); +var globParent = __webpack_require__(518); var isGlob = __webpack_require__(172); -var micromatch = __webpack_require__(520); +var micromatch = __webpack_require__(521); var GLOBSTAR = '**'; /** * Return true for static pattern. @@ -58970,15 +60459,15 @@ exports.matchAny = matchAny; /***/ }), -/* 517 */ +/* 518 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var path = __webpack_require__(4); -var isglob = __webpack_require__(518); -var pathDirname = __webpack_require__(519); +var isglob = __webpack_require__(519); +var pathDirname = __webpack_require__(520); var isWin32 = __webpack_require__(121).platform() === 'win32'; module.exports = function globParent(str) { @@ -59001,7 +60490,7 @@ module.exports = function globParent(str) { /***/ }), -/* 518 */ +/* 519 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -59032,7 +60521,7 @@ module.exports = function isGlob(str) { /***/ }), -/* 519 */ +/* 520 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59182,7 +60671,7 @@ module.exports.win32 = win32; /***/ }), -/* 520 */ +/* 521 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59193,18 +60682,18 @@ module.exports.win32 = win32; */ var util = __webpack_require__(112); -var braces = __webpack_require__(521); -var toRegex = __webpack_require__(522); -var extend = __webpack_require__(635); +var braces = __webpack_require__(522); +var toRegex = __webpack_require__(523); +var extend = __webpack_require__(636); /** * Local dependencies */ -var compilers = __webpack_require__(637); -var parsers = __webpack_require__(664); -var cache = __webpack_require__(665); -var utils = __webpack_require__(666); +var compilers = __webpack_require__(638); +var parsers = __webpack_require__(665); +var cache = __webpack_require__(666); +var utils = __webpack_require__(667); var MAX_LENGTH = 1024 * 64; /** @@ -60066,7 +61555,7 @@ module.exports = micromatch; /***/ }), -/* 521 */ +/* 522 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60076,18 +61565,18 @@ module.exports = micromatch; * Module dependencies */ -var toRegex = __webpack_require__(522); -var unique = __webpack_require__(544); -var extend = __webpack_require__(545); +var toRegex = __webpack_require__(523); +var unique = __webpack_require__(545); +var extend = __webpack_require__(546); /** * Local dependencies */ -var compilers = __webpack_require__(547); -var parsers = __webpack_require__(560); -var Braces = __webpack_require__(564); -var utils = __webpack_require__(548); +var compilers = __webpack_require__(548); +var parsers = __webpack_require__(561); +var Braces = __webpack_require__(565); +var utils = __webpack_require__(549); var MAX_LENGTH = 1024 * 64; var cache = {}; @@ -60391,16 +61880,16 @@ module.exports = braces; /***/ }), -/* 522 */ +/* 523 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var safe = __webpack_require__(523); -var define = __webpack_require__(529); -var extend = __webpack_require__(537); -var not = __webpack_require__(541); +var safe = __webpack_require__(524); +var define = __webpack_require__(530); +var extend = __webpack_require__(538); +var not = __webpack_require__(542); var MAX_LENGTH = 1024 * 64; /** @@ -60553,10 +62042,10 @@ module.exports.makeRe = makeRe; /***/ }), -/* 523 */ +/* 524 */ /***/ (function(module, exports, __webpack_require__) { -var parse = __webpack_require__(524); +var parse = __webpack_require__(525); var types = parse.types; module.exports = function (re, opts) { @@ -60602,13 +62091,13 @@ function isRegExp (x) { /***/ }), -/* 524 */ +/* 525 */ /***/ (function(module, exports, __webpack_require__) { -var util = __webpack_require__(525); -var types = __webpack_require__(526); -var sets = __webpack_require__(527); -var positions = __webpack_require__(528); +var util = __webpack_require__(526); +var types = __webpack_require__(527); +var sets = __webpack_require__(528); +var positions = __webpack_require__(529); module.exports = function(regexpStr) { @@ -60890,11 +62379,11 @@ module.exports.types = types; /***/ }), -/* 525 */ +/* 526 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(526); -var sets = __webpack_require__(527); +var types = __webpack_require__(527); +var sets = __webpack_require__(528); // All of these are private and only used by randexp. @@ -61007,7 +62496,7 @@ exports.error = function(regexp, msg) { /***/ }), -/* 526 */ +/* 527 */ /***/ (function(module, exports) { module.exports = { @@ -61023,10 +62512,10 @@ module.exports = { /***/ }), -/* 527 */ +/* 528 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(526); +var types = __webpack_require__(527); var INTS = function() { return [{ type: types.RANGE , from: 48, to: 57 }]; @@ -61111,10 +62600,10 @@ exports.anyChar = function() { /***/ }), -/* 528 */ +/* 529 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(526); +var types = __webpack_require__(527); exports.wordBoundary = function() { return { type: types.POSITION, value: 'b' }; @@ -61134,7 +62623,7 @@ exports.end = function() { /***/ }), -/* 529 */ +/* 530 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61147,8 +62636,8 @@ exports.end = function() { -var isobject = __webpack_require__(530); -var isDescriptor = __webpack_require__(531); +var isobject = __webpack_require__(531); +var isDescriptor = __webpack_require__(532); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -61179,7 +62668,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 530 */ +/* 531 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61198,7 +62687,7 @@ module.exports = function isObject(val) { /***/ }), -/* 531 */ +/* 532 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61211,9 +62700,9 @@ module.exports = function isObject(val) { -var typeOf = __webpack_require__(532); -var isAccessor = __webpack_require__(533); -var isData = __webpack_require__(535); +var typeOf = __webpack_require__(533); +var isAccessor = __webpack_require__(534); +var isData = __webpack_require__(536); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -61227,7 +62716,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 532 */ +/* 533 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -61362,7 +62851,7 @@ function isBuffer(val) { /***/ }), -/* 533 */ +/* 534 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61375,7 +62864,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(534); +var typeOf = __webpack_require__(535); // accessor descriptor properties var accessor = { @@ -61438,7 +62927,7 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 534 */ +/* 535 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -61573,7 +63062,7 @@ function isBuffer(val) { /***/ }), -/* 535 */ +/* 536 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61586,7 +63075,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(536); +var typeOf = __webpack_require__(537); module.exports = function isDataDescriptor(obj, prop) { // data descriptor properties @@ -61629,7 +63118,7 @@ module.exports = function isDataDescriptor(obj, prop) { /***/ }), -/* 536 */ +/* 537 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -61764,14 +63253,14 @@ function isBuffer(val) { /***/ }), -/* 537 */ +/* 538 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(538); -var assignSymbols = __webpack_require__(540); +var isExtendable = __webpack_require__(539); +var assignSymbols = __webpack_require__(541); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -61831,7 +63320,7 @@ function isEnum(obj, key) { /***/ }), -/* 538 */ +/* 539 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61844,7 +63333,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(539); +var isPlainObject = __webpack_require__(540); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -61852,7 +63341,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 539 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61865,7 +63354,7 @@ module.exports = function isExtendable(val) { -var isObject = __webpack_require__(530); +var isObject = __webpack_require__(531); function isObjectObject(o) { return isObject(o) === true @@ -61896,7 +63385,7 @@ module.exports = function isPlainObject(o) { /***/ }), -/* 540 */ +/* 541 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61943,14 +63432,14 @@ module.exports = function(receiver, objects) { /***/ }), -/* 541 */ +/* 542 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(542); -var safe = __webpack_require__(523); +var extend = __webpack_require__(543); +var safe = __webpack_require__(524); /** * The main export is a function that takes a `pattern` string and an `options` object. @@ -62022,14 +63511,14 @@ module.exports = toRegex; /***/ }), -/* 542 */ +/* 543 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(543); -var assignSymbols = __webpack_require__(540); +var isExtendable = __webpack_require__(544); +var assignSymbols = __webpack_require__(541); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -62089,7 +63578,7 @@ function isEnum(obj, key) { /***/ }), -/* 543 */ +/* 544 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62102,7 +63591,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(539); +var isPlainObject = __webpack_require__(540); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -62110,7 +63599,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 544 */ +/* 545 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62160,13 +63649,13 @@ module.exports.immutable = function uniqueImmutable(arr) { /***/ }), -/* 545 */ +/* 546 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(546); +var isObject = __webpack_require__(547); module.exports = function extend(o/*, objects*/) { if (!isObject(o)) { o = {}; } @@ -62200,7 +63689,7 @@ function hasOwn(obj, key) { /***/ }), -/* 546 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62220,13 +63709,13 @@ module.exports = function isExtendable(val) { /***/ }), -/* 547 */ +/* 548 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(548); +var utils = __webpack_require__(549); module.exports = function(braces, options) { braces.compiler @@ -62509,25 +63998,25 @@ function hasQueue(node) { /***/ }), -/* 548 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var splitString = __webpack_require__(549); +var splitString = __webpack_require__(550); var utils = module.exports; /** * Module dependencies */ -utils.extend = __webpack_require__(545); -utils.flatten = __webpack_require__(552); -utils.isObject = __webpack_require__(530); -utils.fillRange = __webpack_require__(553); -utils.repeat = __webpack_require__(559); -utils.unique = __webpack_require__(544); +utils.extend = __webpack_require__(546); +utils.flatten = __webpack_require__(553); +utils.isObject = __webpack_require__(531); +utils.fillRange = __webpack_require__(554); +utils.repeat = __webpack_require__(560); +utils.unique = __webpack_require__(545); utils.define = function(obj, key, val) { Object.defineProperty(obj, key, { @@ -62859,7 +64348,7 @@ utils.escapeRegex = function(str) { /***/ }), -/* 549 */ +/* 550 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62872,7 +64361,7 @@ utils.escapeRegex = function(str) { -var extend = __webpack_require__(550); +var extend = __webpack_require__(551); module.exports = function(str, options, fn) { if (typeof str !== 'string') { @@ -63037,14 +64526,14 @@ function keepEscaping(opts, str, idx) { /***/ }), -/* 550 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(551); -var assignSymbols = __webpack_require__(540); +var isExtendable = __webpack_require__(552); +var assignSymbols = __webpack_require__(541); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -63104,7 +64593,7 @@ function isEnum(obj, key) { /***/ }), -/* 551 */ +/* 552 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63117,7 +64606,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(539); +var isPlainObject = __webpack_require__(540); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -63125,7 +64614,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 552 */ +/* 553 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63154,7 +64643,7 @@ function flat(arr, res) { /***/ }), -/* 553 */ +/* 554 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63168,10 +64657,10 @@ function flat(arr, res) { var util = __webpack_require__(112); -var isNumber = __webpack_require__(554); -var extend = __webpack_require__(545); -var repeat = __webpack_require__(557); -var toRegex = __webpack_require__(558); +var isNumber = __webpack_require__(555); +var extend = __webpack_require__(546); +var repeat = __webpack_require__(558); +var toRegex = __webpack_require__(559); /** * Return a range of numbers or letters. @@ -63369,7 +64858,7 @@ module.exports = fillRange; /***/ }), -/* 554 */ +/* 555 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63382,7 +64871,7 @@ module.exports = fillRange; -var typeOf = __webpack_require__(555); +var typeOf = __webpack_require__(556); module.exports = function isNumber(num) { var type = typeOf(num); @@ -63398,10 +64887,10 @@ module.exports = function isNumber(num) { /***/ }), -/* 555 */ +/* 556 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(556); +var isBuffer = __webpack_require__(557); var toString = Object.prototype.toString; /** @@ -63520,7 +65009,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 556 */ +/* 557 */ /***/ (function(module, exports) { /*! @@ -63547,7 +65036,7 @@ function isSlowBuffer (obj) { /***/ }), -/* 557 */ +/* 558 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63624,7 +65113,7 @@ function repeat(str, num) { /***/ }), -/* 558 */ +/* 559 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63637,8 +65126,8 @@ function repeat(str, num) { -var repeat = __webpack_require__(557); -var isNumber = __webpack_require__(554); +var repeat = __webpack_require__(558); +var isNumber = __webpack_require__(555); var cache = {}; function toRegexRange(min, max, options) { @@ -63925,7 +65414,7 @@ module.exports = toRegexRange; /***/ }), -/* 559 */ +/* 560 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63950,14 +65439,14 @@ module.exports = function repeat(ele, num) { /***/ }), -/* 560 */ +/* 561 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Node = __webpack_require__(561); -var utils = __webpack_require__(548); +var Node = __webpack_require__(562); +var utils = __webpack_require__(549); /** * Braces parsers @@ -64317,15 +65806,15 @@ function concatNodes(pos, node, parent, options) { /***/ }), -/* 561 */ +/* 562 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(530); -var define = __webpack_require__(562); -var utils = __webpack_require__(563); +var isObject = __webpack_require__(531); +var define = __webpack_require__(563); +var utils = __webpack_require__(564); var ownNames; /** @@ -64816,7 +66305,7 @@ exports = module.exports = Node; /***/ }), -/* 562 */ +/* 563 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64829,7 +66318,7 @@ exports = module.exports = Node; -var isDescriptor = __webpack_require__(531); +var isDescriptor = __webpack_require__(532); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -64854,13 +66343,13 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 563 */ +/* 564 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(555); +var typeOf = __webpack_require__(556); var utils = module.exports; /** @@ -65880,17 +67369,17 @@ function assert(val, message) { /***/ }), -/* 564 */ +/* 565 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(545); -var Snapdragon = __webpack_require__(565); -var compilers = __webpack_require__(547); -var parsers = __webpack_require__(560); -var utils = __webpack_require__(548); +var extend = __webpack_require__(546); +var Snapdragon = __webpack_require__(566); +var compilers = __webpack_require__(548); +var parsers = __webpack_require__(561); +var utils = __webpack_require__(549); /** * Customize Snapdragon parser and renderer @@ -65991,17 +67480,17 @@ module.exports = Braces; /***/ }), -/* 565 */ +/* 566 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Base = __webpack_require__(566); -var define = __webpack_require__(593); -var Compiler = __webpack_require__(603); -var Parser = __webpack_require__(632); -var utils = __webpack_require__(612); +var Base = __webpack_require__(567); +var define = __webpack_require__(594); +var Compiler = __webpack_require__(604); +var Parser = __webpack_require__(633); +var utils = __webpack_require__(613); var regexCache = {}; var cache = {}; @@ -66172,20 +67661,20 @@ module.exports.Parser = Parser; /***/ }), -/* 566 */ +/* 567 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(112); -var define = __webpack_require__(567); -var CacheBase = __webpack_require__(568); -var Emitter = __webpack_require__(569); -var isObject = __webpack_require__(530); -var merge = __webpack_require__(587); -var pascal = __webpack_require__(590); -var cu = __webpack_require__(591); +var define = __webpack_require__(568); +var CacheBase = __webpack_require__(569); +var Emitter = __webpack_require__(570); +var isObject = __webpack_require__(531); +var merge = __webpack_require__(588); +var pascal = __webpack_require__(591); +var cu = __webpack_require__(592); /** * Optionally define a custom `cache` namespace to use. @@ -66614,7 +68103,7 @@ module.exports.namespace = namespace; /***/ }), -/* 567 */ +/* 568 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66627,7 +68116,7 @@ module.exports.namespace = namespace; -var isDescriptor = __webpack_require__(531); +var isDescriptor = __webpack_require__(532); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -66652,21 +68141,21 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 568 */ +/* 569 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(530); -var Emitter = __webpack_require__(569); -var visit = __webpack_require__(570); -var toPath = __webpack_require__(573); -var union = __webpack_require__(574); -var del = __webpack_require__(578); -var get = __webpack_require__(576); -var has = __webpack_require__(583); -var set = __webpack_require__(586); +var isObject = __webpack_require__(531); +var Emitter = __webpack_require__(570); +var visit = __webpack_require__(571); +var toPath = __webpack_require__(574); +var union = __webpack_require__(575); +var del = __webpack_require__(579); +var get = __webpack_require__(577); +var has = __webpack_require__(584); +var set = __webpack_require__(587); /** * Create a `Cache` constructor that when instantiated will @@ -66920,7 +68409,7 @@ module.exports.namespace = namespace; /***/ }), -/* 569 */ +/* 570 */ /***/ (function(module, exports, __webpack_require__) { @@ -67089,7 +68578,7 @@ Emitter.prototype.hasListeners = function(event){ /***/ }), -/* 570 */ +/* 571 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67102,8 +68591,8 @@ Emitter.prototype.hasListeners = function(event){ -var visit = __webpack_require__(571); -var mapVisit = __webpack_require__(572); +var visit = __webpack_require__(572); +var mapVisit = __webpack_require__(573); module.exports = function(collection, method, val) { var result; @@ -67126,7 +68615,7 @@ module.exports = function(collection, method, val) { /***/ }), -/* 571 */ +/* 572 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67139,7 +68628,7 @@ module.exports = function(collection, method, val) { -var isObject = __webpack_require__(530); +var isObject = __webpack_require__(531); module.exports = function visit(thisArg, method, target, val) { if (!isObject(thisArg) && typeof thisArg !== 'function') { @@ -67166,14 +68655,14 @@ module.exports = function visit(thisArg, method, target, val) { /***/ }), -/* 572 */ +/* 573 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(112); -var visit = __webpack_require__(571); +var visit = __webpack_require__(572); /** * Map `visit` over an array of objects. @@ -67210,7 +68699,7 @@ function isObject(val) { /***/ }), -/* 573 */ +/* 574 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67223,7 +68712,7 @@ function isObject(val) { -var typeOf = __webpack_require__(555); +var typeOf = __webpack_require__(556); module.exports = function toPath(args) { if (typeOf(args) !== 'arguments') { @@ -67250,16 +68739,16 @@ function filter(arr) { /***/ }), -/* 574 */ +/* 575 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(546); -var union = __webpack_require__(575); -var get = __webpack_require__(576); -var set = __webpack_require__(577); +var isObject = __webpack_require__(547); +var union = __webpack_require__(576); +var get = __webpack_require__(577); +var set = __webpack_require__(578); module.exports = function unionValue(obj, prop, value) { if (!isObject(obj)) { @@ -67287,7 +68776,7 @@ function arrayify(val) { /***/ }), -/* 575 */ +/* 576 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67323,7 +68812,7 @@ module.exports = function union(init) { /***/ }), -/* 576 */ +/* 577 */ /***/ (function(module, exports) { /*! @@ -67379,7 +68868,7 @@ function toString(val) { /***/ }), -/* 577 */ +/* 578 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67392,10 +68881,10 @@ function toString(val) { -var split = __webpack_require__(549); -var extend = __webpack_require__(545); -var isPlainObject = __webpack_require__(539); -var isObject = __webpack_require__(546); +var split = __webpack_require__(550); +var extend = __webpack_require__(546); +var isPlainObject = __webpack_require__(540); +var isObject = __webpack_require__(547); module.exports = function(obj, prop, val) { if (!isObject(obj)) { @@ -67441,7 +68930,7 @@ function isValidKey(key) { /***/ }), -/* 578 */ +/* 579 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67454,8 +68943,8 @@ function isValidKey(key) { -var isObject = __webpack_require__(530); -var has = __webpack_require__(579); +var isObject = __webpack_require__(531); +var has = __webpack_require__(580); module.exports = function unset(obj, prop) { if (!isObject(obj)) { @@ -67480,7 +68969,7 @@ module.exports = function unset(obj, prop) { /***/ }), -/* 579 */ +/* 580 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67493,9 +68982,9 @@ module.exports = function unset(obj, prop) { -var isObject = __webpack_require__(580); -var hasValues = __webpack_require__(582); -var get = __webpack_require__(576); +var isObject = __webpack_require__(581); +var hasValues = __webpack_require__(583); +var get = __webpack_require__(577); module.exports = function(obj, prop, noZero) { if (isObject(obj)) { @@ -67506,7 +68995,7 @@ module.exports = function(obj, prop, noZero) { /***/ }), -/* 580 */ +/* 581 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67519,7 +69008,7 @@ module.exports = function(obj, prop, noZero) { -var isArray = __webpack_require__(581); +var isArray = __webpack_require__(582); module.exports = function isObject(val) { return val != null && typeof val === 'object' && isArray(val) === false; @@ -67527,7 +69016,7 @@ module.exports = function isObject(val) { /***/ }), -/* 581 */ +/* 582 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -67538,7 +69027,7 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 582 */ +/* 583 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67581,7 +69070,7 @@ module.exports = function hasValue(o, noZero) { /***/ }), -/* 583 */ +/* 584 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67594,9 +69083,9 @@ module.exports = function hasValue(o, noZero) { -var isObject = __webpack_require__(530); -var hasValues = __webpack_require__(584); -var get = __webpack_require__(576); +var isObject = __webpack_require__(531); +var hasValues = __webpack_require__(585); +var get = __webpack_require__(577); module.exports = function(val, prop) { return hasValues(isObject(val) && prop ? get(val, prop) : val); @@ -67604,7 +69093,7 @@ module.exports = function(val, prop) { /***/ }), -/* 584 */ +/* 585 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67617,8 +69106,8 @@ module.exports = function(val, prop) { -var typeOf = __webpack_require__(585); -var isNumber = __webpack_require__(554); +var typeOf = __webpack_require__(586); +var isNumber = __webpack_require__(555); module.exports = function hasValue(val) { // is-number checks for NaN and other edge cases @@ -67671,10 +69160,10 @@ module.exports = function hasValue(val) { /***/ }), -/* 585 */ +/* 586 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(556); +var isBuffer = __webpack_require__(557); var toString = Object.prototype.toString; /** @@ -67796,7 +69285,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 586 */ +/* 587 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67809,10 +69298,10 @@ module.exports = function kindOf(val) { -var split = __webpack_require__(549); -var extend = __webpack_require__(545); -var isPlainObject = __webpack_require__(539); -var isObject = __webpack_require__(546); +var split = __webpack_require__(550); +var extend = __webpack_require__(546); +var isPlainObject = __webpack_require__(540); +var isObject = __webpack_require__(547); module.exports = function(obj, prop, val) { if (!isObject(obj)) { @@ -67858,14 +69347,14 @@ function isValidKey(key) { /***/ }), -/* 587 */ +/* 588 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(588); -var forIn = __webpack_require__(589); +var isExtendable = __webpack_require__(589); +var forIn = __webpack_require__(590); function mixinDeep(target, objects) { var len = arguments.length, i = 0; @@ -67929,7 +69418,7 @@ module.exports = mixinDeep; /***/ }), -/* 588 */ +/* 589 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67942,7 +69431,7 @@ module.exports = mixinDeep; -var isPlainObject = __webpack_require__(539); +var isPlainObject = __webpack_require__(540); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -67950,7 +69439,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 589 */ +/* 590 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67973,7 +69462,7 @@ module.exports = function forIn(obj, fn, thisArg) { /***/ }), -/* 590 */ +/* 591 */ /***/ (function(module, exports) { /*! @@ -68000,14 +69489,14 @@ module.exports = pascalcase; /***/ }), -/* 591 */ +/* 592 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(112); -var utils = __webpack_require__(592); +var utils = __webpack_require__(593); /** * Expose class utils @@ -68372,7 +69861,7 @@ cu.bubble = function(Parent, events) { /***/ }), -/* 592 */ +/* 593 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68386,10 +69875,10 @@ var utils = {}; * Lazily required module dependencies */ -utils.union = __webpack_require__(575); -utils.define = __webpack_require__(593); -utils.isObj = __webpack_require__(530); -utils.staticExtend = __webpack_require__(600); +utils.union = __webpack_require__(576); +utils.define = __webpack_require__(594); +utils.isObj = __webpack_require__(531); +utils.staticExtend = __webpack_require__(601); /** @@ -68400,7 +69889,7 @@ module.exports = utils; /***/ }), -/* 593 */ +/* 594 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68413,7 +69902,7 @@ module.exports = utils; -var isDescriptor = __webpack_require__(594); +var isDescriptor = __webpack_require__(595); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -68438,7 +69927,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 594 */ +/* 595 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68451,9 +69940,9 @@ module.exports = function defineProperty(obj, prop, val) { -var typeOf = __webpack_require__(595); -var isAccessor = __webpack_require__(596); -var isData = __webpack_require__(598); +var typeOf = __webpack_require__(596); +var isAccessor = __webpack_require__(597); +var isData = __webpack_require__(599); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -68467,7 +69956,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 595 */ +/* 596 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -68620,7 +70109,7 @@ function isBuffer(val) { /***/ }), -/* 596 */ +/* 597 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68633,7 +70122,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(597); +var typeOf = __webpack_require__(598); // accessor descriptor properties var accessor = { @@ -68696,10 +70185,10 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 597 */ +/* 598 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(556); +var isBuffer = __webpack_require__(557); var toString = Object.prototype.toString; /** @@ -68818,7 +70307,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 598 */ +/* 599 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68831,7 +70320,7 @@ module.exports = function kindOf(val) { -var typeOf = __webpack_require__(599); +var typeOf = __webpack_require__(600); // data descriptor properties var data = { @@ -68880,10 +70369,10 @@ module.exports = isDataDescriptor; /***/ }), -/* 599 */ +/* 600 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(556); +var isBuffer = __webpack_require__(557); var toString = Object.prototype.toString; /** @@ -69002,7 +70491,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 600 */ +/* 601 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69015,8 +70504,8 @@ module.exports = function kindOf(val) { -var copy = __webpack_require__(601); -var define = __webpack_require__(593); +var copy = __webpack_require__(602); +var define = __webpack_require__(594); var util = __webpack_require__(112); /** @@ -69099,15 +70588,15 @@ module.exports = extend; /***/ }), -/* 601 */ +/* 602 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(555); -var copyDescriptor = __webpack_require__(602); -var define = __webpack_require__(593); +var typeOf = __webpack_require__(556); +var copyDescriptor = __webpack_require__(603); +var define = __webpack_require__(594); /** * Copy static properties, prototype properties, and descriptors from one object to another. @@ -69280,7 +70769,7 @@ module.exports.has = has; /***/ }), -/* 602 */ +/* 603 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69368,16 +70857,16 @@ function isObject(val) { /***/ }), -/* 603 */ +/* 604 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(604); -var define = __webpack_require__(593); -var debug = __webpack_require__(606)('snapdragon:compiler'); -var utils = __webpack_require__(612); +var use = __webpack_require__(605); +var define = __webpack_require__(594); +var debug = __webpack_require__(607)('snapdragon:compiler'); +var utils = __webpack_require__(613); /** * Create a new `Compiler` with the given `options`. @@ -69531,7 +71020,7 @@ Compiler.prototype = { // source map support if (opts.sourcemap) { - var sourcemaps = __webpack_require__(631); + var sourcemaps = __webpack_require__(632); sourcemaps(this); this.mapVisit(this.ast.nodes); this.applySourceMaps(); @@ -69552,7 +71041,7 @@ module.exports = Compiler; /***/ }), -/* 604 */ +/* 605 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69565,7 +71054,7 @@ module.exports = Compiler; -var utils = __webpack_require__(605); +var utils = __webpack_require__(606); module.exports = function base(app, opts) { if (!utils.isObject(app) && typeof app !== 'function') { @@ -69680,7 +71169,7 @@ module.exports = function base(app, opts) { /***/ }), -/* 605 */ +/* 606 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69694,8 +71183,8 @@ var utils = {}; * Lazily required module dependencies */ -utils.define = __webpack_require__(593); -utils.isObject = __webpack_require__(530); +utils.define = __webpack_require__(594); +utils.isObject = __webpack_require__(531); utils.isString = function(val) { @@ -69710,7 +71199,7 @@ module.exports = utils; /***/ }), -/* 606 */ +/* 607 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -69719,14 +71208,14 @@ module.exports = utils; */ if (typeof process !== 'undefined' && process.type === 'renderer') { - module.exports = __webpack_require__(607); + module.exports = __webpack_require__(608); } else { - module.exports = __webpack_require__(610); + module.exports = __webpack_require__(611); } /***/ }), -/* 607 */ +/* 608 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -69735,7 +71224,7 @@ if (typeof process !== 'undefined' && process.type === 'renderer') { * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(608); +exports = module.exports = __webpack_require__(609); exports.log = log; exports.formatArgs = formatArgs; exports.save = save; @@ -69917,7 +71406,7 @@ function localstorage() { /***/ }), -/* 608 */ +/* 609 */ /***/ (function(module, exports, __webpack_require__) { @@ -69933,7 +71422,7 @@ exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; -exports.humanize = __webpack_require__(609); +exports.humanize = __webpack_require__(610); /** * The currently active debug mode names, and names to skip. @@ -70125,7 +71614,7 @@ function coerce(val) { /***/ }), -/* 609 */ +/* 610 */ /***/ (function(module, exports) { /** @@ -70283,7 +71772,7 @@ function plural(ms, n, name) { /***/ }), -/* 610 */ +/* 611 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -70299,7 +71788,7 @@ var util = __webpack_require__(112); * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(608); +exports = module.exports = __webpack_require__(609); exports.init = init; exports.log = log; exports.formatArgs = formatArgs; @@ -70478,7 +71967,7 @@ function createWritableStdioStream (fd) { case 'PIPE': case 'TCP': - var net = __webpack_require__(611); + var net = __webpack_require__(612); stream = new net.Socket({ fd: fd, readable: false, @@ -70537,13 +72026,13 @@ exports.enable(load()); /***/ }), -/* 611 */ +/* 612 */ /***/ (function(module, exports) { module.exports = require("net"); /***/ }), -/* 612 */ +/* 613 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70553,9 +72042,9 @@ module.exports = require("net"); * Module dependencies */ -exports.extend = __webpack_require__(545); -exports.SourceMap = __webpack_require__(613); -exports.sourceMapResolve = __webpack_require__(624); +exports.extend = __webpack_require__(546); +exports.SourceMap = __webpack_require__(614); +exports.sourceMapResolve = __webpack_require__(625); /** * Convert backslash in the given string to forward slashes @@ -70598,7 +72087,7 @@ exports.last = function(arr, n) { /***/ }), -/* 613 */ +/* 614 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -70606,13 +72095,13 @@ exports.last = function(arr, n) { * Licensed under the New BSD license. See LICENSE.txt or: * http://opensource.org/licenses/BSD-3-Clause */ -exports.SourceMapGenerator = __webpack_require__(614).SourceMapGenerator; -exports.SourceMapConsumer = __webpack_require__(620).SourceMapConsumer; -exports.SourceNode = __webpack_require__(623).SourceNode; +exports.SourceMapGenerator = __webpack_require__(615).SourceMapGenerator; +exports.SourceMapConsumer = __webpack_require__(621).SourceMapConsumer; +exports.SourceNode = __webpack_require__(624).SourceNode; /***/ }), -/* 614 */ +/* 615 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -70622,10 +72111,10 @@ exports.SourceNode = __webpack_require__(623).SourceNode; * http://opensource.org/licenses/BSD-3-Clause */ -var base64VLQ = __webpack_require__(615); -var util = __webpack_require__(617); -var ArraySet = __webpack_require__(618).ArraySet; -var MappingList = __webpack_require__(619).MappingList; +var base64VLQ = __webpack_require__(616); +var util = __webpack_require__(618); +var ArraySet = __webpack_require__(619).ArraySet; +var MappingList = __webpack_require__(620).MappingList; /** * An instance of the SourceMapGenerator represents a source map which is @@ -71034,7 +72523,7 @@ exports.SourceMapGenerator = SourceMapGenerator; /***/ }), -/* 615 */ +/* 616 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71074,7 +72563,7 @@ exports.SourceMapGenerator = SourceMapGenerator; * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var base64 = __webpack_require__(616); +var base64 = __webpack_require__(617); // A single base 64 digit can contain 6 bits of data. For the base 64 variable // length quantities we use in the source map spec, the first bit is the sign, @@ -71180,7 +72669,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { /***/ }), -/* 616 */ +/* 617 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71253,7 +72742,7 @@ exports.decode = function (charCode) { /***/ }), -/* 617 */ +/* 618 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71676,7 +73165,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate /***/ }), -/* 618 */ +/* 619 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71686,7 +73175,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(617); +var util = __webpack_require__(618); var has = Object.prototype.hasOwnProperty; var hasNativeMap = typeof Map !== "undefined"; @@ -71803,7 +73292,7 @@ exports.ArraySet = ArraySet; /***/ }), -/* 619 */ +/* 620 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71813,7 +73302,7 @@ exports.ArraySet = ArraySet; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(617); +var util = __webpack_require__(618); /** * Determine whether mappingB is after mappingA with respect to generated @@ -71888,7 +73377,7 @@ exports.MappingList = MappingList; /***/ }), -/* 620 */ +/* 621 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71898,11 +73387,11 @@ exports.MappingList = MappingList; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(617); -var binarySearch = __webpack_require__(621); -var ArraySet = __webpack_require__(618).ArraySet; -var base64VLQ = __webpack_require__(615); -var quickSort = __webpack_require__(622).quickSort; +var util = __webpack_require__(618); +var binarySearch = __webpack_require__(622); +var ArraySet = __webpack_require__(619).ArraySet; +var base64VLQ = __webpack_require__(616); +var quickSort = __webpack_require__(623).quickSort; function SourceMapConsumer(aSourceMap) { var sourceMap = aSourceMap; @@ -72976,7 +74465,7 @@ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; /***/ }), -/* 621 */ +/* 622 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73093,7 +74582,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { /***/ }), -/* 622 */ +/* 623 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73213,7 +74702,7 @@ exports.quickSort = function (ary, comparator) { /***/ }), -/* 623 */ +/* 624 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73223,8 +74712,8 @@ exports.quickSort = function (ary, comparator) { * http://opensource.org/licenses/BSD-3-Clause */ -var SourceMapGenerator = __webpack_require__(614).SourceMapGenerator; -var util = __webpack_require__(617); +var SourceMapGenerator = __webpack_require__(615).SourceMapGenerator; +var util = __webpack_require__(618); // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other // operating systems these days (capturing the result). @@ -73632,17 +75121,17 @@ exports.SourceNode = SourceNode; /***/ }), -/* 624 */ +/* 625 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014, 2015, 2016, 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var sourceMappingURL = __webpack_require__(625) -var resolveUrl = __webpack_require__(626) -var decodeUriComponent = __webpack_require__(627) -var urix = __webpack_require__(629) -var atob = __webpack_require__(630) +var sourceMappingURL = __webpack_require__(626) +var resolveUrl = __webpack_require__(627) +var decodeUriComponent = __webpack_require__(628) +var urix = __webpack_require__(630) +var atob = __webpack_require__(631) @@ -73940,7 +75429,7 @@ module.exports = { /***/ }), -/* 625 */ +/* 626 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014 Simon Lydell @@ -74003,7 +75492,7 @@ void (function(root, factory) { /***/ }), -/* 626 */ +/* 627 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -74021,13 +75510,13 @@ module.exports = resolveUrl /***/ }), -/* 627 */ +/* 628 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var decodeUriComponent = __webpack_require__(628) +var decodeUriComponent = __webpack_require__(629) function customDecodeUriComponent(string) { // `decodeUriComponent` turns `+` into ` `, but that's not wanted. @@ -74038,7 +75527,7 @@ module.exports = customDecodeUriComponent /***/ }), -/* 628 */ +/* 629 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74139,7 +75628,7 @@ module.exports = function (encodedURI) { /***/ }), -/* 629 */ +/* 630 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -74162,7 +75651,7 @@ module.exports = urix /***/ }), -/* 630 */ +/* 631 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74176,7 +75665,7 @@ module.exports = atob.atob = atob; /***/ }), -/* 631 */ +/* 632 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74184,8 +75673,8 @@ module.exports = atob.atob = atob; var fs = __webpack_require__(134); var path = __webpack_require__(4); -var define = __webpack_require__(593); -var utils = __webpack_require__(612); +var define = __webpack_require__(594); +var utils = __webpack_require__(613); /** * Expose `mixin()`. @@ -74328,19 +75817,19 @@ exports.comment = function(node) { /***/ }), -/* 632 */ +/* 633 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(604); +var use = __webpack_require__(605); var util = __webpack_require__(112); -var Cache = __webpack_require__(633); -var define = __webpack_require__(593); -var debug = __webpack_require__(606)('snapdragon:parser'); -var Position = __webpack_require__(634); -var utils = __webpack_require__(612); +var Cache = __webpack_require__(634); +var define = __webpack_require__(594); +var debug = __webpack_require__(607)('snapdragon:parser'); +var Position = __webpack_require__(635); +var utils = __webpack_require__(613); /** * Create a new `Parser` with the given `input` and `options`. @@ -74868,7 +76357,7 @@ module.exports = Parser; /***/ }), -/* 633 */ +/* 634 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74975,13 +76464,13 @@ MapCache.prototype.del = function mapDelete(key) { /***/ }), -/* 634 */ +/* 635 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var define = __webpack_require__(593); +var define = __webpack_require__(594); /** * Store position for a node @@ -74996,14 +76485,14 @@ module.exports = function Position(start, parser) { /***/ }), -/* 635 */ +/* 636 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(636); -var assignSymbols = __webpack_require__(540); +var isExtendable = __webpack_require__(637); +var assignSymbols = __webpack_require__(541); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -75063,7 +76552,7 @@ function isEnum(obj, key) { /***/ }), -/* 636 */ +/* 637 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75076,7 +76565,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(539); +var isPlainObject = __webpack_require__(540); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -75084,14 +76573,14 @@ module.exports = function isExtendable(val) { /***/ }), -/* 637 */ +/* 638 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var nanomatch = __webpack_require__(638); -var extglob = __webpack_require__(653); +var nanomatch = __webpack_require__(639); +var extglob = __webpack_require__(654); module.exports = function(snapdragon) { var compilers = snapdragon.compiler.compilers; @@ -75168,7 +76657,7 @@ function escapeExtglobs(compiler) { /***/ }), -/* 638 */ +/* 639 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75179,17 +76668,17 @@ function escapeExtglobs(compiler) { */ var util = __webpack_require__(112); -var toRegex = __webpack_require__(522); -var extend = __webpack_require__(639); +var toRegex = __webpack_require__(523); +var extend = __webpack_require__(640); /** * Local dependencies */ -var compilers = __webpack_require__(641); -var parsers = __webpack_require__(642); -var cache = __webpack_require__(645); -var utils = __webpack_require__(647); +var compilers = __webpack_require__(642); +var parsers = __webpack_require__(643); +var cache = __webpack_require__(646); +var utils = __webpack_require__(648); var MAX_LENGTH = 1024 * 64; /** @@ -76013,14 +77502,14 @@ module.exports = nanomatch; /***/ }), -/* 639 */ +/* 640 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(640); -var assignSymbols = __webpack_require__(540); +var isExtendable = __webpack_require__(641); +var assignSymbols = __webpack_require__(541); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -76080,7 +77569,7 @@ function isEnum(obj, key) { /***/ }), -/* 640 */ +/* 641 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76093,7 +77582,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(539); +var isPlainObject = __webpack_require__(540); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -76101,7 +77590,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 641 */ +/* 642 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76447,15 +77936,15 @@ module.exports = function(nanomatch, options) { /***/ }), -/* 642 */ +/* 643 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regexNot = __webpack_require__(541); -var toRegex = __webpack_require__(522); -var isOdd = __webpack_require__(643); +var regexNot = __webpack_require__(542); +var toRegex = __webpack_require__(523); +var isOdd = __webpack_require__(644); /** * Characters to use in negation regex (we want to "not" match @@ -76841,7 +78330,7 @@ module.exports.not = NOT_REGEX; /***/ }), -/* 643 */ +/* 644 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76854,7 +78343,7 @@ module.exports.not = NOT_REGEX; -var isNumber = __webpack_require__(644); +var isNumber = __webpack_require__(645); module.exports = function isOdd(i) { if (!isNumber(i)) { @@ -76868,7 +78357,7 @@ module.exports = function isOdd(i) { /***/ }), -/* 644 */ +/* 645 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76896,14 +78385,14 @@ module.exports = function isNumber(num) { /***/ }), -/* 645 */ +/* 646 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(646))(); +module.exports = new (__webpack_require__(647))(); /***/ }), -/* 646 */ +/* 647 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76916,7 +78405,7 @@ module.exports = new (__webpack_require__(646))(); -var MapCache = __webpack_require__(633); +var MapCache = __webpack_require__(634); /** * Create a new `FragmentCache` with an optional object to use for `caches`. @@ -77038,7 +78527,7 @@ exports = module.exports = FragmentCache; /***/ }), -/* 647 */ +/* 648 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77051,14 +78540,14 @@ var path = __webpack_require__(4); * Module dependencies */ -var isWindows = __webpack_require__(648)(); -var Snapdragon = __webpack_require__(565); -utils.define = __webpack_require__(649); -utils.diff = __webpack_require__(650); -utils.extend = __webpack_require__(639); -utils.pick = __webpack_require__(651); -utils.typeOf = __webpack_require__(652); -utils.unique = __webpack_require__(544); +var isWindows = __webpack_require__(649)(); +var Snapdragon = __webpack_require__(566); +utils.define = __webpack_require__(650); +utils.diff = __webpack_require__(651); +utils.extend = __webpack_require__(640); +utils.pick = __webpack_require__(652); +utils.typeOf = __webpack_require__(653); +utils.unique = __webpack_require__(545); /** * Returns true if the given value is effectively an empty string @@ -77424,7 +78913,7 @@ utils.unixify = function(options) { /***/ }), -/* 648 */ +/* 649 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! @@ -77452,7 +78941,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ /***/ }), -/* 649 */ +/* 650 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77465,8 +78954,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ -var isobject = __webpack_require__(530); -var isDescriptor = __webpack_require__(531); +var isobject = __webpack_require__(531); +var isDescriptor = __webpack_require__(532); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -77497,7 +78986,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 650 */ +/* 651 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77551,7 +79040,7 @@ function diffArray(one, two) { /***/ }), -/* 651 */ +/* 652 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77564,7 +79053,7 @@ function diffArray(one, two) { -var isObject = __webpack_require__(530); +var isObject = __webpack_require__(531); module.exports = function pick(obj, keys) { if (!isObject(obj) && typeof obj !== 'function') { @@ -77593,7 +79082,7 @@ module.exports = function pick(obj, keys) { /***/ }), -/* 652 */ +/* 653 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -77728,7 +79217,7 @@ function isBuffer(val) { /***/ }), -/* 653 */ +/* 654 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77738,18 +79227,18 @@ function isBuffer(val) { * Module dependencies */ -var extend = __webpack_require__(545); -var unique = __webpack_require__(544); -var toRegex = __webpack_require__(522); +var extend = __webpack_require__(546); +var unique = __webpack_require__(545); +var toRegex = __webpack_require__(523); /** * Local dependencies */ -var compilers = __webpack_require__(654); -var parsers = __webpack_require__(660); -var Extglob = __webpack_require__(663); -var utils = __webpack_require__(662); +var compilers = __webpack_require__(655); +var parsers = __webpack_require__(661); +var Extglob = __webpack_require__(664); +var utils = __webpack_require__(663); var MAX_LENGTH = 1024 * 64; /** @@ -78066,13 +79555,13 @@ module.exports = extglob; /***/ }), -/* 654 */ +/* 655 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(655); +var brackets = __webpack_require__(656); /** * Extglob compilers @@ -78242,7 +79731,7 @@ module.exports = function(extglob) { /***/ }), -/* 655 */ +/* 656 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78252,17 +79741,17 @@ module.exports = function(extglob) { * Local dependencies */ -var compilers = __webpack_require__(656); -var parsers = __webpack_require__(658); +var compilers = __webpack_require__(657); +var parsers = __webpack_require__(659); /** * Module dependencies */ -var debug = __webpack_require__(606)('expand-brackets'); -var extend = __webpack_require__(545); -var Snapdragon = __webpack_require__(565); -var toRegex = __webpack_require__(522); +var debug = __webpack_require__(607)('expand-brackets'); +var extend = __webpack_require__(546); +var Snapdragon = __webpack_require__(566); +var toRegex = __webpack_require__(523); /** * Parses the given POSIX character class `pattern` and returns a @@ -78460,13 +79949,13 @@ module.exports = brackets; /***/ }), -/* 656 */ +/* 657 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var posix = __webpack_require__(657); +var posix = __webpack_require__(658); module.exports = function(brackets) { brackets.compiler @@ -78554,7 +80043,7 @@ module.exports = function(brackets) { /***/ }), -/* 657 */ +/* 658 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78583,14 +80072,14 @@ module.exports = { /***/ }), -/* 658 */ +/* 659 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(659); -var define = __webpack_require__(593); +var utils = __webpack_require__(660); +var define = __webpack_require__(594); /** * Text regex @@ -78809,14 +80298,14 @@ module.exports.TEXT_REGEX = TEXT_REGEX; /***/ }), -/* 659 */ +/* 660 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var toRegex = __webpack_require__(522); -var regexNot = __webpack_require__(541); +var toRegex = __webpack_require__(523); +var regexNot = __webpack_require__(542); var cached; /** @@ -78850,15 +80339,15 @@ exports.createRegex = function(pattern, include) { /***/ }), -/* 660 */ +/* 661 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(655); -var define = __webpack_require__(661); -var utils = __webpack_require__(662); +var brackets = __webpack_require__(656); +var define = __webpack_require__(662); +var utils = __webpack_require__(663); /** * Characters to use in text regex (we want to "not" match @@ -79013,7 +80502,7 @@ module.exports = parsers; /***/ }), -/* 661 */ +/* 662 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79026,7 +80515,7 @@ module.exports = parsers; -var isDescriptor = __webpack_require__(531); +var isDescriptor = __webpack_require__(532); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -79051,14 +80540,14 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 662 */ +/* 663 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regex = __webpack_require__(541); -var Cache = __webpack_require__(646); +var regex = __webpack_require__(542); +var Cache = __webpack_require__(647); /** * Utils @@ -79127,7 +80616,7 @@ utils.createRegex = function(str) { /***/ }), -/* 663 */ +/* 664 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79137,16 +80626,16 @@ utils.createRegex = function(str) { * Module dependencies */ -var Snapdragon = __webpack_require__(565); -var define = __webpack_require__(661); -var extend = __webpack_require__(545); +var Snapdragon = __webpack_require__(566); +var define = __webpack_require__(662); +var extend = __webpack_require__(546); /** * Local dependencies */ -var compilers = __webpack_require__(654); -var parsers = __webpack_require__(660); +var compilers = __webpack_require__(655); +var parsers = __webpack_require__(661); /** * Customize Snapdragon parser and renderer @@ -79212,16 +80701,16 @@ module.exports = Extglob; /***/ }), -/* 664 */ +/* 665 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extglob = __webpack_require__(653); -var nanomatch = __webpack_require__(638); -var regexNot = __webpack_require__(541); -var toRegex = __webpack_require__(522); +var extglob = __webpack_require__(654); +var nanomatch = __webpack_require__(639); +var regexNot = __webpack_require__(542); +var toRegex = __webpack_require__(523); var not; /** @@ -79302,14 +80791,14 @@ function textRegex(pattern) { /***/ }), -/* 665 */ +/* 666 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(646))(); +module.exports = new (__webpack_require__(647))(); /***/ }), -/* 666 */ +/* 667 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79322,13 +80811,13 @@ var path = __webpack_require__(4); * Module dependencies */ -var Snapdragon = __webpack_require__(565); -utils.define = __webpack_require__(667); -utils.diff = __webpack_require__(650); -utils.extend = __webpack_require__(635); -utils.pick = __webpack_require__(651); -utils.typeOf = __webpack_require__(668); -utils.unique = __webpack_require__(544); +var Snapdragon = __webpack_require__(566); +utils.define = __webpack_require__(668); +utils.diff = __webpack_require__(651); +utils.extend = __webpack_require__(636); +utils.pick = __webpack_require__(652); +utils.typeOf = __webpack_require__(669); +utils.unique = __webpack_require__(545); /** * Returns true if the platform is windows, or `path.sep` is `\\`. @@ -79625,7 +81114,7 @@ utils.unixify = function(options) { /***/ }), -/* 667 */ +/* 668 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79638,8 +81127,8 @@ utils.unixify = function(options) { -var isobject = __webpack_require__(530); -var isDescriptor = __webpack_require__(531); +var isobject = __webpack_require__(531); +var isDescriptor = __webpack_require__(532); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -79670,7 +81159,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 668 */ +/* 669 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -79805,7 +81294,7 @@ function isBuffer(val) { /***/ }), -/* 669 */ +/* 670 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79824,9 +81313,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(670); -var reader_1 = __webpack_require__(683); -var fs_stream_1 = __webpack_require__(687); +var readdir = __webpack_require__(671); +var reader_1 = __webpack_require__(684); +var fs_stream_1 = __webpack_require__(688); var ReaderAsync = /** @class */ (function (_super) { __extends(ReaderAsync, _super); function ReaderAsync() { @@ -79887,15 +81376,15 @@ exports.default = ReaderAsync; /***/ }), -/* 670 */ +/* 671 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readdirSync = __webpack_require__(671); -const readdirAsync = __webpack_require__(679); -const readdirStream = __webpack_require__(682); +const readdirSync = __webpack_require__(672); +const readdirAsync = __webpack_require__(680); +const readdirStream = __webpack_require__(683); module.exports = exports = readdirAsyncPath; exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; @@ -79979,7 +81468,7 @@ function readdirStreamStat (dir, options) { /***/ }), -/* 671 */ +/* 672 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79987,11 +81476,11 @@ function readdirStreamStat (dir, options) { module.exports = readdirSync; -const DirectoryReader = __webpack_require__(672); +const DirectoryReader = __webpack_require__(673); let syncFacade = { - fs: __webpack_require__(677), - forEach: __webpack_require__(678), + fs: __webpack_require__(678), + forEach: __webpack_require__(679), sync: true }; @@ -80020,7 +81509,7 @@ function readdirSync (dir, options, internalOptions) { /***/ }), -/* 672 */ +/* 673 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80029,9 +81518,9 @@ function readdirSync (dir, options, internalOptions) { const Readable = __webpack_require__(138).Readable; const EventEmitter = __webpack_require__(156).EventEmitter; const path = __webpack_require__(4); -const normalizeOptions = __webpack_require__(673); -const stat = __webpack_require__(675); -const call = __webpack_require__(676); +const normalizeOptions = __webpack_require__(674); +const stat = __webpack_require__(676); +const call = __webpack_require__(677); /** * Asynchronously reads the contents of a directory and streams the results @@ -80407,14 +81896,14 @@ module.exports = DirectoryReader; /***/ }), -/* 673 */ +/* 674 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const globToRegExp = __webpack_require__(674); +const globToRegExp = __webpack_require__(675); module.exports = normalizeOptions; @@ -80591,7 +82080,7 @@ function normalizeOptions (options, internalOptions) { /***/ }), -/* 674 */ +/* 675 */ /***/ (function(module, exports) { module.exports = function (glob, opts) { @@ -80728,13 +82217,13 @@ module.exports = function (glob, opts) { /***/ }), -/* 675 */ +/* 676 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const call = __webpack_require__(676); +const call = __webpack_require__(677); module.exports = stat; @@ -80809,7 +82298,7 @@ function symlinkStat (fs, path, lstats, callback) { /***/ }), -/* 676 */ +/* 677 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80870,14 +82359,14 @@ function callOnce (fn) { /***/ }), -/* 677 */ +/* 678 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); -const call = __webpack_require__(676); +const call = __webpack_require__(677); /** * A facade around {@link fs.readdirSync} that allows it to be called @@ -80941,7 +82430,7 @@ exports.lstat = function (path, callback) { /***/ }), -/* 678 */ +/* 679 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80970,7 +82459,7 @@ function syncForEach (array, iterator, done) { /***/ }), -/* 679 */ +/* 680 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80978,12 +82467,12 @@ function syncForEach (array, iterator, done) { module.exports = readdirAsync; -const maybe = __webpack_require__(680); -const DirectoryReader = __webpack_require__(672); +const maybe = __webpack_require__(681); +const DirectoryReader = __webpack_require__(673); let asyncFacade = { fs: __webpack_require__(134), - forEach: __webpack_require__(681), + forEach: __webpack_require__(682), async: true }; @@ -81025,7 +82514,7 @@ function readdirAsync (dir, options, callback, internalOptions) { /***/ }), -/* 680 */ +/* 681 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81052,7 +82541,7 @@ module.exports = function maybe (cb, promise) { /***/ }), -/* 681 */ +/* 682 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81088,7 +82577,7 @@ function asyncForEach (array, iterator, done) { /***/ }), -/* 682 */ +/* 683 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81096,11 +82585,11 @@ function asyncForEach (array, iterator, done) { module.exports = readdirStream; -const DirectoryReader = __webpack_require__(672); +const DirectoryReader = __webpack_require__(673); let streamFacade = { fs: __webpack_require__(134), - forEach: __webpack_require__(681), + forEach: __webpack_require__(682), async: true }; @@ -81120,16 +82609,16 @@ function readdirStream (dir, options, internalOptions) { /***/ }), -/* 683 */ +/* 684 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var deep_1 = __webpack_require__(684); -var entry_1 = __webpack_require__(686); -var pathUtil = __webpack_require__(685); +var deep_1 = __webpack_require__(685); +var entry_1 = __webpack_require__(687); +var pathUtil = __webpack_require__(686); var Reader = /** @class */ (function () { function Reader(options) { this.options = options; @@ -81195,14 +82684,14 @@ exports.default = Reader; /***/ }), -/* 684 */ +/* 685 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(685); -var patternUtils = __webpack_require__(516); +var pathUtils = __webpack_require__(686); +var patternUtils = __webpack_require__(517); var DeepFilter = /** @class */ (function () { function DeepFilter(options, micromatchOptions) { this.options = options; @@ -81285,7 +82774,7 @@ exports.default = DeepFilter; /***/ }), -/* 685 */ +/* 686 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81316,14 +82805,14 @@ exports.makeAbsolute = makeAbsolute; /***/ }), -/* 686 */ +/* 687 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(685); -var patternUtils = __webpack_require__(516); +var pathUtils = __webpack_require__(686); +var patternUtils = __webpack_require__(517); var EntryFilter = /** @class */ (function () { function EntryFilter(options, micromatchOptions) { this.options = options; @@ -81408,7 +82897,7 @@ exports.default = EntryFilter; /***/ }), -/* 687 */ +/* 688 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81428,8 +82917,8 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(138); -var fsStat = __webpack_require__(688); -var fs_1 = __webpack_require__(692); +var fsStat = __webpack_require__(689); +var fs_1 = __webpack_require__(693); var FileSystemStream = /** @class */ (function (_super) { __extends(FileSystemStream, _super); function FileSystemStream() { @@ -81479,14 +82968,14 @@ exports.default = FileSystemStream; /***/ }), -/* 688 */ +/* 689 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const optionsManager = __webpack_require__(689); -const statProvider = __webpack_require__(691); +const optionsManager = __webpack_require__(690); +const statProvider = __webpack_require__(692); /** * Asynchronous API. */ @@ -81517,13 +83006,13 @@ exports.statSync = statSync; /***/ }), -/* 689 */ +/* 690 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsAdapter = __webpack_require__(690); +const fsAdapter = __webpack_require__(691); function prepare(opts) { const options = Object.assign({ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), @@ -81536,7 +83025,7 @@ exports.prepare = prepare; /***/ }), -/* 690 */ +/* 691 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81559,7 +83048,7 @@ exports.getFileSystemAdapter = getFileSystemAdapter; /***/ }), -/* 691 */ +/* 692 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81611,7 +83100,7 @@ exports.isFollowedSymlink = isFollowedSymlink; /***/ }), -/* 692 */ +/* 693 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81642,7 +83131,7 @@ exports.default = FileSystem; /***/ }), -/* 693 */ +/* 694 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81662,9 +83151,9 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(138); -var readdir = __webpack_require__(670); -var reader_1 = __webpack_require__(683); -var fs_stream_1 = __webpack_require__(687); +var readdir = __webpack_require__(671); +var reader_1 = __webpack_require__(684); +var fs_stream_1 = __webpack_require__(688); var TransformStream = /** @class */ (function (_super) { __extends(TransformStream, _super); function TransformStream(reader) { @@ -81732,7 +83221,7 @@ exports.default = ReaderStream; /***/ }), -/* 694 */ +/* 695 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81751,9 +83240,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(670); -var reader_1 = __webpack_require__(683); -var fs_sync_1 = __webpack_require__(695); +var readdir = __webpack_require__(671); +var reader_1 = __webpack_require__(684); +var fs_sync_1 = __webpack_require__(696); var ReaderSync = /** @class */ (function (_super) { __extends(ReaderSync, _super); function ReaderSync() { @@ -81813,7 +83302,7 @@ exports.default = ReaderSync; /***/ }), -/* 695 */ +/* 696 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81832,8 +83321,8 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var fsStat = __webpack_require__(688); -var fs_1 = __webpack_require__(692); +var fsStat = __webpack_require__(689); +var fs_1 = __webpack_require__(693); var FileSystemSync = /** @class */ (function (_super) { __extends(FileSystemSync, _super); function FileSystemSync() { @@ -81879,7 +83368,7 @@ exports.default = FileSystemSync; /***/ }), -/* 696 */ +/* 697 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81895,7 +83384,7 @@ exports.flatten = flatten; /***/ }), -/* 697 */ +/* 698 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81916,13 +83405,13 @@ exports.merge = merge; /***/ }), -/* 698 */ +/* 699 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const pathType = __webpack_require__(699); +const pathType = __webpack_require__(700); const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; @@ -81988,13 +83477,13 @@ module.exports.sync = (input, opts) => { /***/ }), -/* 699 */ +/* 700 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); -const pify = __webpack_require__(700); +const pify = __webpack_require__(701); function type(fn, fn2, fp) { if (typeof fp !== 'string') { @@ -82037,7 +83526,7 @@ exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 700 */ +/* 701 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82128,17 +83617,17 @@ module.exports = (obj, opts) => { /***/ }), -/* 701 */ +/* 702 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); const path = __webpack_require__(4); -const fastGlob = __webpack_require__(512); -const gitIgnore = __webpack_require__(702); -const pify = __webpack_require__(703); -const slash = __webpack_require__(704); +const fastGlob = __webpack_require__(513); +const gitIgnore = __webpack_require__(703); +const pify = __webpack_require__(704); +const slash = __webpack_require__(705); const DEFAULT_IGNORE = [ '**/node_modules/**', @@ -82236,7 +83725,7 @@ module.exports.sync = options => { /***/ }), -/* 702 */ +/* 703 */ /***/ (function(module, exports) { // A simple implementation of make-array @@ -82705,7 +84194,7 @@ module.exports = options => new IgnoreBase(options) /***/ }), -/* 703 */ +/* 704 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82780,7 +84269,7 @@ module.exports = (input, options) => { /***/ }), -/* 704 */ +/* 705 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82798,7 +84287,7 @@ module.exports = input => { /***/ }), -/* 705 */ +/* 706 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82811,7 +84300,7 @@ module.exports = input => { -var isGlob = __webpack_require__(706); +var isGlob = __webpack_require__(707); module.exports = function hasGlob(val) { if (val == null) return false; @@ -82831,7 +84320,7 @@ module.exports = function hasGlob(val) { /***/ }), -/* 706 */ +/* 707 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -82862,17 +84351,17 @@ module.exports = function isGlob(str) { /***/ }), -/* 707 */ +/* 708 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); const {constants: fsConstants} = __webpack_require__(134); -const pEvent = __webpack_require__(708); -const CpFileError = __webpack_require__(711); -const fs = __webpack_require__(713); -const ProgressEmitter = __webpack_require__(716); +const pEvent = __webpack_require__(709); +const CpFileError = __webpack_require__(712); +const fs = __webpack_require__(714); +const ProgressEmitter = __webpack_require__(717); const cpFileAsync = async (source, destination, options, progressEmitter) => { let readError; @@ -82986,12 +84475,12 @@ module.exports.sync = (source, destination, options) => { /***/ }), -/* 708 */ +/* 709 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pTimeout = __webpack_require__(709); +const pTimeout = __webpack_require__(710); const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; @@ -83282,12 +84771,12 @@ module.exports.iterator = (emitter, event, options) => { /***/ }), -/* 709 */ +/* 710 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pFinally = __webpack_require__(710); +const pFinally = __webpack_require__(711); class TimeoutError extends Error { constructor(message) { @@ -83333,7 +84822,7 @@ module.exports.TimeoutError = TimeoutError; /***/ }), -/* 710 */ +/* 711 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83355,12 +84844,12 @@ module.exports = (promise, onFinally) => { /***/ }), -/* 711 */ +/* 712 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(712); +const NestedError = __webpack_require__(713); class CpFileError extends NestedError { constructor(message, nested) { @@ -83374,7 +84863,7 @@ module.exports = CpFileError; /***/ }), -/* 712 */ +/* 713 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(112).inherits; @@ -83430,16 +84919,16 @@ module.exports = NestedError; /***/ }), -/* 713 */ +/* 714 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(112); const fs = __webpack_require__(133); -const makeDir = __webpack_require__(714); -const pEvent = __webpack_require__(708); -const CpFileError = __webpack_require__(711); +const makeDir = __webpack_require__(715); +const pEvent = __webpack_require__(709); +const CpFileError = __webpack_require__(712); const stat = promisify(fs.stat); const lstat = promisify(fs.lstat); @@ -83536,7 +85025,7 @@ exports.copyFileSync = (source, destination, flags) => { /***/ }), -/* 714 */ +/* 715 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83544,7 +85033,7 @@ exports.copyFileSync = (source, destination, flags) => { const fs = __webpack_require__(134); const path = __webpack_require__(4); const {promisify} = __webpack_require__(112); -const semver = __webpack_require__(715); +const semver = __webpack_require__(716); const useNativeRecursiveOption = semver.satisfies(process.version, '>=10.12.0'); @@ -83699,7 +85188,7 @@ module.exports.sync = (input, options) => { /***/ }), -/* 715 */ +/* 716 */ /***/ (function(module, exports) { exports = module.exports = SemVer @@ -85301,7 +86790,7 @@ function coerce (version, options) { /***/ }), -/* 716 */ +/* 717 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85342,7 +86831,7 @@ module.exports = ProgressEmitter; /***/ }), -/* 717 */ +/* 718 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85388,12 +86877,12 @@ exports.default = module.exports; /***/ }), -/* 718 */ +/* 719 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pMap = __webpack_require__(719); +const pMap = __webpack_require__(720); const pFilter = async (iterable, filterer, options) => { const values = await pMap( @@ -85410,7 +86899,7 @@ module.exports.default = pFilter; /***/ }), -/* 719 */ +/* 720 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85489,12 +86978,12 @@ module.exports.default = pMap; /***/ }), -/* 720 */ +/* 721 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(712); +const NestedError = __webpack_require__(713); class CpyError extends NestedError { constructor(message, nested) { diff --git a/src/plugins/dashboard/common/migrate_to_730_panels.ts b/src/plugins/dashboard/common/migrate_to_730_panels.ts index d870e3c87d6ab..163f4242d12e6 100644 --- a/src/plugins/dashboard/common/migrate_to_730_panels.ts +++ b/src/plugins/dashboard/common/migrate_to_730_panels.ts @@ -17,7 +17,7 @@ * under the License. */ import { i18n } from '@kbn/i18n'; -import semver from 'semver'; +import semverSatisfies from 'semver/functions/satisfies'; import uuid from 'uuid'; import { GridData, @@ -60,23 +60,23 @@ function isPre61Panel( } function is61Panel(panel: unknown | RawSavedDashboardPanel610): panel is RawSavedDashboardPanel610 { - return semver.satisfies((panel as RawSavedDashboardPanel610).version, '6.1.x'); + return semverSatisfies((panel as RawSavedDashboardPanel610).version, '6.1.x'); } function is62Panel(panel: unknown | RawSavedDashboardPanel620): panel is RawSavedDashboardPanel620 { - return semver.satisfies((panel as RawSavedDashboardPanel620).version, '6.2.x'); + return semverSatisfies((panel as RawSavedDashboardPanel620).version, '6.2.x'); } function is63Panel(panel: unknown | RawSavedDashboardPanel630): panel is RawSavedDashboardPanel630 { - return semver.satisfies((panel as RawSavedDashboardPanel630).version, '6.3.x'); + return semverSatisfies((panel as RawSavedDashboardPanel630).version, '6.3.x'); } function is640To720Panel( panel: unknown | RawSavedDashboardPanel640To720 ): panel is RawSavedDashboardPanel640To720 { return ( - semver.satisfies((panel as RawSavedDashboardPanel630).version, '>6.3') && - semver.satisfies((panel as RawSavedDashboardPanel630).version, '<7.3') + semverSatisfies((panel as RawSavedDashboardPanel630).version, '>6.3') && + semverSatisfies((panel as RawSavedDashboardPanel630).version, '<7.3') ); } diff --git a/src/plugins/dashboard/public/application/lib/migrate_app_state.ts b/src/plugins/dashboard/public/application/lib/migrate_app_state.ts index e2b32b1dbdad0..b5b96e4ced678 100644 --- a/src/plugins/dashboard/public/application/lib/migrate_app_state.ts +++ b/src/plugins/dashboard/public/application/lib/migrate_app_state.ts @@ -17,7 +17,7 @@ * under the License. */ -import semver from 'semver'; +import semverSatisfies from 'semver/functions/satisfies'; import { i18n } from '@kbn/i18n'; import { METRIC_TYPE } from '@kbn/analytics'; @@ -68,7 +68,7 @@ export function migrateAppState( usageCollection.reportUiStats('DashboardPanelVersionInUrl', METRIC_TYPE.LOADED, `${version}`); } - return semver.satisfies(version, '<7.3'); + return semverSatisfies(version, '<7.3'); }); if (panelNeedsMigration) { diff --git a/src/plugins/telemetry/common/telemetry_config/get_telemetry_opt_in.ts b/src/plugins/telemetry/common/telemetry_config/get_telemetry_opt_in.ts index 7beb5415ad7b1..14b28a1a5013e 100644 --- a/src/plugins/telemetry/common/telemetry_config/get_telemetry_opt_in.ts +++ b/src/plugins/telemetry/common/telemetry_config/get_telemetry_opt_in.ts @@ -17,7 +17,8 @@ * under the License. */ -import semver from 'semver'; +import SemVer from 'semver/classes/semver'; +import semverParse from 'semver/functions/parse'; import { TelemetrySavedObject } from './types'; interface GetTelemetryOptInConfig { @@ -80,10 +81,10 @@ export const getTelemetryOptIn: GetTelemetryOptIn = ({ return savedOptIn; }; -function parseSemver(version: string): semver.SemVer | null { +function parseSemver(version: string): SemVer | null { // semver functions both return nulls AND throw exceptions: "it depends!" try { - return semver.parse(version); + return semverParse(version); } catch (err) { return null; } diff --git a/x-pack/plugins/enterprise_search/common/version.ts b/x-pack/plugins/enterprise_search/common/version.ts index c23b05f7cdb3d..e1a990e5c4710 100644 --- a/x-pack/plugins/enterprise_search/common/version.ts +++ b/x-pack/plugins/enterprise_search/common/version.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SemVer } from 'semver'; +import SemVer from 'semver/classes/semver'; import pkg from '../../../../package.json'; export const CURRENT_VERSION = new SemVer(pkg.version as string); diff --git a/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts b/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts index b93e5d99543f6..e48d0cb61c22d 100644 --- a/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts +++ b/x-pack/plugins/fleet/common/services/is_agent_upgradeable.ts @@ -3,7 +3,8 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import semver from 'semver'; +import semverCoerce from 'semver/functions/coerce'; +import semverLt from 'semver/functions/lt'; import { Agent } from '../types'; export function isAgentUpgradeable(agent: Agent, kibanaVersion: string) { @@ -17,9 +18,9 @@ export function isAgentUpgradeable(agent: Agent, kibanaVersion: string) { if (!agent.local_metadata.elastic.agent.upgradeable) return false; // make sure versions are only the number before comparison - const agentVersionNumber = semver.coerce(agentVersion); + const agentVersionNumber = semverCoerce(agentVersion); if (!agentVersionNumber) throw new Error('agent version is invalid'); - const kibanaVersionNumber = semver.coerce(kibanaVersion); + const kibanaVersionNumber = semverCoerce(kibanaVersion); if (!kibanaVersionNumber) throw new Error('kibana version is invalid'); - return semver.lt(agentVersionNumber, kibanaVersionNumber); + return semverLt(agentVersionNumber, kibanaVersionNumber); } diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts index 6224c44a329c6..93e6609167a2e 100644 --- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts +++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts @@ -6,7 +6,7 @@ import { RequestHandler } from 'src/core/server'; import { TypeOf } from '@kbn/config-schema'; -import semver from 'semver'; +import semverCoerce from 'semver/functions/coerce'; import { AgentSOAttributes, PostAgentUpgradeResponse, @@ -122,9 +122,9 @@ export const postBulkAgentsUpgradeHandler: RequestHandler< export const checkVersionIsSame = (version: string, kibanaVersion: string) => { // get version number only in case "-SNAPSHOT" is in it - const kibanaVersionNumber = semver.coerce(kibanaVersion)?.version; + const kibanaVersionNumber = semverCoerce(kibanaVersion)?.version; if (!kibanaVersionNumber) throw new Error(`kibanaVersion ${kibanaVersionNumber} is not valid`); - const versionToUpgradeNumber = semver.coerce(version)?.version; + const versionToUpgradeNumber = semverCoerce(version)?.version; if (!versionToUpgradeNumber) throw new Error(`version to upgrade ${versionToUpgradeNumber} is not valid`); // temporarily only allow upgrading to the same version as the installed kibana version diff --git a/x-pack/plugins/fleet/server/services/agents/checkin/state_new_actions.ts b/x-pack/plugins/fleet/server/services/agents/checkin/state_new_actions.ts index aa48d8fe18e9f..59887d223371f 100644 --- a/x-pack/plugins/fleet/server/services/agents/checkin/state_new_actions.ts +++ b/x-pack/plugins/fleet/server/services/agents/checkin/state_new_actions.ts @@ -4,7 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import semver from 'semver'; +import semverParse from 'semver/functions/parse'; +import semverLt from 'semver/functions/lt'; + import { timer, from, Observable, TimeoutError, of, EMPTY } from 'rxjs'; import { omit } from 'lodash'; import { @@ -132,18 +134,14 @@ export async function createAgentActionFromPolicyAction( policyAction: AgentPolicyAction ) { // Transform the policy action for agent version <= 7.9.x for BWC - const agentVersion = semver.parse((agent.local_metadata?.elastic as any)?.agent?.version); + const agentVersion = semverParse((agent.local_metadata?.elastic as any)?.agent?.version); const agentPolicyAction: AgentPolicyAction | AgentPolicyActionV7_9 = agentVersion && - semver.lt( + semverLt( agentVersion, // A prerelease tag is added here so that agent versions with prerelease tags can be compared // correctly using `semvar` '7.10.0-SNAPSHOT', - // `@types/semvar` is out of date with the version of `semvar` we use and doesn't have a - // corresponding release version we can update the typing to :( so, the typing error is - // suppressed here even though it is supported by `semvar` - // @ts-expect-error { includePrerelease: true } ) ? { diff --git a/x-pack/plugins/fleet/server/services/agents/enroll.ts b/x-pack/plugins/fleet/server/services/agents/enroll.ts index 89ee0c70ba87c..39b757b9776ed 100644 --- a/x-pack/plugins/fleet/server/services/agents/enroll.ts +++ b/x-pack/plugins/fleet/server/services/agents/enroll.ts @@ -5,7 +5,10 @@ */ import Boom from '@hapi/boom'; -import semver from 'semver'; +import semverParse from 'semver/functions/parse'; +import semverDiff from 'semver/functions/diff'; +import semverLte from 'semver/functions/lte'; + import { SavedObjectsClientContract } from 'src/core/server'; import { AgentType, Agent, AgentSOAttributes } from '../../types'; import { savedObjectToAgent } from './saved_objects'; @@ -94,17 +97,17 @@ export function validateAgentVersion( agentVersion: string, kibanaVersion = appContextService.getKibanaVersion() ) { - const agentVersionParsed = semver.parse(agentVersion); + const agentVersionParsed = semverParse(agentVersion); if (!agentVersionParsed) { throw Boom.badRequest('Agent version not provided'); } - const kibanaVersionParsed = semver.parse(kibanaVersion); + const kibanaVersionParsed = semverParse(kibanaVersion); if (!kibanaVersionParsed) { throw Boom.badRequest('Kibana version is not set or provided'); } - const diff = semver.diff(agentVersion, kibanaVersion); + const diff = semverDiff(agentVersion, kibanaVersion); switch (diff) { // section 1) very close versions, only patch release differences - all combos should work // Agent a.b.1 < Kibana a.b.2 @@ -130,7 +133,7 @@ export function validateAgentVersion( // Agent 7.10.x > Kibana 7.9.x // Agent 8.0.x > Kibana 7.9.x default: - if (semver.lte(agentVersionParsed, kibanaVersionParsed)) return; + if (semverLte(agentVersionParsed, kibanaVersionParsed)) return; else throw Boom.badRequest( `Agent version ${agentVersion} is not compatible with Kibana version ${kibanaVersion}` diff --git a/x-pack/plugins/fleet/server/services/epm/packages/install.ts b/x-pack/plugins/fleet/server/services/epm/packages/install.ts index 023691cad1913..c471ea732b9dc 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/install.ts @@ -4,7 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import semver from 'semver'; +import semverGt from 'semver/functions/gt'; +import semverLt from 'semver/functions/lt'; import Boom from '@hapi/boom'; import { UnwrapPromise } from '@kbn/utility-types'; import { SavedObject, SavedObjectsClientContract } from 'src/core/server'; @@ -185,7 +186,7 @@ export async function upgradePackage({ latestPkg, pkgToUpgrade, }: UpgradePackageParams): Promise { - if (!installedPkg || semver.gt(latestPkg.version, installedPkg.attributes.version)) { + if (!installedPkg || semverGt(latestPkg.version, installedPkg.attributes.version)) { const pkgkey = Registry.pkgToPkgKey({ name: latestPkg.name, version: latestPkg.version, @@ -255,7 +256,7 @@ async function installPackageFromRegistry({ // let the user install if using the force flag or needing to reinstall or install a previous version due to failed update const installOutOfDateVersionOk = installType === 'reinstall' || installType === 'reupdate' || installType === 'rollback'; - if (semver.lt(pkgVersion, latestPackage.version) && !force && !installOutOfDateVersionOk) { + if (semverLt(pkgVersion, latestPackage.version) && !force && !installOutOfDateVersionOk) { throw new PackageOutdatedError(`${pkgkey} is out-of-date and cannot be installed or updated`); } diff --git a/x-pack/plugins/fleet/server/services/epm/registry/index.ts b/x-pack/plugins/fleet/server/services/epm/registry/index.ts index aef1bb75619cd..a6f42ebb96752 100644 --- a/x-pack/plugins/fleet/server/services/epm/registry/index.ts +++ b/x-pack/plugins/fleet/server/services/epm/registry/index.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ import mime from 'mime-types'; -import semver from 'semver'; +import semverValid from 'semver/functions/valid'; import { Response } from 'node-fetch'; import { URL } from 'url'; import { @@ -52,7 +52,7 @@ export function splitPkgKey(pkgkey: string): { pkgName: string; pkgVersion: stri // this will return the entire string if `indexOf` return -1 const pkgVersion = pkgkey.substr(pkgkey.indexOf('-') + 1); - if (!semver.valid(pkgVersion)) { + if (!semverValid(pkgVersion)) { throw new Error('Package key parsing failed: package version was not a valid semver'); } return { pkgName, pkgVersion }; diff --git a/x-pack/plugins/ml/common/util/job_utils.ts b/x-pack/plugins/ml/common/util/job_utils.ts index 878f5a2c71cb9..a5b854a8d59a7 100644 --- a/x-pack/plugins/ml/common/util/job_utils.ts +++ b/x-pack/plugins/ml/common/util/job_utils.ts @@ -5,8 +5,7 @@ */ import { isEmpty, isEqual, each, pick } from 'lodash'; - -import semver from 'semver'; +import semverGte from 'semver/functions/gte'; import moment, { Duration } from 'moment'; // @ts-ignore import numeral from '@elastic/numeral'; @@ -205,7 +204,7 @@ export function isModelPlotEnabled( // created with) is greater than or equal to the supplied version (e.g. '6.1.0'). export function isJobVersionGte(job: CombinedJob, version: string): boolean { const jobVersion = job.job_version ?? '0.0.0'; - return semver.gte(jobVersion, version); + return semverGte(jobVersion, version); } // Takes an ML detector 'function' and returns the corresponding ES aggregation name diff --git a/x-pack/plugins/monitoring/public/lib/logstash/pipelines.js b/x-pack/plugins/monitoring/public/lib/logstash/pipelines.js index a93cb28e07745..8f0175386526a 100644 --- a/x-pack/plugins/monitoring/public/lib/logstash/pipelines.js +++ b/x-pack/plugins/monitoring/public/lib/logstash/pipelines.js @@ -4,10 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -import semver from 'semver'; +import semverMajor from 'semver/functions/major'; import { LOGSTASH } from '../../../common/constants'; export function isPipelineMonitoringSupportedInVersion(logstashVersion) { - const major = semver.major(logstashVersion); + const major = semverMajor(logstashVersion); return major >= LOGSTASH.MAJOR_VER_REQD_FOR_PIPELINES; } diff --git a/x-pack/plugins/upgrade_assistant/common/version.ts b/x-pack/plugins/upgrade_assistant/common/version.ts index 744ec4e87a49b..231614dc38c6d 100644 --- a/x-pack/plugins/upgrade_assistant/common/version.ts +++ b/x-pack/plugins/upgrade_assistant/common/version.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { SemVer } from 'semver'; +import SemVer from 'semver/classes/semver'; import pkg from '../../../../package.json'; export const CURRENT_VERSION = new SemVer(pkg.version as string); diff --git a/x-pack/tasks/helpers/pkg.ts b/x-pack/tasks/helpers/pkg.ts index 8411ebcf7186a..c7d55f6e458c1 100644 --- a/x-pack/tasks/helpers/pkg.ts +++ b/x-pack/tasks/helpers/pkg.ts @@ -5,7 +5,7 @@ */ import Fs from 'fs'; -import semver from 'semver'; +import semverValid from 'semver/functions/valid'; interface PackageJson { name: string; @@ -28,6 +28,6 @@ if (!PKG_NAME) { throw new Error('No "name" found in package.json'); } -if (!semver.valid(PKG_VERSION)) { +if (!semverValid(PKG_VERSION)) { throw new Error(`Version is not valid semver: ${PKG_VERSION}`); } diff --git a/yarn.lock b/yarn.lock index 367dd86f39077..1b01574ba66e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5637,10 +5637,10 @@ resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.0.9.tgz#12621e55b2ef8f6c98bd17fe23fa720c6cba16bd" integrity sha512-HopIwBE7GUXsscmt/J0DhnFXLSmO04AfxT6b8HAprknwka7pqEWquWDMXxCjd+NUHK9MkCe1SDKKsMiNmCItbQ== -"@types/semver@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" - integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== +"@types/semver@^7": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" + integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== "@types/set-value@^2.0.0": version "2.0.0" From ac70807459409ac5ad53670dc777afdb698358e8 Mon Sep 17 00:00:00 2001 From: spalger Date: Sat, 14 Nov 2020 13:53:39 -0700 Subject: [PATCH 04/11] skip flaky suite (#79967) --- .../cypress/integration/timeline_template_creation.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/cypress/integration/timeline_template_creation.spec.ts b/x-pack/plugins/security_solution/cypress/integration/timeline_template_creation.spec.ts index 377b2100b36cd..74576f53242aa 100644 --- a/x-pack/plugins/security_solution/cypress/integration/timeline_template_creation.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/timeline_template_creation.spec.ts @@ -43,7 +43,8 @@ import { openTimeline } from '../tasks/timelines'; import { OVERVIEW_URL } from '../urls/navigation'; -describe('Timeline Templates', () => { +// FLAKY: https://github.com/elastic/kibana/issues/79967 +describe.skip('Timeline Templates', () => { before(() => { cy.server(); cy.route('PATCH', '**/api/timeline').as('timeline'); From bd084396f9bb7319dd8f6a5f6b4e74cb107b9318 Mon Sep 17 00:00:00 2001 From: Tyler Smalley Date: Sat, 14 Nov 2020 13:48:20 -0800 Subject: [PATCH 05/11] Skips Vega test https://github.com/elastic/kibana/issues/83385 Signed-off-by: Tyler Smalley --- src/plugins/vis_type_vega/public/vega_visualization.test.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/vis_type_vega/public/vega_visualization.test.js b/src/plugins/vis_type_vega/public/vega_visualization.test.js index 837fdf2a9aea3..a2214e139a296 100644 --- a/src/plugins/vis_type_vega/public/vega_visualization.test.js +++ b/src/plugins/vis_type_vega/public/vega_visualization.test.js @@ -100,7 +100,8 @@ describe('VegaVisualizations', () => { mockHeight.mockRestore(); }); - test('should show vegalite graph and update on resize (may fail in dev env)', async () => { + // SKIP: https://github.com/elastic/kibana/issues/83385 + test.skip('should show vegalite graph and update on resize (may fail in dev env)', async () => { let vegaVis; try { vegaVis = new VegaVisualization(domNode, jest.fn()); @@ -131,7 +132,8 @@ describe('VegaVisualizations', () => { } }); - test('should show vega graph (may fail in dev env)', async () => { + // SKIP: https://github.com/elastic/kibana/issues/83385 + test.skip('should show vega graph (may fail in dev env)', async () => { let vegaVis; try { vegaVis = new VegaVisualization(domNode, jest.fn()); From 228387cb6e3cdc35123f5a8bc40d3ad87d4f9e52 Mon Sep 17 00:00:00 2001 From: Yuliia Naumenko Date: Sun, 15 Nov 2020 09:49:17 -0800 Subject: [PATCH 06/11] [Alerting UI] Added ability to assign alert actions to resolved action group in UI (#83139) * Added ability to assign alert actions to resolved action group in UI * Added unit test * Fixed due to comments --- .../email/email_params.tsx | 12 +++- .../server_log/server_log_params.tsx | 16 ++++- .../slack/slack_params.tsx | 12 +++- .../public/application/constants/index.ts | 9 +++ .../application/lib/action_variables.test.ts | 12 ++-- .../application/lib/action_variables.ts | 12 ++-- .../action_form.test.tsx | 60 +++++++++++++++++-- .../action_connector_form/action_form.tsx | 4 +- .../action_type_form.tsx | 49 +++++++++++++-- .../sections/alert_form/alert_form.tsx | 5 +- .../triggers_actions_ui/public/types.ts | 2 +- 11 files changed, 160 insertions(+), 33 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.tsx index a91cf3e7552bc..eacdf20747fdc 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.tsx @@ -11,6 +11,7 @@ import { ActionParamsProps } from '../../../../types'; import { EmailActionParams } from '../types'; import { TextFieldWithMessageVariables } from '../../text_field_with_message_variables'; import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; +import { resolvedActionGroupMessage } from '../../../constants'; export const EmailParamsFields = ({ actionParams, @@ -28,11 +29,18 @@ export const EmailParamsFields = ({ const [addBCC, setAddBCC] = useState(false); useEffect(() => { - if (!message && defaultMessage && defaultMessage.length > 0) { + if (defaultMessage === resolvedActionGroupMessage) { + editAction('message', defaultMessage, index); + } else if ( + (!message || message === resolvedActionGroupMessage) && + defaultMessage && + defaultMessage.length > 0 + ) { editAction('message', defaultMessage, index); } + // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [defaultMessage]); return ( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.tsx index b79fa0ea94050..a3619f96a45b2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.tsx @@ -9,6 +9,7 @@ import { EuiSelect, EuiFormRow } from '@elastic/eui'; import { ActionParamsProps } from '../../../../types'; import { ServerLogActionParams } from '.././types'; import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; +import { resolvedActionGroupMessage } from '../../../constants'; export const ServerLogParamsFields: React.FunctionComponent { editAction('level', 'info', index); - if (!message && defaultMessage && defaultMessage.length > 0) { + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + if (defaultMessage === resolvedActionGroupMessage) { + editAction('message', defaultMessage, index); + } else if ( + (!message || message === resolvedActionGroupMessage) && + defaultMessage && + defaultMessage.length > 0 + ) { editAction('message', defaultMessage, index); } + // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [defaultMessage]); return ( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.tsx index 80a2f9d7709cc..d1498567218d3 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.tsx @@ -8,6 +8,7 @@ import { i18n } from '@kbn/i18n'; import { ActionParamsProps } from '../../../../types'; import { SlackActionParams } from '../types'; import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; +import { resolvedActionGroupMessage } from '../../../constants'; const SlackParamsFields: React.FunctionComponent> = ({ actionParams, @@ -19,11 +20,18 @@ const SlackParamsFields: React.FunctionComponent { const { message } = actionParams; useEffect(() => { - if (!message && defaultMessage && defaultMessage.length > 0) { + if (defaultMessage === resolvedActionGroupMessage) { + editAction('message', defaultMessage, index); + } else if ( + (!message || message === resolvedActionGroupMessage) && + defaultMessage && + defaultMessage.length > 0 + ) { editAction('message', defaultMessage, index); } + // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [defaultMessage]); return ( jest.resetAllMocks()); -describe('actionVariablesFromAlertType', () => { +describe('transformActionVariables', () => { test('should return correct variables when no state or context provided', async () => { const alertType = getAlertType({ context: [], state: [], params: [] }); - expect(actionVariablesFromAlertType(alertType)).toMatchInlineSnapshot(` + expect(transformActionVariables(alertType.actionVariables)).toMatchInlineSnapshot(` Array [ Object { "description": "The id of the alert.", @@ -48,7 +48,7 @@ describe('actionVariablesFromAlertType', () => { state: [], params: [], }); - expect(actionVariablesFromAlertType(alertType)).toMatchInlineSnapshot(` + expect(transformActionVariables(alertType.actionVariables)).toMatchInlineSnapshot(` Array [ Object { "description": "The id of the alert.", @@ -91,7 +91,7 @@ describe('actionVariablesFromAlertType', () => { ], params: [], }); - expect(actionVariablesFromAlertType(alertType)).toMatchInlineSnapshot(` + expect(transformActionVariables(alertType.actionVariables)).toMatchInlineSnapshot(` Array [ Object { "description": "The id of the alert.", @@ -137,7 +137,7 @@ describe('actionVariablesFromAlertType', () => { ], params: [{ name: 'fooP', description: 'fooP-description' }], }); - expect(actionVariablesFromAlertType(alertType)).toMatchInlineSnapshot(` + expect(transformActionVariables(alertType.actionVariables)).toMatchInlineSnapshot(` Array [ Object { "description": "The id of the alert.", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts index 8bbe34847016d..2bdec1bea0c1d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts @@ -5,14 +5,16 @@ */ import { i18n } from '@kbn/i18n'; -import { AlertType, ActionVariable } from '../../types'; +import { ActionVariable, ActionVariables } from '../../types'; // return a "flattened" list of action variables for an alertType -export function actionVariablesFromAlertType(alertType: AlertType): ActionVariable[] { +export function transformActionVariables(actionVariables: ActionVariables): ActionVariable[] { const alwaysProvidedVars = getAlwaysProvidedActionVariables(); - const contextVars = prefixKeys(alertType.actionVariables.context, 'context.'); - const paramsVars = prefixKeys(alertType.actionVariables.params, 'params.'); - const stateVars = prefixKeys(alertType.actionVariables.state, 'state.'); + const contextVars = actionVariables.context + ? prefixKeys(actionVariables.context, 'context.') + : []; + const paramsVars = prefixKeys(actionVariables.params, 'params.'); + const stateVars = prefixKeys(actionVariables.state, 'state.'); return alwaysProvidedVars.concat(contextVars, paramsVars, stateVars); } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx index c760d9128ccbd..38c9687ae581e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.test.tsx @@ -10,6 +10,7 @@ import { act } from 'react-dom/test-utils'; import { actionTypeRegistryMock } from '../../action_type_registry.mock'; import { ValidationResult, Alert, AlertAction } from '../../../types'; import ActionForm from './action_form'; +import { ResolvedActionGroup } from '../../../../../alerts/common'; jest.mock('../../lib/action_connector_api', () => ({ loadAllActions: jest.fn(), loadActionTypes: jest.fn(), @@ -217,15 +218,22 @@ describe('action_form', () => { const wrapper = mountWithIntl( { initialAlert.actions[index].id = id; }} - actionGroups={[{ id: 'default', name: 'Default' }]} + actionGroups={[ + { id: 'default', name: 'Default' }, + { id: 'resolved', name: 'Resolved' }, + ]} setActionGroupIdByIndex={(group: string, index: number) => { initialAlert.actions[index].group = group; }} @@ -346,10 +354,52 @@ describe('action_form', () => { "inputDisplay": "Default", "value": "default", }, + Object { + "data-test-subj": "addNewActionConnectorActionGroup-0-option-resolved", + "inputDisplay": "Resolved", + "value": "resolved", + }, ] `); }); + it('renders selected Resolved action group', async () => { + const wrapper = await setup([ + { + group: ResolvedActionGroup.id, + id: 'test', + actionTypeId: actionType.id, + params: { + message: '', + }, + }, + ]); + const actionOption = wrapper.find( + `[data-test-subj="${actionType.id}-ActionTypeSelectOption"]` + ); + actionOption.first().simulate('click'); + const actionGroupsSelect = wrapper.find( + `[data-test-subj="addNewActionConnectorActionGroup-0"]` + ); + expect((actionGroupsSelect.first().props() as any).options).toMatchInlineSnapshot(` + Array [ + Object { + "data-test-subj": "addNewActionConnectorActionGroup-0-option-default", + "inputDisplay": "Default", + "value": "default", + }, + Object { + "data-test-subj": "addNewActionConnectorActionGroup-0-option-resolved", + "inputDisplay": "Resolved", + "value": "resolved", + }, + ] + `); + expect(actionGroupsSelect.first().text()).toEqual( + 'Select an option: Resolved, is selectedResolved' + ); + }); + it('renders available connectors for the selected action type', async () => { const wrapper = await setup(); const actionOption = wrapper.find( diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index 3a7341afe3e07..50f5167b9e5c2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -27,7 +27,7 @@ import { ActionTypeIndex, ActionConnector, ActionType, - ActionVariable, + ActionVariables, } from '../../../types'; import { SectionLoading } from '../../components/section_loading'; import { ConnectorAddModal } from './connector_add_modal'; @@ -51,7 +51,7 @@ export interface ActionAccordionFormProps { toastNotifications: ToastsSetup; docLinks: DocLinksStart; actionTypes?: ActionType[]; - messageVariables?: ActionVariable[]; + messageVariables?: ActionVariables; defaultActionMessage?: string; setHasActionsDisabled?: (value: boolean) => void; setHasActionsWithBrokenConnector?: (value: boolean) => void; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx index 38468283b9c19..bd40d35b15b2d 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_type_form.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { Fragment, Suspense, useState } from 'react'; +import React, { Fragment, Suspense, useEffect, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import { @@ -25,10 +25,20 @@ import { EuiLoadingSpinner, EuiBadge, } from '@elastic/eui'; -import { IErrorObject, AlertAction, ActionTypeIndex, ActionConnector } from '../../../types'; +import { ResolvedActionGroup } from '../../../../../alerts/common'; +import { + IErrorObject, + AlertAction, + ActionTypeIndex, + ActionConnector, + ActionVariables, + ActionVariable, +} from '../../../types'; import { checkActionFormActionTypeEnabled } from '../../lib/check_action_type_enabled'; import { hasSaveActionsCapability } from '../../lib/capabilities'; import { ActionAccordionFormProps } from './action_form'; +import { transformActionVariables } from '../../lib/action_variables'; +import { resolvedActionGroupMessage } from '../../constants'; export type ActionTypeFormProps = { actionItem: AlertAction; @@ -88,6 +98,20 @@ export const ActionTypeForm = ({ setActionGroupIdByIndex, }: ActionTypeFormProps) => { const [isOpen, setIsOpen] = useState(true); + const [availableActionVariables, setAvailableActionVariables] = useState([]); + const [availableDefaultActionMessage, setAvailableDefaultActionMessage] = useState< + string | undefined + >(undefined); + + useEffect(() => { + setAvailableActionVariables(getAvailableActionVariables(messageVariables, actionItem.group)); + const res = + actionItem.group === ResolvedActionGroup.id + ? resolvedActionGroupMessage + : defaultActionMessage; + setAvailableDefaultActionMessage(res); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [actionItem.group]); const canSave = hasSaveActionsCapability(capabilities); const getSelectedOptions = (actionItemId: string) => { @@ -244,8 +268,8 @@ export const ActionTypeForm = ({ index={index} errors={actionParamsErrors.errors} editAction={setActionParamsProperty} - messageVariables={messageVariables} - defaultMessage={defaultActionMessage ?? undefined} + messageVariables={availableActionVariables} + defaultMessage={availableDefaultActionMessage} docLinks={docLinks} http={http} toastNotifications={toastNotifications} @@ -337,3 +361,20 @@ export const ActionTypeForm = ({ ); }; + +function getAvailableActionVariables( + actionVariables: ActionVariables | undefined, + actionGroup: string +) { + if (!actionVariables) { + return []; + } + const filteredActionVariables = + actionGroup === ResolvedActionGroup.id + ? { params: actionVariables.params, state: actionVariables.state } + : actionVariables; + + return transformActionVariables(filteredActionVariables).sort((a, b) => + a.name.toUpperCase().localeCompare(b.name.toUpperCase()) + ); +} diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_form.tsx index 213d1d7ad36df..c571520988509 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_form/alert_form.tsx @@ -40,7 +40,6 @@ import { getDurationUnitValue, } from '../../../../../alerts/common/parse_duration'; import { loadAlertTypes } from '../../lib/alert_api'; -import { actionVariablesFromAlertType } from '../../lib/action_variables'; import { AlertReducerAction } from './alert_reducer'; import { AlertTypeModel, @@ -458,9 +457,7 @@ export const AlertForm = ({ actions={alert.actions} setHasActionsDisabled={setHasActionsDisabled} setHasActionsWithBrokenConnector={setHasActionsWithBrokenConnector} - messageVariables={actionVariablesFromAlertType( - alertTypesIndex.get(alert.alertTypeId)! - ).sort((a, b) => a.name.toUpperCase().localeCompare(b.name.toUpperCase()))} + messageVariables={alertTypesIndex.get(alert.alertTypeId)!.actionVariables} defaultActionGroupId={defaultActionGroupId} actionGroups={alertTypesIndex.get(alert.alertTypeId)!.actionGroups} setActionIdByIndex={(id: string, index: number) => setActionProperty('id', id, index)} diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 1a6b68080c9a4..16c6bbc215ddc 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -133,7 +133,7 @@ export interface ActionVariable { } export interface ActionVariables { - context: ActionVariable[]; + context?: ActionVariable[]; state: ActionVariable[]; params: ActionVariable[]; } From 253495b6d76fd29f57f3a93f4eac99dd64cc88e7 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Mon, 16 Nov 2020 10:45:36 +0300 Subject: [PATCH 07/11] TSVB doesn't communicate it's index-patterns to dashboard (#82964) * TSVB doesn't communicate it's index-patterns to dashboard Closes: #81476 * useCustomSearchSource -> getUsedIndexPattern * fix CI Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../vis_type_timeseries/common/constants.ts | 1 + .../public/metrics_type.ts | 20 ++++++++++++++++++- .../create_vis_embeddable_from_object.ts | 11 ++++++++-- src/plugins/visualizations/public/vis.ts | 1 - .../public/vis_types/base_vis_type.ts | 3 +++ .../visualizations/public/vis_types/types.ts | 10 +++++++++- 6 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/plugins/vis_type_timeseries/common/constants.ts b/src/plugins/vis_type_timeseries/common/constants.ts index fc402d6ab7db5..92dfc6d522957 100644 --- a/src/plugins/vis_type_timeseries/common/constants.ts +++ b/src/plugins/vis_type_timeseries/common/constants.ts @@ -18,3 +18,4 @@ */ export const MAX_BUCKETS_SETTING = 'metrics:max_buckets'; +export const INDEXES_SEPARATOR = ','; diff --git a/src/plugins/vis_type_timeseries/public/metrics_type.ts b/src/plugins/vis_type_timeseries/public/metrics_type.ts index 682517ab1a996..01b6ea0768338 100644 --- a/src/plugins/vis_type_timeseries/public/metrics_type.ts +++ b/src/plugins/vis_type_timeseries/public/metrics_type.ts @@ -25,7 +25,9 @@ import { EditorController } from './application'; // @ts-ignore import { PANEL_TYPES } from '../common/panel_types'; import { VisEditor } from './application/components/vis_editor_lazy'; -import { VIS_EVENT_TO_TRIGGER, VisGroups } from '../../visualizations/public'; +import { VIS_EVENT_TO_TRIGGER, VisGroups, VisParams } from '../../visualizations/public'; +import { getDataStart } from './services'; +import { INDEXES_SEPARATOR } from '../common/constants'; export const metricsVisDefinition = { name: 'metrics', @@ -84,5 +86,21 @@ export const metricsVisDefinition = { return [VIS_EVENT_TO_TRIGGER.applyFilter]; }, inspectorAdapters: {}, + getUsedIndexPattern: async (params: VisParams) => { + const { indexPatterns } = getDataStart(); + const indexes: string = params.index_pattern; + + if (indexes) { + const cachedIndexes = await indexPatterns.getIdsWithTitle(); + const ids = indexes + .split(INDEXES_SEPARATOR) + .map((title) => cachedIndexes.find((i) => i.title === title)?.id) + .filter((id) => id); + + return Promise.all(ids.map((id) => indexPatterns.get(id!))); + } + + return []; + }, responseHandler: 'none', }; diff --git a/src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts b/src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts index 36f3f7d6ed22e..c064298658fff 100644 --- a/src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts +++ b/src/plugins/visualizations/public/embeddable/create_vis_embeddable_from_object.ts @@ -41,6 +41,7 @@ import { import { VisualizeEmbeddableFactoryDeps } from './visualize_embeddable_factory'; import { VISUALIZE_ENABLE_LABS_SETTING } from '../../common/constants'; import { SavedVisualizationsLoader } from '../saved_visualizations'; +import { IndexPattern } from '../../../data/public'; export const createVisEmbeddableFromObject = (deps: VisualizeEmbeddableFactoryDeps) => async ( vis: Vis, @@ -69,8 +70,14 @@ export const createVisEmbeddableFromObject = (deps: VisualizeEmbeddableFactoryDe return new DisabledLabEmbeddable(vis.title, input); } - const indexPattern = vis.data.indexPattern; - const indexPatterns = indexPattern ? [indexPattern] : []; + let indexPatterns: IndexPattern[] = []; + + if (vis.type.getUsedIndexPattern) { + indexPatterns = await vis.type.getUsedIndexPattern(vis.params); + } else if (vis.data.indexPattern) { + indexPatterns = [vis.data.indexPattern]; + } + const editable = getCapabilities().visualize.save as boolean; return new VisualizeEmbeddable( diff --git a/src/plugins/visualizations/public/vis.ts b/src/plugins/visualizations/public/vis.ts index 5c3233a8de896..cae9058071b6c 100644 --- a/src/plugins/visualizations/public/vis.ts +++ b/src/plugins/visualizations/public/vis.ts @@ -137,7 +137,6 @@ export class Vis { if (state.params || typeChanged) { this.params = this.getParams(state.params); } - if (state.data && state.data.searchSource) { this.data.searchSource = await getSearch().searchSource.create(state.data.searchSource!); this.data.indexPattern = this.data.searchSource.getField('index'); diff --git a/src/plugins/visualizations/public/vis_types/base_vis_type.ts b/src/plugins/visualizations/public/vis_types/base_vis_type.ts index 807582723172d..e52cd4d2b2d56 100644 --- a/src/plugins/visualizations/public/vis_types/base_vis_type.ts +++ b/src/plugins/visualizations/public/vis_types/base_vis_type.ts @@ -44,6 +44,7 @@ interface CommonBaseVisTypeOptions | 'editorConfig' | 'hidden' | 'stage' + | 'getUsedIndexPattern' | 'useCustomNoDataScreen' | 'visConfig' | 'group' @@ -96,6 +97,7 @@ export class BaseVisType implements VisType public readonly responseHandler; public readonly hierarchicalData; public readonly setup; + public readonly getUsedIndexPattern; public readonly useCustomNoDataScreen; public readonly inspectorAdapters; public readonly toExpressionAst; @@ -126,6 +128,7 @@ export class BaseVisType implements VisType this.responseHandler = opts.responseHandler ?? 'none'; this.setup = opts.setup; this.hierarchicalData = opts.hierarchicalData ?? false; + this.getUsedIndexPattern = opts.getUsedIndexPattern; this.useCustomNoDataScreen = opts.useCustomNoDataScreen ?? false; this.inspectorAdapters = opts.inspectorAdapters; this.toExpressionAst = opts.toExpressionAst; diff --git a/src/plugins/visualizations/public/vis_types/types.ts b/src/plugins/visualizations/public/vis_types/types.ts index ee804e5677243..6ea44dc360559 100644 --- a/src/plugins/visualizations/public/vis_types/types.ts +++ b/src/plugins/visualizations/public/vis_types/types.ts @@ -20,10 +20,11 @@ import { IconType } from '@elastic/eui'; import React from 'react'; import { Adapters } from 'src/plugins/inspector'; +import { IndexPattern } from 'src/plugins/data/public'; import { VisEditorConstructor } from 'src/plugins/visualize/public'; import { ISchemas } from 'src/plugins/vis_default_editor/public'; import { TriggerContextMapping } from '../../../ui_actions/public'; -import { Vis, VisToExpressionAst, VisualizationControllerConstructor } from '../types'; +import { Vis, VisParams, VisToExpressionAst, VisualizationControllerConstructor } from '../types'; export interface VisTypeOptions { showTimePicker: boolean; @@ -64,6 +65,13 @@ export interface VisType { * If given, it will return the supported triggers for this vis. */ readonly getSupportedTriggers?: () => Array; + + /** + * Some visualizations are created without SearchSource and may change the used indexes during the visualization configuration. + * Using this method we can rewrite the standard mechanism for getting used indexes + */ + readonly getUsedIndexPattern?: (visParams: VisParams) => IndexPattern[] | Promise; + readonly isAccessible?: boolean; readonly requestHandler?: string | unknown; readonly responseHandler?: string | unknown; From 406a568d0c08f15a8e8c80068e3d22fae0a4db39 Mon Sep 17 00:00:00 2001 From: Robert Oskamp Date: Mon, 16 Nov 2020 10:25:42 +0100 Subject: [PATCH 08/11] [ML] Add basic license test run details to ML+Transform READMEs (#83259) This PR updates the READMEs of the ml and transform plugins to include instructions how to run basic license tests. --- x-pack/plugins/ml/readme.md | 34 +++++++++++++++++++++--------- x-pack/plugins/transform/readme.md | 32 ++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/ml/readme.md b/x-pack/plugins/ml/readme.md index 0e50867e57ad6..2369f3d077037 100644 --- a/x-pack/plugins/ml/readme.md +++ b/x-pack/plugins/ml/readme.md @@ -6,7 +6,7 @@ Elastic. ## Requirements To use machine learning features, you must have a Platinum or Enterprise license -or a free 14-day trial. File Data Visualizer requires a Basic license. For more +or a free 14-day Trial. File Data Visualizer requires a Basic license. For more info, refer to [Set up machine learning features](https://www.elastic.co/guide/en/machine-learning/master/setup.html). @@ -99,23 +99,37 @@ node scripts/jest plugins/ml --verbose Before running the test server, make sure to quit all other instances of Elasticsearch. -1. From one terminal, in the x-pack directory, run: +Run the following commands from the `x-pack` directory and use separate terminals +for test server and test runner. The test server command starts an Elasticsearch +and Kibana instance that the tests will be run against. - node scripts/functional_tests_server.js --config test/functional/config.js +1. Functional UI tests with `Trial` license (default config): - This command starts an Elasticsearch and Kibana instance that the tests will be run against. + node scripts/functional_tests_server.js + node scripts/functional_test_runner.js --include-tag mlqa + + ML functional `Trial` license tests are located in `x-pack/test/functional/apps/ml`. + +1. Functional UI tests with `Basic` license: -1. In another tab, run the following command to perform API integration tests (from the x-pack directory): + node scripts/functional_tests_server.js --config test/functional_basic/config.ts + node scripts/functional_test_runner.js --config test/functional_basic/config.ts --include-tag mlqa - node scripts/functional_test_runner.js --include-tag mlqa --config test/api_integration/config + ML functional `Basic` license tests are located in `x-pack/test/functional_basic/apps/ml`. + +1. API integration tests with `Trial` license: + + node scripts/functional_tests_server.js + node scripts/functional_test_runner.js --config test/api_integration/config.ts --include-tag mlqa - ML API integration tests are located in `x-pack/test/api_integration/apis/ml`. + ML API integration `Trial` license tests are located in `x-pack/test/api_integration/apis/ml`. -1. In another tab, run the following command to perform UI functional tests (from the x-pack directory): +1. API integration tests with `Basic` license: - node scripts/functional_test_runner.js --include-tag mlqa + node scripts/functional_tests_server.js --config test/api_integration_basic/config.ts + node scripts/functional_test_runner.js --config test/api_integration_basic/config.ts --include-tag mlqa - ML functional tests are located in `x-pack/test/functional/apps/ml`. + ML API integration `Basic` license tests are located in `x-pack/test/api_integration_basic/apis/ml`. ## Shared functions diff --git a/x-pack/plugins/transform/readme.md b/x-pack/plugins/transform/readme.md index 2ee2a7b70c5f1..07500876f55c2 100644 --- a/x-pack/plugins/transform/readme.md +++ b/x-pack/plugins/transform/readme.md @@ -98,20 +98,34 @@ node scripts/jest plugins/transform --verbose Before running the test server, make sure to quit all other instances of Elasticsearch. -1. From one terminal, in the x-pack directory, run: +Run the following commands from the `x-pack` directory and use separate terminals +for test server and test runner. The test server command starts an Elasticsearch +and Kibana instance that the tests will be run against. - node scripts/functional_tests_server.js --config test/functional/config.js +1. Functional UI tests with `Trial` license (default config): - This command starts an Elasticsearch and Kibana instance that the tests will be run against. + node scripts/functional_tests_server.js + node scripts/functional_test_runner.js --include-tag transform + + Transform functional `Trial` license tests are located in `x-pack/test/functional/apps/transform`. + +1. Functional UI tests with `Basic` license: -1. In another tab, run the following command to perform API integration tests (from the x-pack directory): + node scripts/functional_tests_server.js --config test/functional_basic/config.ts + node scripts/functional_test_runner.js --config test/functional_basic/config.ts --include-tag transform - node scripts/functional_test_runner.js --include-tag transform --config test/api_integration/config + Transform functional `Basic` license tests are located in `x-pack/test/functional_basic/apps/transform`. + +1. API integration tests with `Trial` license: + + node scripts/functional_tests_server.js + node scripts/functional_test_runner.js --config test/api_integration/config.ts --include-tag transform - The transform API integration tests are located in `x-pack/test/api_integration/apis/transform`. + Transform API integration `Trial` license tests are located in `x-pack/test/api_integration/apis/transform`. -1. In another tab, run the following command to perform UI functional tests (from the x-pack directory): +1. API integration tests with `Basic` license: - node scripts/functional_test_runner.js --include-tag transform + node scripts/functional_tests_server.js --config test/api_integration_basic/config.ts + node scripts/functional_test_runner.js --config test/api_integration_basic/config.ts --include-tag transform - The transform functional tests are located in `x-pack/test/functional/apps/transform`. + Transform API integration `Basic` license tests are located in `x-pack/test/api_integration_basic/apis/ml`. From daa7cc92f46536be8f77e40c51c82c06014f895d Mon Sep 17 00:00:00 2001 From: Shahzad Date: Mon, 16 Nov 2020 11:54:19 +0100 Subject: [PATCH 09/11] [Uptime] Monitor status alert use url as instance (#81736) Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../components/alert_instances.tsx | 14 +++++- .../lib/alerts/__tests__/status_check.test.ts | 8 ++-- .../uptime/server/lib/alerts/status_check.ts | 45 +++++++++++++++---- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx index ed05d81646c4a..e0c4c663bc231 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_instances.tsx @@ -7,7 +7,7 @@ import React, { Fragment, useState } from 'react'; import moment, { Duration } from 'moment'; import { i18n } from '@kbn/i18n'; -import { EuiBasicTable, EuiHealth, EuiSpacer, EuiSwitch } from '@elastic/eui'; +import { EuiBasicTable, EuiHealth, EuiSpacer, EuiSwitch, EuiToolTip } from '@elastic/eui'; // @ts-ignore import { RIGHT_ALIGNMENT, CENTER_ALIGNMENT } from '@elastic/eui/lib/services'; import { padStart, chunk } from 'lodash'; @@ -47,6 +47,13 @@ export const alertInstancesTableColumns = ( sortable: false, truncateText: true, 'data-test-subj': 'alertInstancesTableCell-instance', + render: (value: string) => { + return ( + + {value} + + ); + }, }, { field: 'status', @@ -54,6 +61,7 @@ export const alertInstancesTableColumns = ( 'xpack.triggersActionsUI.sections.alertDetails.alertInstancesList.columns.status', { defaultMessage: 'Status' } ), + width: '100px', render: (value: AlertInstanceListItemStatus, instance: AlertInstanceListItem) => { return ( @@ -67,6 +75,7 @@ export const alertInstancesTableColumns = ( }, { field: 'start', + width: '200px', render: (value: Date | undefined, instance: AlertInstanceListItem) => { return value ? moment(value).format('D MMM YYYY @ HH:mm:ss') : ''; }, @@ -88,11 +97,13 @@ export const alertInstancesTableColumns = ( { defaultMessage: 'Duration' } ), sortable: false, + width: '100px', 'data-test-subj': 'alertInstancesTableCell-duration', }, { field: '', align: RIGHT_ALIGNMENT, + width: '60px', name: i18n.translate( 'xpack.triggersActionsUI.sections.alertDetails.alertInstancesList.columns.mute', { defaultMessage: 'Mute' } @@ -180,6 +191,7 @@ export function AlertInstances({ })} columns={alertInstancesTableColumns(onMuteAction, readOnly)} data-test-subj="alertInstancesList" + tableLayout="fixed" /> ); diff --git a/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts b/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts index ccb1e5a40ad2d..4f795e2aaf29e 100644 --- a/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts +++ b/x-pack/plugins/uptime/server/lib/alerts/__tests__/status_check.test.ts @@ -1205,10 +1205,10 @@ describe('status check alert', () => { it('creates a set of unique IDs from a list of composite unique objects', () => { expect(getUniqueIdsByLoc(downItems, availItems)).toEqual( new Set([ - 'firstharrisburg', - 'firstfairbanks', - 'secondharrisburg', - 'secondfairbanks', + 'first-harrisburg', + 'first-fairbanks', + 'second-harrisburg', + 'second-fairbanks', ]) ); }); diff --git a/x-pack/plugins/uptime/server/lib/alerts/status_check.ts b/x-pack/plugins/uptime/server/lib/alerts/status_check.ts index b1b3666b40dc6..577262c231977 100644 --- a/x-pack/plugins/uptime/server/lib/alerts/status_check.ts +++ b/x-pack/plugins/uptime/server/lib/alerts/status_check.ts @@ -31,11 +31,21 @@ import { UMServerLibs } from '../lib'; const { MONITOR_STATUS } = ACTION_GROUP_DEFINITIONS; +const getMonIdByLoc = (monitorId: string, location: string) => { + return monitorId + '-' + location; +}; + const uniqueDownMonitorIds = (items: GetMonitorStatusResult[]): Set => - items.reduce((acc, { monitorId, location }) => acc.add(monitorId + location), new Set()); + items.reduce( + (acc, { monitorId, location }) => acc.add(getMonIdByLoc(monitorId, location)), + new Set() + ); const uniqueAvailMonitorIds = (items: GetMonitorAvailabilityResult[]): Set => - items.reduce((acc, { monitorId, location }) => acc.add(monitorId + location), new Set()); + items.reduce( + (acc, { monitorId, location }) => acc.add(getMonIdByLoc(monitorId, location)), + new Set() + ); export const getUniqueIdsByLoc = ( downMonitorsByLocation: GetMonitorStatusResult[], @@ -157,6 +167,21 @@ export const getStatusMessage = ( return statusMessage + availabilityMessage; }; +const getInstanceId = (monitorInfo: Ping, monIdByLoc: string) => { + const normalizeText = (txt: string) => { + // replace url and name special characters with - + return txt.replace(/[^A-Z0-9]+/gi, '_').toLowerCase(); + }; + const urlText = normalizeText(monitorInfo.url?.full || ''); + + const monName = normalizeText(monitorInfo.monitor.name || ''); + + if (monName) { + return `${monName}_${urlText}_${monIdByLoc}`; + } + return `${urlText}_${monIdByLoc}`; +}; + export const statusCheckAlertFactory: UptimeAlertTypeFactory = (_server, libs) => uptimeAlertWrapper({ id: 'xpack.uptime.alerts.monitorStatus', @@ -290,7 +315,9 @@ export const statusCheckAlertFactory: UptimeAlertTypeFactory = (_server, libs) = for (const monitorLoc of downMonitorsByLocation) { const monitorInfo = monitorLoc.monitorInfo; - const alertInstance = alertInstanceFactory(MONITOR_STATUS.id + monitorLoc.location); + const alertInstance = alertInstanceFactory( + getInstanceId(monitorInfo, monitorLoc.location) + ); const monitorSummary = getMonitorSummary(monitorInfo); const statusMessage = getStatusMessage(monitorInfo); @@ -320,19 +347,21 @@ export const statusCheckAlertFactory: UptimeAlertTypeFactory = (_server, libs) = const mergedIdsByLoc = getUniqueIdsByLoc(downMonitorsByLocation, availabilityResults); mergedIdsByLoc.forEach((monIdByLoc) => { - const alertInstance = alertInstanceFactory(MONITOR_STATUS.id + monIdByLoc); - const availMonInfo = availabilityResults.find( - ({ monitorId, location }) => monitorId + location === monIdByLoc + ({ monitorId, location }) => getMonIdByLoc(monitorId, location) === monIdByLoc ); const downMonInfo = downMonitorsByLocation.find( - ({ monitorId, location }) => monitorId + location === monIdByLoc + ({ monitorId, location }) => getMonIdByLoc(monitorId, location) === monIdByLoc )?.monitorInfo; - const monitorSummary = getMonitorSummary(downMonInfo || availMonInfo?.monitorInfo!); + const monitorInfo = downMonInfo || availMonInfo?.monitorInfo!; + + const monitorSummary = getMonitorSummary(monitorInfo); const statusMessage = getStatusMessage(downMonInfo!, availMonInfo!, availability); + const alertInstance = alertInstanceFactory(getInstanceId(monitorInfo, monIdByLoc)); + alertInstance.replaceState({ ...updateState(state, true), ...monitorSummary, From 66def097ad56df89470455963c4c9285dfd5da8d Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Mon, 16 Nov 2020 11:54:57 +0100 Subject: [PATCH 10/11] [APM] Ensure APM jest script can run (#83398) --- x-pack/plugins/apm/jest.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/apm/jest.config.js b/x-pack/plugins/apm/jest.config.js index 5be8ad141ffd0..ffd3a39e8afd1 100644 --- a/x-pack/plugins/apm/jest.config.js +++ b/x-pack/plugins/apm/jest.config.js @@ -29,7 +29,7 @@ module.exports = { roots: [`${rootDir}/common`, `${rootDir}/public`, `${rootDir}/server`], collectCoverage: true, collectCoverageFrom: [ - ...jestConfig.collectCoverageFrom, + ...(jestConfig.collectCoverageFrom ?? []), '**/*.{js,mjs,jsx,ts,tsx}', '!**/*.stories.{js,mjs,ts,tsx}', '!**/dev_docs/**', From d1abc866d403d177531969fca1de6706ff7ac5bb Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Mon, 16 Nov 2020 12:15:35 +0100 Subject: [PATCH 11/11] Migrate `/translations` route to core (#83280) * move i18n route to core * add FTR test for endpoint --- .../server/i18n/i18n_service.test.mocks.ts | 5 ++ src/core/server/i18n/i18n_service.test.ts | 26 +++++-- src/core/server/i18n/i18n_service.ts | 8 ++- src/core/server/i18n/routes/index.ts | 25 +++++++ src/core/server/i18n/routes/translations.ts | 69 +++++++++++++++++++ src/core/server/server.ts | 6 +- src/legacy/ui/ui_render/ui_render_mixin.js | 32 --------- test/api_integration/apis/core/compression.ts | 55 +++++++++++++++ test/api_integration/apis/core/index.js | 56 --------------- test/api_integration/apis/core/index.ts | 27 ++++++++ .../api_integration/apis/core/translations.ts | 42 +++++++++++ 11 files changed, 255 insertions(+), 96 deletions(-) create mode 100644 src/core/server/i18n/routes/index.ts create mode 100644 src/core/server/i18n/routes/translations.ts create mode 100644 test/api_integration/apis/core/compression.ts delete mode 100644 test/api_integration/apis/core/index.js create mode 100644 test/api_integration/apis/core/index.ts create mode 100644 test/api_integration/apis/core/translations.ts diff --git a/src/core/server/i18n/i18n_service.test.mocks.ts b/src/core/server/i18n/i18n_service.test.mocks.ts index 23f97a1404fff..d35141ecb111f 100644 --- a/src/core/server/i18n/i18n_service.test.mocks.ts +++ b/src/core/server/i18n/i18n_service.test.mocks.ts @@ -26,3 +26,8 @@ export const initTranslationsMock = jest.fn(); jest.doMock('./init_translations', () => ({ initTranslations: initTranslationsMock, })); + +export const registerRoutesMock = jest.fn(); +jest.doMock('./routes', () => ({ + registerRoutes: registerRoutesMock, +})); diff --git a/src/core/server/i18n/i18n_service.test.ts b/src/core/server/i18n/i18n_service.test.ts index 87de39a92ab26..e9deb96ccf88b 100644 --- a/src/core/server/i18n/i18n_service.test.ts +++ b/src/core/server/i18n/i18n_service.test.ts @@ -17,13 +17,18 @@ * under the License. */ -import { getKibanaTranslationFilesMock, initTranslationsMock } from './i18n_service.test.mocks'; +import { + getKibanaTranslationFilesMock, + initTranslationsMock, + registerRoutesMock, +} from './i18n_service.test.mocks'; import { BehaviorSubject } from 'rxjs'; import { I18nService } from './i18n_service'; import { configServiceMock } from '../config/mocks'; import { mockCoreContext } from '../core_context.mock'; +import { httpServiceMock } from '../http/http_service.mock'; const getConfigService = (locale = 'en') => { const configService = configServiceMock.create(); @@ -41,6 +46,7 @@ const getConfigService = (locale = 'en') => { describe('I18nService', () => { let service: I18nService; let configService: ReturnType; + let http: ReturnType; beforeEach(() => { jest.clearAllMocks(); @@ -48,6 +54,8 @@ describe('I18nService', () => { const coreContext = mockCoreContext.create({ configService }); service = new I18nService(coreContext); + + http = httpServiceMock.createInternalSetupContract(); }); describe('#setup', () => { @@ -55,7 +63,7 @@ describe('I18nService', () => { getKibanaTranslationFilesMock.mockResolvedValue([]); const pluginPaths = ['/pathA', '/pathB']; - await service.setup({ pluginPaths }); + await service.setup({ pluginPaths, http }); expect(getKibanaTranslationFilesMock).toHaveBeenCalledTimes(1); expect(getKibanaTranslationFilesMock).toHaveBeenCalledWith('en', pluginPaths); @@ -65,17 +73,27 @@ describe('I18nService', () => { const translationFiles = ['/path/to/file', 'path/to/another/file']; getKibanaTranslationFilesMock.mockResolvedValue(translationFiles); - await service.setup({ pluginPaths: [] }); + await service.setup({ pluginPaths: [], http }); expect(initTranslationsMock).toHaveBeenCalledTimes(1); expect(initTranslationsMock).toHaveBeenCalledWith('en', translationFiles); }); + it('calls `registerRoutesMock` with the correct parameters', async () => { + await service.setup({ pluginPaths: [], http }); + + expect(registerRoutesMock).toHaveBeenCalledTimes(1); + expect(registerRoutesMock).toHaveBeenCalledWith({ + locale: 'en', + router: expect.any(Object), + }); + }); + it('returns accessors for locale and translation files', async () => { const translationFiles = ['/path/to/file', 'path/to/another/file']; getKibanaTranslationFilesMock.mockResolvedValue(translationFiles); - const { getLocale, getTranslationFiles } = await service.setup({ pluginPaths: [] }); + const { getLocale, getTranslationFiles } = await service.setup({ pluginPaths: [], http }); expect(getLocale()).toEqual('en'); expect(getTranslationFiles()).toEqual(translationFiles); diff --git a/src/core/server/i18n/i18n_service.ts b/src/core/server/i18n/i18n_service.ts index fd32dd7fdd6ef..4a609ca5e2aea 100644 --- a/src/core/server/i18n/i18n_service.ts +++ b/src/core/server/i18n/i18n_service.ts @@ -21,11 +21,14 @@ import { take } from 'rxjs/operators'; import { Logger } from '../logging'; import { IConfigService } from '../config'; import { CoreContext } from '../core_context'; +import { InternalHttpServiceSetup } from '../http'; import { config as i18nConfigDef, I18nConfigType } from './i18n_config'; import { getKibanaTranslationFiles } from './get_kibana_translation_files'; import { initTranslations } from './init_translations'; +import { registerRoutes } from './routes'; interface SetupDeps { + http: InternalHttpServiceSetup; pluginPaths: string[]; } @@ -53,7 +56,7 @@ export class I18nService { this.configService = coreContext.configService; } - public async setup({ pluginPaths }: SetupDeps): Promise { + public async setup({ pluginPaths, http }: SetupDeps): Promise { const i18nConfig = await this.configService .atPath(i18nConfigDef.path) .pipe(take(1)) @@ -67,6 +70,9 @@ export class I18nService { this.log.debug(`Using translation files: [${translationFiles.join(', ')}]`); await initTranslations(locale, translationFiles); + const router = http.createRouter(''); + registerRoutes({ router, locale }); + return { getLocale: () => locale, getTranslationFiles: () => translationFiles, diff --git a/src/core/server/i18n/routes/index.ts b/src/core/server/i18n/routes/index.ts new file mode 100644 index 0000000000000..b0cce67b0aa4d --- /dev/null +++ b/src/core/server/i18n/routes/index.ts @@ -0,0 +1,25 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you 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 { IRouter } from '../../http'; +import { registerTranslationsRoute } from './translations'; + +export const registerRoutes = ({ router, locale }: { router: IRouter; locale: string }) => { + registerTranslationsRoute(router, locale); +}; diff --git a/src/core/server/i18n/routes/translations.ts b/src/core/server/i18n/routes/translations.ts new file mode 100644 index 0000000000000..c5cc9525d54aa --- /dev/null +++ b/src/core/server/i18n/routes/translations.ts @@ -0,0 +1,69 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you 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 { createHash } from 'crypto'; +import { i18n } from '@kbn/i18n'; +import { schema } from '@kbn/config-schema'; +import { IRouter } from '../../http'; + +interface TranslationCache { + translations: string; + hash: string; +} + +export const registerTranslationsRoute = (router: IRouter, locale: string) => { + let translationCache: TranslationCache; + + router.get( + { + path: '/translations/{locale}.json', + validate: { + params: schema.object({ + locale: schema.string(), + }), + }, + options: { + authRequired: false, + }, + }, + (ctx, req, res) => { + if (req.params.locale.toLowerCase() !== locale.toLowerCase()) { + return res.notFound({ + body: `Unknown locale: ${req.params.locale}`, + }); + } + if (!translationCache) { + const translations = JSON.stringify(i18n.getTranslation()); + const hash = createHash('sha1').update(translations).digest('hex'); + translationCache = { + translations, + hash, + }; + } + return res.ok({ + headers: { + 'content-type': 'application/json', + 'cache-control': 'must-revalidate', + etag: translationCache.hash, + }, + body: translationCache.translations, + }); + } + ); +}; diff --git a/src/core/server/server.ts b/src/core/server/server.ts index 55ed88e55a9f5..0f7e8cced999c 100644 --- a/src/core/server/server.ts +++ b/src/core/server/server.ts @@ -131,9 +131,6 @@ export class Server { await ensureValidConfiguration(this.configService, legacyConfigSetup); } - // setup i18n prior to any other service, to have translations ready - const i18nServiceSetup = await this.i18n.setup({ pluginPaths }); - const contextServiceSetup = this.context.setup({ // We inject a fake "legacy plugin" with dependencies on every plugin so that legacy plugins: // 1) Can access context from any KP plugin @@ -149,6 +146,9 @@ export class Server { context: contextServiceSetup, }); + // setup i18n prior to any other service, to have translations ready + const i18nServiceSetup = await this.i18n.setup({ http: httpSetup, pluginPaths }); + const capabilitiesSetup = this.capabilities.setup({ http: httpSetup }); const elasticsearchServiceSetup = await this.elasticsearch.setup({ diff --git a/src/legacy/ui/ui_render/ui_render_mixin.js b/src/legacy/ui/ui_render/ui_render_mixin.js index a02c2fca14c18..b8e80300957ba 100644 --- a/src/legacy/ui/ui_render/ui_render_mixin.js +++ b/src/legacy/ui/ui_render/ui_render_mixin.js @@ -17,9 +17,7 @@ * under the License. */ -import { createHash } from 'crypto'; import Boom from '@hapi/boom'; -import { i18n } from '@kbn/i18n'; import * as UiSharedDeps from '@kbn/ui-shared-deps'; import { KibanaRequest } from '../../../core/server'; import { AppBootstrap } from './bootstrap'; @@ -37,36 +35,6 @@ import { getApmConfig } from '../apm'; * @param {KbnServer['config']} config */ export function uiRenderMixin(kbnServer, server, config) { - const translationsCache = { translations: null, hash: null }; - server.route({ - path: '/translations/{locale}.json', - method: 'GET', - config: { auth: false }, - handler(request, h) { - // Kibana server loads translations only for a single locale - // that is specified in `i18n.locale` config value. - const { locale } = request.params; - if (i18n.getLocale() !== locale.toLowerCase()) { - throw Boom.notFound(`Unknown locale: ${locale}`); - } - - // Stringifying thousands of labels and calculating hash on the resulting - // string can be expensive so it makes sense to do it once and cache. - if (translationsCache.translations == null) { - translationsCache.translations = JSON.stringify(i18n.getTranslation()); - translationsCache.hash = createHash('sha1') - .update(translationsCache.translations) - .digest('hex'); - } - - return h - .response(translationsCache.translations) - .header('cache-control', 'must-revalidate') - .header('content-type', 'application/json') - .etag(translationsCache.hash); - }, - }); - const authEnabled = !!server.auth.settings.default; server.route({ path: '/bootstrap.js', diff --git a/test/api_integration/apis/core/compression.ts b/test/api_integration/apis/core/compression.ts new file mode 100644 index 0000000000000..d7184e28ca3a4 --- /dev/null +++ b/test/api_integration/apis/core/compression.ts @@ -0,0 +1,55 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you 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 expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('compression', () => { + it(`uses compression when there isn't a referer`, async () => { + await supertest + .get('/app/kibana') + .set('accept-encoding', 'gzip') + .then((response) => { + expect(response.header).to.have.property('content-encoding', 'gzip'); + }); + }); + + it(`uses compression when there is a whitelisted referer`, async () => { + await supertest + .get('/app/kibana') + .set('accept-encoding', 'gzip') + .set('referer', 'https://some-host.com') + .then((response) => { + expect(response.header).to.have.property('content-encoding', 'gzip'); + }); + }); + + it(`doesn't use compression when there is a non-whitelisted referer`, async () => { + await supertest + .get('/app/kibana') + .set('accept-encoding', 'gzip') + .set('referer', 'https://other.some-host.com') + .then((response) => { + expect(response.header).not.to.have.property('content-encoding'); + }); + }); + }); +} diff --git a/test/api_integration/apis/core/index.js b/test/api_integration/apis/core/index.js deleted file mode 100644 index ab9bb8d33c2dc..0000000000000 --- a/test/api_integration/apis/core/index.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you 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 expect from '@kbn/expect'; - -export default function ({ getService }) { - const supertest = getService('supertest'); - - describe('core', () => { - describe('compression', () => { - it(`uses compression when there isn't a referer`, async () => { - await supertest - .get('/app/kibana') - .set('accept-encoding', 'gzip') - .then((response) => { - expect(response.headers).to.have.property('content-encoding', 'gzip'); - }); - }); - - it(`uses compression when there is a whitelisted referer`, async () => { - await supertest - .get('/app/kibana') - .set('accept-encoding', 'gzip') - .set('referer', 'https://some-host.com') - .then((response) => { - expect(response.headers).to.have.property('content-encoding', 'gzip'); - }); - }); - - it(`doesn't use compression when there is a non-whitelisted referer`, async () => { - await supertest - .get('/app/kibana') - .set('accept-encoding', 'gzip') - .set('referer', 'https://other.some-host.com') - .then((response) => { - expect(response.headers).not.to.have.property('content-encoding'); - }); - }); - }); - }); -} diff --git a/test/api_integration/apis/core/index.ts b/test/api_integration/apis/core/index.ts new file mode 100644 index 0000000000000..6a1d7db769df5 --- /dev/null +++ b/test/api_integration/apis/core/index.ts @@ -0,0 +1,27 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you 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 { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('core', () => { + loadTestFile(require.resolve('./compression')); + loadTestFile(require.resolve('./translations')); + }); +} diff --git a/test/api_integration/apis/core/translations.ts b/test/api_integration/apis/core/translations.ts new file mode 100644 index 0000000000000..865d3d070f39a --- /dev/null +++ b/test/api_integration/apis/core/translations.ts @@ -0,0 +1,42 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you 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 expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('translations', () => { + it(`returns the translations with the correct headers`, async () => { + await supertest.get('/translations/en.json').then((response) => { + expect(response.body.locale).to.eql('en'); + + expect(response.header).to.have.property('content-type', 'application/json; charset=utf-8'); + expect(response.header).to.have.property('cache-control', 'must-revalidate'); + expect(response.header).to.have.property('etag'); + }); + }); + + it(`returns a 404 when not using the correct locale`, async () => { + await supertest.get('/translations/foo.json').then((response) => { + expect(response.status).to.eql(404); + }); + }); + }); +}