From efa22636b5f7654b035ff59e35dca4b44b8534a3 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 08:13:46 -0700 Subject: [PATCH 1/6] [esArchiver] upgrade to new ES client --- package.json | 1 + .../src/actions/empty_kibana_index.ts | 2 +- packages/kbn-es-archiver/src/actions/load.ts | 4 +- packages/kbn-es-archiver/src/actions/save.ts | 2 +- .../kbn-es-archiver/src/actions/unload.ts | 2 +- packages/kbn-es-archiver/src/cli.ts | 7 +- packages/kbn-es-archiver/src/es_archiver.ts | 2 +- .../src/lib/docs/__mocks__/stubs.ts | 67 ---- .../docs/generate_doc_records_stream.test.ts | 269 +++++++++------ .../lib/docs/generate_doc_records_stream.ts | 41 +-- .../lib/docs/index_doc_records_stream.test.ts | 322 ++++++++++-------- .../src/lib/docs/index_doc_records_stream.ts | 39 ++- .../src/lib/indices/__mocks__/stubs.ts | 33 +- .../lib/indices/create_index_stream.test.ts | 38 ++- .../src/lib/indices/create_index_stream.ts | 7 +- .../src/lib/indices/delete_index.ts | 52 ++- .../src/lib/indices/delete_index_stream.ts | 2 +- .../generate_index_records_stream.test.ts | 4 +- .../indices/generate_index_records_stream.ts | 40 ++- .../src/lib/indices/kibana_index.ts | 89 +++-- yarn.lock | 8 + 21 files changed, 566 insertions(+), 465 deletions(-) delete mode 100644 packages/kbn-es-archiver/src/lib/docs/__mocks__/stubs.ts diff --git a/package.json b/package.json index 920e0c8ba5192..a5754e13d2a0b 100644 --- a/package.json +++ b/package.json @@ -568,6 +568,7 @@ "@welldone-software/why-did-you-render": "^5.0.0", "@yarnpkg/lockfile": "^1.1.0", "abab": "^2.0.4", + "aggregate-error": "^3.1.0", "angular-aria": "^1.8.0", "angular-mocks": "^1.7.9", "angular-recursion": "^1.0.5", diff --git a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts index 56c75c5aca419..db7c79c7dfc50 100644 --- a/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts +++ b/packages/kbn-es-archiver/src/actions/empty_kibana_index.ts @@ -6,7 +6,7 @@ * Public License, v 1. */ -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog, KbnClient } from '@kbn/dev-utils'; import { migrateKibanaIndex, createStats, cleanKibanaIndices } from '../lib'; diff --git a/packages/kbn-es-archiver/src/actions/load.ts b/packages/kbn-es-archiver/src/actions/load.ts index 8afd7d79a98f7..cf41594e3c1d0 100644 --- a/packages/kbn-es-archiver/src/actions/load.ts +++ b/packages/kbn-es-archiver/src/actions/load.ts @@ -10,7 +10,7 @@ import { resolve } from 'path'; import { createReadStream } from 'fs'; import { Readable } from 'stream'; import { ToolingLog, KbnClient } from '@kbn/dev-utils'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { createPromiseFromStreams, concatStreamProviders } from '@kbn/utils'; @@ -92,7 +92,7 @@ export async function loadAction({ await client.indices.refresh({ index: '_all', - allowNoIndices: true, + allow_no_indices: true, }); // If we affected the Kibana index, we need to ensure it's migrated... diff --git a/packages/kbn-es-archiver/src/actions/save.ts b/packages/kbn-es-archiver/src/actions/save.ts index d88871f5b4222..63b09ef8981a2 100644 --- a/packages/kbn-es-archiver/src/actions/save.ts +++ b/packages/kbn-es-archiver/src/actions/save.ts @@ -9,7 +9,7 @@ import { resolve } from 'path'; import { createWriteStream, mkdirSync } from 'fs'; import { Readable, Writable } from 'stream'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/dev-utils'; import { createListStream, createPromiseFromStreams } from '@kbn/utils'; diff --git a/packages/kbn-es-archiver/src/actions/unload.ts b/packages/kbn-es-archiver/src/actions/unload.ts index 07cbf2aec39ff..94b8387d3df02 100644 --- a/packages/kbn-es-archiver/src/actions/unload.ts +++ b/packages/kbn-es-archiver/src/actions/unload.ts @@ -9,7 +9,7 @@ import { resolve } from 'path'; import { createReadStream } from 'fs'; import { Readable, Writable } from 'stream'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog, KbnClient } from '@kbn/dev-utils'; import { createPromiseFromStreams } from '@kbn/utils'; diff --git a/packages/kbn-es-archiver/src/cli.ts b/packages/kbn-es-archiver/src/cli.ts index e3114b4e78cf4..cba2a25b9e274 100644 --- a/packages/kbn-es-archiver/src/cli.ts +++ b/packages/kbn-es-archiver/src/cli.ts @@ -19,7 +19,7 @@ import Fs from 'fs'; import { RunWithCommands, createFlagError, KbnClient, CA_CERT_PATH } from '@kbn/dev-utils'; import { readConfigFile } from '@kbn/test'; -import legacyElasticsearch from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { EsArchiver } from './es_archiver'; @@ -115,10 +115,9 @@ export function runCli() { throw createFlagError('--dir or --config must be defined'); } - const client = new legacyElasticsearch.Client({ - host: esUrl, + const client = new Client({ + node: esUrl, ssl: esCa ? { ca: esCa } : undefined, - log: flags.verbose ? 'trace' : [], }); addCleanupTask(() => client.close()); diff --git a/packages/kbn-es-archiver/src/es_archiver.ts b/packages/kbn-es-archiver/src/es_archiver.ts index f101c5d6867f1..9176de60544f6 100644 --- a/packages/kbn-es-archiver/src/es_archiver.ts +++ b/packages/kbn-es-archiver/src/es_archiver.ts @@ -6,7 +6,7 @@ * Public License, v 1. */ -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog, KbnClient } from '@kbn/dev-utils'; import { diff --git a/packages/kbn-es-archiver/src/lib/docs/__mocks__/stubs.ts b/packages/kbn-es-archiver/src/lib/docs/__mocks__/stubs.ts deleted file mode 100644 index 3cdf3e24c328b..0000000000000 --- a/packages/kbn-es-archiver/src/lib/docs/__mocks__/stubs.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * and the Server Side Public License, v 1; you may not use this file except in - * compliance with, at your election, the Elastic License or the Server Side - * Public License, v 1. - */ - -import { Client } from 'elasticsearch'; -import sinon from 'sinon'; -import Chance from 'chance'; -import { times } from 'lodash'; - -import { Stats } from '../../stats'; - -const chance = new Chance(); - -export const createStubStats = (): Stats => - ({ - indexedDoc: sinon.stub(), - archivedDoc: sinon.stub(), - } as any); - -export const createPersonDocRecords = (n: number) => - times(n, () => ({ - type: 'doc', - value: { - index: 'people', - type: 'person', - id: chance.natural(), - source: { - name: chance.name(), - birthday: chance.birthday(), - ssn: chance.ssn(), - }, - }, - })); - -type MockClient = Client & { - assertNoPendingResponses: () => void; -}; - -export const createStubClient = ( - responses: Array<(name: string, params: any) => any | Promise> = [] -): MockClient => { - const createStubClientMethod = (name: string) => - sinon.spy(async (params) => { - if (responses.length === 0) { - throw new Error(`unexpected client.${name} call`); - } - - const response = responses.shift(); - return await response!(name, params); - }); - - return { - search: createStubClientMethod('search'), - scroll: createStubClientMethod('scroll'), - bulk: createStubClientMethod('bulk'), - - assertNoPendingResponses() { - if (responses.length) { - throw new Error(`There are ${responses.length} unsent responses.`); - } - }, - } as any; -}; diff --git a/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.test.ts b/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.test.ts index e28711ad140ba..217c5aaf767ff 100644 --- a/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.test.ts @@ -6,128 +6,185 @@ * Public License, v 1. */ -import sinon from 'sinon'; -import { delay } from 'bluebird'; -import { createListStream, createPromiseFromStreams, createConcatStream } from '@kbn/utils'; +import { + createListStream, + createPromiseFromStreams, + createConcatStream, + createMapStream, + ToolingLog, +} from '@kbn/dev-utils'; import { createGenerateDocRecordsStream } from './generate_doc_records_stream'; import { Progress } from '../progress'; -import { createStubStats, createStubClient } from './__mocks__/stubs'; +import { createStats } from '../stats'; -describe('esArchiver: createGenerateDocRecordsStream()', () => { - it('scolls 1000 documents at a time', async () => { - const stats = createStubStats(); - const client = createStubClient([ - (name, params) => { - expect(name).toBe('search'); - expect(params).toHaveProperty('index', 'logstash-*'); - expect(params).toHaveProperty('size', 1000); - return { +const log = new ToolingLog(); + +it('transforms each input index to a stream of docs using scrollSearch helper', async () => { + const responses: any = { + foo: [ + { + body: { hits: { - total: 0, - hits: [], + total: 5, + hits: [ + { _index: 'foo', _type: '_doc', _id: '0', _source: {} }, + { _index: 'foo', _type: '_doc', _id: '1', _source: {} }, + { _index: 'foo', _type: '_doc', _id: '2', _source: {} }, + ], }, - }; + }, }, - ]); - - const progress = new Progress(); - await createPromiseFromStreams([ - createListStream(['logstash-*']), - createGenerateDocRecordsStream({ client, stats, progress }), - ]); - - expect(progress.getTotal()).toBe(0); - expect(progress.getComplete()).toBe(0); - }); - - it('uses a 1 minute scroll timeout', async () => { - const stats = createStubStats(); - const client = createStubClient([ - (name, params) => { - expect(name).toBe('search'); - expect(params).toHaveProperty('index', 'logstash-*'); - expect(params).toHaveProperty('scroll', '1m'); - expect(params).toHaveProperty('rest_total_hits_as_int', true); - return { + { + body: { hits: { - total: 0, - hits: [], + total: 5, + hits: [ + { _index: 'foo', _type: '_doc', _id: '3', _source: {} }, + { _index: 'foo', _type: '_doc', _id: '4', _source: {} }, + ], }, - }; + }, }, - ]); - - const progress = new Progress(); - await createPromiseFromStreams([ - createListStream(['logstash-*']), - createGenerateDocRecordsStream({ client, stats, progress }), - ]); + ], + bar: [ + { + body: { + hits: { + total: 2, + hits: [ + { _index: 'bar', _type: '_doc', _id: '0', _source: {} }, + { _index: 'bar', _type: '_doc', _id: '1', _source: {} }, + ], + }, + }, + }, + ], + }; - expect(progress.getTotal()).toBe(0); - expect(progress.getComplete()).toBe(0); - }); + const client: any = { + helpers: { + scrollSearch: jest.fn(function* ({ index }) { + while (responses[index] && responses[index].length) { + yield responses[index].shift()!; + } + }), + }, + }; - it('consumes index names and scrolls completely before continuing', async () => { - const stats = createStubStats(); - let checkpoint = Date.now(); - const client = createStubClient([ - async (name, params) => { - expect(name).toBe('search'); - expect(params).toHaveProperty('index', 'index1'); - await delay(200); - return { - _scroll_id: 'index1ScrollId', - hits: { total: 2, hits: [{ _id: 1, _index: '.kibana_foo' }] }, - }; - }, - async (name, params) => { - expect(name).toBe('scroll'); - expect(params).toHaveProperty('scrollId', 'index1ScrollId'); - expect(Date.now() - checkpoint).not.toBeLessThan(200); - checkpoint = Date.now(); - await delay(200); - return { hits: { total: 2, hits: [{ _id: 2, _index: 'foo' }] } }; - }, - async (name, params) => { - expect(name).toBe('search'); - expect(params).toHaveProperty('index', 'index2'); - expect(Date.now() - checkpoint).not.toBeLessThan(200); - checkpoint = Date.now(); - await delay(200); - return { hits: { total: 0, hits: [] } }; - }, - ]); + const stats = createStats('test', log); + const progress = new Progress(); - const progress = new Progress(); - const docRecords = await createPromiseFromStreams([ - createListStream(['index1', 'index2']), - createGenerateDocRecordsStream({ client, stats, progress }), - createConcatStream([]), - ]); + const results = await createPromiseFromStreams([ + createListStream(['bar', 'foo']), + createGenerateDocRecordsStream({ + client, + stats, + progress, + }), + createMapStream((record: any) => { + expect(record).toHaveProperty('type', 'doc'); + expect(record.value.source).toEqual({}); + expect(record.value.type).toBe('_doc'); + expect(record.value.index).toMatch(/^(foo|bar)$/); + expect(record.value.id).toMatch(/^\d+$/); + return `${record.value.index}:${record.value.id}`; + }), + createConcatStream([]), + ]); - expect(docRecords).toEqual([ - { - type: 'doc', - value: { - index: '.kibana_1', - type: undefined, - id: 1, - source: undefined, + expect(client.helpers.scrollSearch).toMatchInlineSnapshot(` + [MockFunction] { + "calls": Array [ + Array [ + Object { + "_source": "true", + "body": Object { + "query": undefined, + }, + "index": "bar", + "rest_total_hits_as_int": true, + "scroll": "1m", + "size": 1000, + }, + ], + Array [ + Object { + "_source": "true", + "body": Object { + "query": undefined, + }, + "index": "foo", + "rest_total_hits_as_int": true, + "scroll": "1m", + "size": 1000, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Object {}, + }, + Object { + "type": "return", + "value": Object {}, + }, + ], + } + `); + expect(results).toMatchInlineSnapshot(` + Array [ + "bar:0", + "bar:1", + "foo:0", + "foo:1", + "foo:2", + "foo:3", + "foo:4", + ] + `); + expect(progress).toMatchInlineSnapshot(` + Progress { + "complete": 7, + "loggingInterval": undefined, + "total": 7, + } + `); + expect(stats).toMatchInlineSnapshot(` + Object { + "bar": Object { + "archived": false, + "configDocs": Object { + "tagged": 0, + "upToDate": 0, + "upgraded": 0, }, + "created": false, + "deleted": false, + "docs": Object { + "archived": 2, + "indexed": 0, + }, + "skipped": false, + "waitForSnapshot": 0, }, - { - type: 'doc', - value: { - index: 'foo', - type: undefined, - id: 2, - source: undefined, + "foo": Object { + "archived": false, + "configDocs": Object { + "tagged": 0, + "upToDate": 0, + "upgraded": 0, + }, + "created": false, + "deleted": false, + "docs": Object { + "archived": 5, + "indexed": 0, }, + "skipped": false, + "waitForSnapshot": 0, }, - ]); - sinon.assert.calledTwice(stats.archivedDoc as any); - expect(progress.getTotal()).toBe(2); - expect(progress.getComplete()).toBe(2); - }); + } + `); }); diff --git a/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.ts b/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.ts index 7c236214fb031..a375753628e44 100644 --- a/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.ts +++ b/packages/kbn-es-archiver/src/lib/docs/generate_doc_records_stream.ts @@ -7,7 +7,7 @@ */ import { Transform } from 'stream'; -import { Client, SearchParams, SearchResponse } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { Stats } from '../stats'; import { Progress } from '../progress'; @@ -30,31 +30,26 @@ export function createGenerateDocRecordsStream({ readableObjectMode: true, async transform(index, enc, callback) { try { - let remainingHits = 0; - let resp: SearchResponse | null = null; + const interator = client.helpers.scrollSearch({ + index, + scroll: SCROLL_TIMEOUT, + size: SCROLL_SIZE, + _source: 'true', + body: { + query, + }, + rest_total_hits_as_int: true, + }); - while (!resp || remainingHits > 0) { - if (!resp) { - resp = await client.search({ - index, - scroll: SCROLL_TIMEOUT, - size: SCROLL_SIZE, - _source: true, - body: { - query, - }, - rest_total_hits_as_int: true, // not declared on SearchParams type - } as SearchParams); - remainingHits = resp.hits.total; + let remainingHits: number | null = null; + + for await (const resp of interator) { + if (remainingHits === null) { + remainingHits = resp.body.hits.total as number; progress.addToTotal(remainingHits); - } else { - resp = await client.scroll({ - scrollId: resp._scroll_id!, - scroll: SCROLL_TIMEOUT, - }); } - for (const hit of resp.hits.hits) { + for (const hit of resp.body.hits.hits) { remainingHits -= 1; stats.archivedDoc(hit._index); this.push({ @@ -70,7 +65,7 @@ export function createGenerateDocRecordsStream({ }); } - progress.addToComplete(resp.hits.hits.length); + progress.addToComplete(resp.body.hits.hits.length); } callback(undefined); diff --git a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts index b2b8d9d310ab3..b1b041421b9e9 100644 --- a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts @@ -6,170 +6,198 @@ * Public License, v 1. */ -import { delay } from 'bluebird'; -import { createListStream, createPromiseFromStreams } from '@kbn/utils'; +import { createListStream, createPromiseFromStreams, ToolingLog } from '@kbn/dev-utils'; import { Progress } from '../progress'; import { createIndexDocRecordsStream } from './index_doc_records_stream'; -import { createStubStats, createStubClient, createPersonDocRecords } from './__mocks__/stubs'; - -const recordsToBulkBody = (records: any[]) => { - return records.reduce((acc, record) => { - const { index, id, source } = record.value; - - return [...acc, { index: { _index: index, _id: id } }, source]; - }, [] as any[]); -}; - -describe('esArchiver: createIndexDocRecordsStream()', () => { - it('consumes doc records and sends to `_bulk` api', async () => { - const records = createPersonDocRecords(1); - const client = createStubClient([ - async (name, params) => { - expect(name).toBe('bulk'); - expect(params).toEqual({ - body: recordsToBulkBody(records), - requestTimeout: 120000, - }); - return { ok: true }; +import { createStats } from '../stats'; + +const log = new ToolingLog(); + +class MockClient { + helpers = { + bulk: jest.fn(), + }; +} + +const testRecords = [ + { + type: 'doc', + value: { + index: 'foo', + id: '0', + source: { + hello: 'world', }, - ]); - const stats = createStubStats(); - const progress = new Progress(); - - await createPromiseFromStreams([ - createListStream(records), - createIndexDocRecordsStream(client, stats, progress), - ]); - - client.assertNoPendingResponses(); - expect(progress.getComplete()).toBe(1); - expect(progress.getTotal()).toBe(undefined); - }); - - it('consumes multiple doc records and sends to `_bulk` api together', async () => { - const records = createPersonDocRecords(10); - const client = createStubClient([ - async (name, params) => { - expect(name).toBe('bulk'); - expect(params).toEqual({ - body: recordsToBulkBody(records.slice(0, 1)), - requestTimeout: 120000, - }); - return { ok: true }; + }, + }, + { + type: 'doc', + value: { + index: 'foo', + id: '1', + source: { + hello: 'world', }, - async (name, params) => { - expect(name).toBe('bulk'); - expect(params).toEqual({ - body: recordsToBulkBody(records.slice(1)), - requestTimeout: 120000, - }); - return { ok: true }; + }, + }, + { + type: 'doc', + value: { + index: 'foo', + id: '2', + source: { + hello: 'world', }, - ]); - const stats = createStubStats(); - const progress = new Progress(); - - await createPromiseFromStreams([ - createListStream(records), - createIndexDocRecordsStream(client, stats, progress), - ]); - - client.assertNoPendingResponses(); - expect(progress.getComplete()).toBe(10); - expect(progress.getTotal()).toBe(undefined); - }); - - it('waits until request is complete before sending more', async () => { - const records = createPersonDocRecords(10); - const stats = createStubStats(); - const start = Date.now(); - const delayMs = 1234; - const client = createStubClient([ - async (name, params) => { - expect(name).toBe('bulk'); - expect(params).toEqual({ - body: recordsToBulkBody(records.slice(0, 1)), - requestTimeout: 120000, - }); - await delay(delayMs); - return { ok: true }; + }, + }, + { + type: 'doc', + value: { + index: 'foo', + id: '3', + source: { + hello: 'world', }, - async (name, params) => { - expect(name).toBe('bulk'); - expect(params).toEqual({ - body: recordsToBulkBody(records.slice(1)), - requestTimeout: 120000, - }); - expect(Date.now() - start).not.toBeLessThan(delayMs); - return { ok: true }; + }, + }, +]; + +it('indexes documents using the bulk client helper', async () => { + const client = new MockClient(); + client.helpers.bulk.mockImplementation(async () => {}); + + const progress = new Progress(); + const stats = createStats('test', log); + + await createPromiseFromStreams([ + createListStream(testRecords), + createIndexDocRecordsStream(client as any, stats, progress), + ]); + + expect(stats).toMatchInlineSnapshot(` + Object { + "foo": Object { + "archived": false, + "configDocs": Object { + "tagged": 0, + "upToDate": 0, + "upgraded": 0, + }, + "created": false, + "deleted": false, + "docs": Object { + "archived": 0, + "indexed": 4, + }, + "skipped": false, + "waitForSnapshot": 0, }, - ]); - const progress = new Progress(); - - await createPromiseFromStreams([ - createListStream(records), - createIndexDocRecordsStream(client, stats, progress), - ]); + } + `); + expect(progress).toMatchInlineSnapshot(` + Progress { + "complete": 4, + "loggingInterval": undefined, + "total": undefined, + } + `); + expect(client.helpers.bulk).toMatchInlineSnapshot(` + [MockFunction] { + "calls": Array [ + Array [ + Object { + "datasource": Array [ + Object { + "hello": "world", + }, + ], + "onDocument": [Function], + "onDrop": [Function], + "retries": 5, + }, + ], + Array [ + Object { + "datasource": Array [ + Object { + "hello": "world", + }, + Object { + "hello": "world", + }, + Object { + "hello": "world", + }, + ], + "onDocument": [Function], + "onDrop": [Function], + "retries": 5, + }, + ], + ], + "results": Array [ + Object { + "type": "return", + "value": Promise {}, + }, + Object { + "type": "return", + "value": Promise {}, + }, + ], + } + `); +}); - client.assertNoPendingResponses(); - expect(progress.getComplete()).toBe(10); - expect(progress.getTotal()).toBe(undefined); - }); +describe('bulk helper onDocument param', () => { + it('returns index ops for each doc', async () => { + expect.assertions(testRecords.length); + + const client = new MockClient(); + client.helpers.bulk.mockImplementation(async ({ datasource, onDocument }) => { + for (const d of datasource) { + const op = onDocument(d); + expect(op).toEqual({ + index: { + _index: 'foo', + _id: expect.stringMatching(/^\d$/), + }, + }); + } + }); - it('sends a maximum of 300 documents at a time', async () => { - const records = createPersonDocRecords(301); - const stats = createStubStats(); - const client = createStubClient([ - async (name, params) => { - expect(name).toBe('bulk'); - expect(params.body.length).toEqual(1 * 2); - return { ok: true }; - }, - async (name, params) => { - expect(name).toBe('bulk'); - expect(params.body.length).toEqual(299 * 2); - return { ok: true }; - }, - async (name, params) => { - expect(name).toBe('bulk'); - expect(params.body.length).toEqual(1 * 2); - return { ok: true }; - }, - ]); + const stats = createStats('test', log); const progress = new Progress(); await createPromiseFromStreams([ - createListStream(records), - createIndexDocRecordsStream(client, stats, progress), + createListStream(testRecords), + createIndexDocRecordsStream(client as any, stats, progress), ]); - - client.assertNoPendingResponses(); - expect(progress.getComplete()).toBe(301); - expect(progress.getTotal()).toBe(undefined); }); - it('emits an error if any request fails', async () => { - const records = createPersonDocRecords(2); - const stats = createStubStats(); - const client = createStubClient([ - async () => ({ ok: true }), - async () => ({ errors: true, forcedError: true }), - ]); - const progress = new Progress(); + it('returns create ops for each doc when instructed', async () => { + expect.assertions(testRecords.length); + + const client = new MockClient(); + client.helpers.bulk.mockImplementation(async ({ datasource, onDocument }) => { + for (const d of datasource) { + const op = onDocument(d); + expect(op).toEqual({ + create: { + _index: 'foo', + _id: expect.stringMatching(/^\d$/), + }, + }); + } + }); - try { - await createPromiseFromStreams([ - createListStream(records), - createIndexDocRecordsStream(client, stats, progress), - ]); - throw new Error('expected stream to emit error'); - } catch (err) { - expect(err.message).toMatch(/"forcedError":\s*true/); - } + const stats = createStats('test', log); + const progress = new Progress(); - client.assertNoPendingResponses(); - expect(progress.getComplete()).toBe(1); - expect(progress.getTotal()).toBe(undefined); + await createPromiseFromStreams([ + createListStream(testRecords), + createIndexDocRecordsStream(client as any, stats, progress, true), + ]); }); }); diff --git a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts index 873ea881382bc..f0f467fb5be99 100644 --- a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts +++ b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts @@ -6,7 +6,8 @@ * Public License, v 1. */ -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; +import AggregateError from 'aggregate-error'; import { Writable } from 'stream'; import { Stats } from '../stats'; import { Progress } from '../progress'; @@ -18,24 +19,38 @@ export function createIndexDocRecordsStream( useCreate: boolean = false ) { async function indexDocs(docs: any[]) { - const body: any[] = []; const operation = useCreate === true ? 'create' : 'index'; - docs.forEach((doc) => { - stats.indexedDoc(doc.index); - body.push( - { + const ops = new WeakMap(); + const errors: Error[] = []; + + await client.helpers.bulk({ + retries: 5, + datasource: docs.map((doc) => { + const body = doc.source; + ops.set(body, { [operation]: { _index: doc.index, _id: doc.id, }, - }, - doc.source - ); + }); + return body; + }), + onDocument(doc) { + return ops.get(doc); + }, + onDrop(dropped) { + const dj = JSON.stringify(dropped.document); + const ej = JSON.stringify(dropped.error); + errors.push(new Error(`Failed to [${operation}]:\n doc: ${dj}\n error:${ej}`)); + }, }); - const resp = await client.bulk({ requestTimeout: 2 * 60 * 1000, body }); - if (resp.errors) { - throw new Error(`Failed to index all documents: ${JSON.stringify(resp, null, 2)}`); + if (errors.length) { + throw new AggregateError(errors); + } + + for (const doc of docs) { + stats.indexedDoc(doc.index); } } diff --git a/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts b/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts index 4d42daa71ef24..de5fbd15c1f6b 100644 --- a/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts +++ b/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts @@ -6,7 +6,7 @@ * Public License, v 1. */ -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import sinon from 'sinon'; import { ToolingLog } from '@kbn/dev-utils'; import { Stats } from '../../stats'; @@ -54,9 +54,11 @@ export const createStubDocRecord = (index: string, id: number) => ({ const createEsClientError = (errorType: string) => { const err = new Error(`ES Client Error Stub "${errorType}"`); - (err as any).body = { - error: { - type: errorType, + (err as any).meta = { + body: { + error: { + type: errorType, + }, }, }; return err; @@ -79,26 +81,25 @@ export const createStubClient = ( } return { - [index]: { - mappings: {}, - settings: {}, + body: { + [index]: { + mappings: {}, + settings: {}, + }, }, }; }), - existsAlias: sinon.spy(({ name }) => { - return Promise.resolve(aliases.hasOwnProperty(name)); - }), getAlias: sinon.spy(async ({ index, name }) => { if (index && existingIndices.indexOf(index) >= 0) { const result = indexAlias(aliases, index); - return { [index]: { aliases: result ? { [result]: {} } : {} } }; + return { body: { [index]: { aliases: result ? { [result]: {} } : {} } } }; } if (name && aliases[name]) { - return { [aliases[name]]: { aliases: { [name]: {} } } }; + return { body: { [aliases[name]]: { aliases: { [name]: {} } } } }; } - return { status: 404 }; + return { statusCode: 404 }; }), updateAliases: sinon.spy(async ({ body }) => { body.actions.forEach( @@ -110,14 +111,14 @@ export const createStubClient = ( } ); - return { ok: true }; + return { body: { ok: true } }; }), create: sinon.spy(async ({ index }) => { if (existingIndices.includes(index) || aliases.hasOwnProperty(index)) { throw createEsClientError('resource_already_exists_exception'); } else { existingIndices.push(index); - return { ok: true }; + return { body: { ok: true } }; } }), delete: sinon.spy(async ({ index }) => { @@ -131,7 +132,7 @@ export const createStubClient = ( } }); indices.forEach((ix) => existingIndices.splice(existingIndices.indexOf(ix), 1)); - return { ok: true }; + return { body: { ok: true } }; } else { throw createEsClientError('index_not_found_exception'); } diff --git a/packages/kbn-es-archiver/src/lib/indices/create_index_stream.test.ts b/packages/kbn-es-archiver/src/lib/indices/create_index_stream.test.ts index cf6a643068359..57c1efdbb7124 100644 --- a/packages/kbn-es-archiver/src/lib/indices/create_index_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/indices/create_index_stream.test.ts @@ -56,15 +56,35 @@ describe('esArchiver: createCreateIndexStream()', () => { createCreateIndexStream({ client, stats, log }), ]); - expect((client.indices.getAlias as sinon.SinonSpy).calledOnce).toBe(true); - expect((client.indices.getAlias as sinon.SinonSpy).args[0][0]).toEqual({ - name: 'existing-index', - ignore: [404], - }); - expect((client.indices.delete as sinon.SinonSpy).calledOnce).toBe(true); - expect((client.indices.delete as sinon.SinonSpy).args[0][0]).toEqual({ - index: ['actual-index'], - }); + expect((client.indices.getAlias as sinon.SinonSpy).args).toMatchInlineSnapshot(` + Array [ + Array [ + Object { + "name": Array [ + "existing-index", + ], + }, + Object { + "ignore": Array [ + 404, + ], + }, + ], + ] + `); + + expect((client.indices.delete as sinon.SinonSpy).args).toMatchInlineSnapshot(` + Array [ + Array [ + Object { + "index": Array [ + "actual-index", + ], + }, + ], + ] + `); + sinon.assert.callCount(client.indices.create as sinon.SinonSpy, 3); // one failed create because of existing }); diff --git a/packages/kbn-es-archiver/src/lib/indices/create_index_stream.ts b/packages/kbn-es-archiver/src/lib/indices/create_index_stream.ts index 362e92c5dd76b..ba70a8dc2dfb9 100644 --- a/packages/kbn-es-archiver/src/lib/indices/create_index_stream.ts +++ b/packages/kbn-es-archiver/src/lib/indices/create_index_stream.ts @@ -9,7 +9,7 @@ import { Transform, Readable } from 'stream'; import { inspect } from 'util'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/dev-utils'; import { Stats } from '../stats'; @@ -88,7 +88,10 @@ export function createCreateIndexStream({ return; } - if (err?.body?.error?.type !== 'resource_already_exists_exception' || attemptNumber >= 3) { + if ( + err?.meta?.body?.error?.type !== 'resource_already_exists_exception' || + attemptNumber >= 3 + ) { throw err; } diff --git a/packages/kbn-es-archiver/src/lib/indices/delete_index.ts b/packages/kbn-es-archiver/src/lib/indices/delete_index.ts index e42928da2566f..597db5a980de4 100644 --- a/packages/kbn-es-archiver/src/lib/indices/delete_index.ts +++ b/packages/kbn-es-archiver/src/lib/indices/delete_index.ts @@ -6,8 +6,7 @@ * Public License, v 1. */ -import { get } from 'lodash'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/dev-utils'; import { Stats } from '../stats'; @@ -17,35 +16,45 @@ const PENDING_SNAPSHOT_STATUSES = ['INIT', 'STARTED', 'WAITING']; export async function deleteIndex(options: { client: Client; stats: Stats; - index: string; + index: string | string[]; log: ToolingLog; retryIfSnapshottingCount?: number; }): Promise { - const { client, stats, index, log, retryIfSnapshottingCount = 10 } = options; + const { client, stats, log, retryIfSnapshottingCount = 10 } = options; + const indices = [options.index].flat(); const getIndicesToDelete = async () => { - const aliasInfo = await client.indices.getAlias({ name: index, ignore: [404] }); - return aliasInfo.status === 404 ? [index] : Object.keys(aliasInfo); + const resp = await client.indices.getAlias( + { + name: indices, + }, + { + ignore: [404], + } + ); + + return resp.statusCode === 404 ? indices : Object.keys(resp.body); }; try { const indicesToDelete = await getIndicesToDelete(); await client.indices.delete({ index: indicesToDelete }); - for (let i = 0; i < indicesToDelete.length; i++) { - const indexToDelete = indicesToDelete[i]; - stats.deletedIndex(indexToDelete); + for (const index of indices) { + stats.deletedIndex(index); } } catch (error) { if (retryIfSnapshottingCount > 0 && isDeleteWhileSnapshotInProgressError(error)) { - stats.waitingForInProgressSnapshot(index); - await waitForSnapshotCompletion(client, index, log); + for (const index of indices) { + stats.waitingForInProgressSnapshot(index); + } + await waitForSnapshotCompletion(client, indices, log); return await deleteIndex({ ...options, retryIfSnapshottingCount: retryIfSnapshottingCount - 1, }); } - if (get(error, 'body.error.type') !== 'index_not_found_exception') { + if (error?.meta?.body?.error?.type !== 'index_not_found_exception') { throw error; } } @@ -57,8 +66,8 @@ export async function deleteIndex(options: { * @param {Error} error * @return {Boolean} */ -export function isDeleteWhileSnapshotInProgressError(error: object) { - return get(error, 'body.error.reason', '').startsWith( +export function isDeleteWhileSnapshotInProgressError(error: any) { + return (error?.meta?.body?.error?.reason ?? '').startsWith( 'Cannot delete indices that are being snapshotted' ); } @@ -67,10 +76,16 @@ export function isDeleteWhileSnapshotInProgressError(error: object) { * Wait for the any snapshot in any repository that is * snapshotting this index to complete. */ -export async function waitForSnapshotCompletion(client: Client, index: string, log: ToolingLog) { +export async function waitForSnapshotCompletion( + client: Client, + index: string | string[], + log: ToolingLog +) { const isSnapshotPending = async (repository: string, snapshot: string) => { const { - snapshots: [status], + body: { + snapshots: [status], + }, } = await client.snapshot.status({ repository, snapshot, @@ -81,10 +96,13 @@ export async function waitForSnapshotCompletion(client: Client, index: string, l }; const getInProgressSnapshots = async (repository: string) => { - const { snapshots: inProgressSnapshots } = await client.snapshot.get({ + const { + body: { snapshots: inProgressSnapshots }, + } = await client.snapshot.get({ repository, snapshot: '_current', }); + return inProgressSnapshots; }; diff --git a/packages/kbn-es-archiver/src/lib/indices/delete_index_stream.ts b/packages/kbn-es-archiver/src/lib/indices/delete_index_stream.ts index 1b3b09afb7833..95633740032fe 100644 --- a/packages/kbn-es-archiver/src/lib/indices/delete_index_stream.ts +++ b/packages/kbn-es-archiver/src/lib/indices/delete_index_stream.ts @@ -7,7 +7,7 @@ */ import { Transform } from 'stream'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { ToolingLog } from '@kbn/dev-utils'; import { Stats } from '../stats'; diff --git a/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.test.ts b/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.test.ts index e60e6b6d4771b..a526039df45dc 100644 --- a/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.test.ts @@ -44,8 +44,8 @@ describe('esArchiver: createGenerateIndexRecordsStream()', () => { ]); const params = (client.indices.get as sinon.SinonSpy).args[0][0]; - expect(params).toHaveProperty('filterPath'); - const filters: string[] = params.filterPath; + expect(params).toHaveProperty('filter_path'); + const filters: string[] = params.filter_path; expect(filters.some((path) => path.includes('index.creation_date'))).toBe(true); expect(filters.some((path) => path.includes('index.uuid'))).toBe(true); expect(filters.some((path) => path.includes('index.version'))).toBe(true); diff --git a/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.ts b/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.ts index c1ff48e197449..2e624ef7adbad 100644 --- a/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.ts +++ b/packages/kbn-es-archiver/src/lib/indices/generate_index_records_stream.ts @@ -7,7 +7,7 @@ */ import { Transform } from 'stream'; -import { Client } from 'elasticsearch'; +import { Client } from '@elastic/elasticsearch'; import { Stats } from '../stats'; export function createGenerateIndexRecordsStream(client: Client, stats: Stats) { @@ -16,26 +16,30 @@ export function createGenerateIndexRecordsStream(client: Client, stats: Stats) { readableObjectMode: true, async transform(indexOrAlias, enc, callback) { try { - const resp = (await client.indices.get({ - index: indexOrAlias, - filterPath: [ - '*.settings', - '*.mappings', - // remove settings that aren't really settings - '-*.settings.index.creation_date', - '-*.settings.index.uuid', - '-*.settings.index.version', - '-*.settings.index.provided_name', - '-*.settings.index.frozen', - '-*.settings.index.search.throttled', - '-*.settings.index.query', - '-*.settings.index.routing', - ], - })) as Record; + const resp = ( + await client.indices.get({ + index: indexOrAlias, + filter_path: [ + '*.settings', + '*.mappings', + // remove settings that aren't really settings + '-*.settings.index.creation_date', + '-*.settings.index.uuid', + '-*.settings.index.version', + '-*.settings.index.provided_name', + '-*.settings.index.frozen', + '-*.settings.index.search.throttled', + '-*.settings.index.query', + '-*.settings.index.routing', + ], + }) + ).body as Record; for (const [index, { settings, mappings }] of Object.entries(resp)) { const { - [index]: { aliases }, + body: { + [index]: { aliases }, + }, } = await client.indices.getAlias({ index }); stats.archivedIndex(index, { settings, mappings }); diff --git a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts index 0459a4301cf6b..d370e49d0bca5 100644 --- a/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts +++ b/packages/kbn-es-archiver/src/lib/indices/kibana_index.ts @@ -6,7 +6,9 @@ * Public License, v 1. */ -import { Client, CreateDocumentParams } from 'elasticsearch'; +import { inspect } from 'util'; + +import { Client } from '@elastic/elasticsearch'; import { ToolingLog, KbnClient } from '@kbn/dev-utils'; import { Stats } from '../stats'; import { deleteIndex } from './delete_index'; @@ -57,13 +59,17 @@ export async function migrateKibanaIndex({ }) { // we allow dynamic mappings on the index, as some interceptors are accessing documents before // the migration is actually performed. The migrator will put the value back to `strict` after migration. - await client.indices.putMapping({ - index: '.kibana', - body: { - dynamic: true, + await client.indices.putMapping( + { + index: '.kibana', + body: { + dynamic: true, + }, }, - ignore: [404], - } as any); + { + ignore: [404], + } + ); await kbnClient.savedObjects.migrate(); } @@ -75,9 +81,14 @@ export async function migrateKibanaIndex({ * index (e.g. we don't want to remove .kibana_task_manager or the like). */ async function fetchKibanaIndices(client: Client) { - const kibanaIndices = await client.cat.indices({ index: '.kibana*', format: 'json' }); + const resp = await client.cat.indices({ index: '.kibana*', format: 'json' }); const isKibanaIndex = (index: string) => /^\.kibana(:?_\d*)?$/.test(index); - return kibanaIndices.map((x: { index: string }) => x.index).filter(isKibanaIndex); + + if (!Array.isArray(resp.body)) { + throw new Error(`expected response to be an array ${inspect(resp.body)}`); + } + + return resp.body.map((x: { index: string }) => x.index).filter(isKibanaIndex); } const delay = (delayInMs: number) => new Promise((resolve) => setTimeout(resolve, delayInMs)); @@ -102,27 +113,31 @@ export async function cleanKibanaIndices({ } while (true) { - const resp = await client.deleteByQuery({ - index: `.kibana`, - body: { - query: { - bool: { - must_not: { - ids: { - values: ['space:default'], + const resp = await client.deleteByQuery( + { + index: `.kibana`, + body: { + query: { + bool: { + must_not: { + ids: { + values: ['space:default'], + }, }, }, }, }, }, - ignore: [409], - }); + { + ignore: [409], + } + ); - if (resp.total !== resp.deleted) { + if (resp.body.total !== resp.body.deleted) { log.warning( 'delete by query deleted %d of %d total documents, trying again', - resp.deleted, - resp.total + resp.body.deleted, + resp.body.total ); await delay(200); continue; @@ -140,19 +155,23 @@ export async function cleanKibanaIndices({ } export async function createDefaultSpace({ index, client }: { index: string; client: Client }) { - await client.create({ - index, - id: 'space:default', - ignore: 409, - body: { - type: 'space', - updated_at: new Date().toISOString(), - space: { - name: 'Default Space', - description: 'This is the default space', - disabledFeatures: [], - _reserved: true, + await client.create( + { + index, + id: 'space:default', + body: { + type: 'space', + updated_at: new Date().toISOString(), + space: { + name: 'Default Space', + description: 'This is the default space', + disabledFeatures: [], + _reserved: true, + }, }, }, - } as CreateDocumentParams); + { + ignore: [409], + } + ); } diff --git a/yarn.lock b/yarn.lock index 1b8cc2f8dc6e2..6c882f02d252b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7355,6 +7355,14 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +aggregate-error@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + airbnb-js-shims@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" From f7245c97e7c69fc91c21ab8ab2f6e3a0e92eb1be Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 08:17:26 -0700 Subject: [PATCH 2/6] [ftr] pass new client to esArchiver service --- test/common/services/es_archiver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/common/services/es_archiver.ts b/test/common/services/es_archiver.ts index e1b85ddf8bc9d..e6d4a8a56af29 100644 --- a/test/common/services/es_archiver.ts +++ b/test/common/services/es_archiver.ts @@ -14,7 +14,7 @@ import * as KibanaServer from './kibana_server'; export function EsArchiverProvider({ getService }: FtrProviderContext): EsArchiver { const config = getService('config'); - const client = getService('legacyEs'); + const client = getService('es'); const log = getService('log'); const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); From 9e148bd9ae2b62d3292bb07d85e007732cc62f07 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 08:32:59 -0700 Subject: [PATCH 3/6] test aggregate error usage --- .../lib/docs/index_doc_records_stream.test.ts | 50 +++++++++++++++++++ .../src/lib/docs/index_doc_records_stream.ts | 4 +- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts index b1b041421b9e9..14ada6c882d50 100644 --- a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts @@ -201,3 +201,53 @@ describe('bulk helper onDocument param', () => { ]); }); }); + +describe('bulk helper onDrop param', () => { + it('throws an error reporting any docs which failed all retry attempts', async () => { + const client = new MockClient(); + let counter = -1; + client.helpers.bulk.mockImplementation(async ({ datasource, onDrop }) => { + for (const d of datasource) { + counter++; + if (counter > 0) { + onDrop({ + document: d, + error: { + reason: `${counter} conflicts with something`, + }, + }); + } + } + }); + + const stats = createStats('test', log); + const progress = new Progress(); + + const promise = createPromiseFromStreams([ + createListStream(testRecords), + createIndexDocRecordsStream(client as any, stats, progress), + ]); + + await expect(promise).rejects.toThrowErrorMatchingInlineSnapshot(` + " + Error: Bulk doc failure [operation=index]: + doc: {\\"hello\\":\\"world\\"} + error: {\\"reason\\":\\"1 conflicts with something\\"} + at Array.map () + at indexDocs (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:49:13) + at Writable.writev [as _writev] (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:73:9) + Error: Bulk doc failure [operation=index]: + doc: {\\"hello\\":\\"world\\"} + error: {\\"reason\\":\\"2 conflicts with something\\"} + at Array.map () + at indexDocs (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:49:13) + at Writable.writev [as _writev] (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:73:9) + Error: Bulk doc failure [operation=index]: + doc: {\\"hello\\":\\"world\\"} + error: {\\"reason\\":\\"3 conflicts with something\\"} + at Array.map () + at indexDocs (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:49:13) + at Writable.writev [as _writev] (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:73:9)" + `); + }); +}); diff --git a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts index f0f467fb5be99..75e96fbbc9229 100644 --- a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts +++ b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts @@ -21,7 +21,7 @@ export function createIndexDocRecordsStream( async function indexDocs(docs: any[]) { const operation = useCreate === true ? 'create' : 'index'; const ops = new WeakMap(); - const errors: Error[] = []; + const errors: string[] = []; await client.helpers.bulk({ retries: 5, @@ -41,7 +41,7 @@ export function createIndexDocRecordsStream( onDrop(dropped) { const dj = JSON.stringify(dropped.document); const ej = JSON.stringify(dropped.error); - errors.push(new Error(`Failed to [${operation}]:\n doc: ${dj}\n error:${ej}`)); + errors.push(`Bulk doc failure [operation=${operation}]:\n doc: ${dj}\n error: ${ej}`); }, }); From 345cd5d6832bd66f2a30b84d9371d6a80be0717b Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 08:39:18 -0700 Subject: [PATCH 4/6] update kbn/pm dist --- packages/kbn-pm/dist/index.js | 1232 ++++++++++++++++++--------------- 1 file changed, 664 insertions(+), 568 deletions(-) diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index df04965cd8c32..57ce2cf0bf1f9 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -59473,12 +59473,12 @@ const path = __webpack_require__(4); const os = __webpack_require__(121); const pMap = __webpack_require__(515); const arrify = __webpack_require__(510); -const globby = __webpack_require__(516); -const hasGlob = __webpack_require__(712); -const cpFile = __webpack_require__(714); -const junk = __webpack_require__(724); -const pFilter = __webpack_require__(725); -const CpyError = __webpack_require__(727); +const globby = __webpack_require__(518); +const hasGlob = __webpack_require__(714); +const cpFile = __webpack_require__(716); +const junk = __webpack_require__(726); +const pFilter = __webpack_require__(727); +const CpyError = __webpack_require__(729); const defaultOptions = { ignoreJunk: true @@ -59634,7 +59634,7 @@ module.exports = (source, destination, { "use strict"; -const AggregateError = __webpack_require__(242); +const AggregateError = __webpack_require__(516); module.exports = async ( iterable, @@ -59722,12 +59722,108 @@ module.exports = async ( "use strict"; +const indentString = __webpack_require__(517); +const cleanStack = __webpack_require__(244); + +const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); + +class AggregateError extends Error { + constructor(errors) { + if (!Array.isArray(errors)) { + throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); + } + + errors = [...errors].map(error => { + if (error instanceof Error) { + return error; + } + + if (error !== null && typeof error === 'object') { + // Handle plain error objects with message property and/or possibly other metadata + return Object.assign(new Error(error.message), error); + } + + return new Error(error); + }); + + let message = errors + .map(error => { + // The `stack` property is not standardized, so we can't assume it exists + return typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error); + }) + .join('\n'); + message = '\n' + indentString(message, 4); + super(message); + + this.name = 'AggregateError'; + + Object.defineProperty(this, '_errors', {value: errors}); + } + + * [Symbol.iterator]() { + for (const error of this._errors) { + yield error; + } + } +} + +module.exports = AggregateError; + + +/***/ }), +/* 517 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = (string, count = 1, options) => { + options = { + indent: ' ', + includeEmptyLines: false, + ...options + }; + + if (typeof string !== 'string') { + throw new TypeError( + `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` + ); + } + + if (typeof count !== 'number') { + throw new TypeError( + `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` + ); + } + + if (typeof options.indent !== 'string') { + throw new TypeError( + `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` + ); + } + + if (count === 0) { + return string; + } + + const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + + return string.replace(regex, options.indent.repeat(count)); +}; + + +/***/ }), +/* 518 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + const fs = __webpack_require__(134); -const arrayUnion = __webpack_require__(517); +const arrayUnion = __webpack_require__(519); const glob = __webpack_require__(147); -const fastGlob = __webpack_require__(519); -const dirGlob = __webpack_require__(705); -const gitignore = __webpack_require__(708); +const fastGlob = __webpack_require__(521); +const dirGlob = __webpack_require__(707); +const gitignore = __webpack_require__(710); const DEFAULT_FILTER = () => false; @@ -59872,12 +59968,12 @@ module.exports.gitignore = gitignore; /***/ }), -/* 517 */ +/* 519 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var arrayUniq = __webpack_require__(518); +var arrayUniq = __webpack_require__(520); module.exports = function () { return arrayUniq([].concat.apply([], arguments)); @@ -59885,7 +59981,7 @@ module.exports = function () { /***/ }), -/* 518 */ +/* 520 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59954,10 +60050,10 @@ if ('Set' in global) { /***/ }), -/* 519 */ +/* 521 */ /***/ (function(module, exports, __webpack_require__) { -const pkg = __webpack_require__(520); +const pkg = __webpack_require__(522); module.exports = pkg.async; module.exports.default = pkg.async; @@ -59970,19 +60066,19 @@ module.exports.generateTasks = pkg.generateTasks; /***/ }), -/* 520 */ +/* 522 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var optionsManager = __webpack_require__(521); -var taskManager = __webpack_require__(522); -var reader_async_1 = __webpack_require__(676); -var reader_stream_1 = __webpack_require__(700); -var reader_sync_1 = __webpack_require__(701); -var arrayUtils = __webpack_require__(703); -var streamUtils = __webpack_require__(704); +var optionsManager = __webpack_require__(523); +var taskManager = __webpack_require__(524); +var reader_async_1 = __webpack_require__(678); +var reader_stream_1 = __webpack_require__(702); +var reader_sync_1 = __webpack_require__(703); +var arrayUtils = __webpack_require__(705); +var streamUtils = __webpack_require__(706); /** * Synchronous API. */ @@ -60048,7 +60144,7 @@ function isString(source) { /***/ }), -/* 521 */ +/* 523 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60086,13 +60182,13 @@ exports.prepare = prepare; /***/ }), -/* 522 */ +/* 524 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var patternUtils = __webpack_require__(523); +var patternUtils = __webpack_require__(525); /** * Generate tasks based on parent directory of each pattern. */ @@ -60183,16 +60279,16 @@ exports.convertPatternGroupToTask = convertPatternGroupToTask; /***/ }), -/* 523 */ +/* 525 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var globParent = __webpack_require__(524); +var globParent = __webpack_require__(526); var isGlob = __webpack_require__(172); -var micromatch = __webpack_require__(527); +var micromatch = __webpack_require__(529); var GLOBSTAR = '**'; /** * Return true for static pattern. @@ -60338,15 +60434,15 @@ exports.matchAny = matchAny; /***/ }), -/* 524 */ +/* 526 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var path = __webpack_require__(4); -var isglob = __webpack_require__(525); -var pathDirname = __webpack_require__(526); +var isglob = __webpack_require__(527); +var pathDirname = __webpack_require__(528); var isWin32 = __webpack_require__(121).platform() === 'win32'; module.exports = function globParent(str) { @@ -60369,7 +60465,7 @@ module.exports = function globParent(str) { /***/ }), -/* 525 */ +/* 527 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -60400,7 +60496,7 @@ module.exports = function isGlob(str) { /***/ }), -/* 526 */ +/* 528 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60550,7 +60646,7 @@ module.exports.win32 = win32; /***/ }), -/* 527 */ +/* 529 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60561,18 +60657,18 @@ module.exports.win32 = win32; */ var util = __webpack_require__(112); -var braces = __webpack_require__(528); -var toRegex = __webpack_require__(529); -var extend = __webpack_require__(642); +var braces = __webpack_require__(530); +var toRegex = __webpack_require__(531); +var extend = __webpack_require__(644); /** * Local dependencies */ -var compilers = __webpack_require__(644); -var parsers = __webpack_require__(671); -var cache = __webpack_require__(672); -var utils = __webpack_require__(673); +var compilers = __webpack_require__(646); +var parsers = __webpack_require__(673); +var cache = __webpack_require__(674); +var utils = __webpack_require__(675); var MAX_LENGTH = 1024 * 64; /** @@ -61434,7 +61530,7 @@ module.exports = micromatch; /***/ }), -/* 528 */ +/* 530 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61444,18 +61540,18 @@ module.exports = micromatch; * Module dependencies */ -var toRegex = __webpack_require__(529); -var unique = __webpack_require__(551); -var extend = __webpack_require__(552); +var toRegex = __webpack_require__(531); +var unique = __webpack_require__(553); +var extend = __webpack_require__(554); /** * Local dependencies */ -var compilers = __webpack_require__(554); -var parsers = __webpack_require__(567); -var Braces = __webpack_require__(571); -var utils = __webpack_require__(555); +var compilers = __webpack_require__(556); +var parsers = __webpack_require__(569); +var Braces = __webpack_require__(573); +var utils = __webpack_require__(557); var MAX_LENGTH = 1024 * 64; var cache = {}; @@ -61759,16 +61855,16 @@ module.exports = braces; /***/ }), -/* 529 */ +/* 531 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var safe = __webpack_require__(530); -var define = __webpack_require__(536); -var extend = __webpack_require__(544); -var not = __webpack_require__(548); +var safe = __webpack_require__(532); +var define = __webpack_require__(538); +var extend = __webpack_require__(546); +var not = __webpack_require__(550); var MAX_LENGTH = 1024 * 64; /** @@ -61921,10 +62017,10 @@ module.exports.makeRe = makeRe; /***/ }), -/* 530 */ +/* 532 */ /***/ (function(module, exports, __webpack_require__) { -var parse = __webpack_require__(531); +var parse = __webpack_require__(533); var types = parse.types; module.exports = function (re, opts) { @@ -61970,13 +62066,13 @@ function isRegExp (x) { /***/ }), -/* 531 */ +/* 533 */ /***/ (function(module, exports, __webpack_require__) { -var util = __webpack_require__(532); -var types = __webpack_require__(533); -var sets = __webpack_require__(534); -var positions = __webpack_require__(535); +var util = __webpack_require__(534); +var types = __webpack_require__(535); +var sets = __webpack_require__(536); +var positions = __webpack_require__(537); module.exports = function(regexpStr) { @@ -62258,11 +62354,11 @@ module.exports.types = types; /***/ }), -/* 532 */ +/* 534 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(533); -var sets = __webpack_require__(534); +var types = __webpack_require__(535); +var sets = __webpack_require__(536); // All of these are private and only used by randexp. @@ -62375,7 +62471,7 @@ exports.error = function(regexp, msg) { /***/ }), -/* 533 */ +/* 535 */ /***/ (function(module, exports) { module.exports = { @@ -62391,10 +62487,10 @@ module.exports = { /***/ }), -/* 534 */ +/* 536 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(533); +var types = __webpack_require__(535); var INTS = function() { return [{ type: types.RANGE , from: 48, to: 57 }]; @@ -62479,10 +62575,10 @@ exports.anyChar = function() { /***/ }), -/* 535 */ +/* 537 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(533); +var types = __webpack_require__(535); exports.wordBoundary = function() { return { type: types.POSITION, value: 'b' }; @@ -62502,7 +62598,7 @@ exports.end = function() { /***/ }), -/* 536 */ +/* 538 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62515,8 +62611,8 @@ exports.end = function() { -var isobject = __webpack_require__(537); -var isDescriptor = __webpack_require__(538); +var isobject = __webpack_require__(539); +var isDescriptor = __webpack_require__(540); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -62547,7 +62643,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 537 */ +/* 539 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62566,7 +62662,7 @@ module.exports = function isObject(val) { /***/ }), -/* 538 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62579,9 +62675,9 @@ module.exports = function isObject(val) { -var typeOf = __webpack_require__(539); -var isAccessor = __webpack_require__(540); -var isData = __webpack_require__(542); +var typeOf = __webpack_require__(541); +var isAccessor = __webpack_require__(542); +var isData = __webpack_require__(544); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -62595,7 +62691,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 539 */ +/* 541 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -62730,7 +62826,7 @@ function isBuffer(val) { /***/ }), -/* 540 */ +/* 542 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62743,7 +62839,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(541); +var typeOf = __webpack_require__(543); // accessor descriptor properties var accessor = { @@ -62806,7 +62902,7 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 541 */ +/* 543 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -62941,7 +63037,7 @@ function isBuffer(val) { /***/ }), -/* 542 */ +/* 544 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62954,7 +63050,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(543); +var typeOf = __webpack_require__(545); module.exports = function isDataDescriptor(obj, prop) { // data descriptor properties @@ -62997,7 +63093,7 @@ module.exports = function isDataDescriptor(obj, prop) { /***/ }), -/* 543 */ +/* 545 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -63132,14 +63228,14 @@ function isBuffer(val) { /***/ }), -/* 544 */ +/* 546 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(545); -var assignSymbols = __webpack_require__(547); +var isExtendable = __webpack_require__(547); +var assignSymbols = __webpack_require__(549); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -63199,7 +63295,7 @@ function isEnum(obj, key) { /***/ }), -/* 545 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63212,7 +63308,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(546); +var isPlainObject = __webpack_require__(548); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -63220,7 +63316,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 546 */ +/* 548 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63233,7 +63329,7 @@ module.exports = function isExtendable(val) { -var isObject = __webpack_require__(537); +var isObject = __webpack_require__(539); function isObjectObject(o) { return isObject(o) === true @@ -63264,7 +63360,7 @@ module.exports = function isPlainObject(o) { /***/ }), -/* 547 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63311,14 +63407,14 @@ module.exports = function(receiver, objects) { /***/ }), -/* 548 */ +/* 550 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(549); -var safe = __webpack_require__(530); +var extend = __webpack_require__(551); +var safe = __webpack_require__(532); /** * The main export is a function that takes a `pattern` string and an `options` object. @@ -63390,14 +63486,14 @@ module.exports = toRegex; /***/ }), -/* 549 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(550); -var assignSymbols = __webpack_require__(547); +var isExtendable = __webpack_require__(552); +var assignSymbols = __webpack_require__(549); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -63457,7 +63553,7 @@ function isEnum(obj, key) { /***/ }), -/* 550 */ +/* 552 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63470,7 +63566,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(546); +var isPlainObject = __webpack_require__(548); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -63478,7 +63574,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 551 */ +/* 553 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63528,13 +63624,13 @@ module.exports.immutable = function uniqueImmutable(arr) { /***/ }), -/* 552 */ +/* 554 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(553); +var isObject = __webpack_require__(555); module.exports = function extend(o/*, objects*/) { if (!isObject(o)) { o = {}; } @@ -63568,7 +63664,7 @@ function hasOwn(obj, key) { /***/ }), -/* 553 */ +/* 555 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63588,13 +63684,13 @@ module.exports = function isExtendable(val) { /***/ }), -/* 554 */ +/* 556 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(555); +var utils = __webpack_require__(557); module.exports = function(braces, options) { braces.compiler @@ -63877,25 +63973,25 @@ function hasQueue(node) { /***/ }), -/* 555 */ +/* 557 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var splitString = __webpack_require__(556); +var splitString = __webpack_require__(558); var utils = module.exports; /** * Module dependencies */ -utils.extend = __webpack_require__(552); -utils.flatten = __webpack_require__(559); -utils.isObject = __webpack_require__(537); -utils.fillRange = __webpack_require__(560); -utils.repeat = __webpack_require__(566); -utils.unique = __webpack_require__(551); +utils.extend = __webpack_require__(554); +utils.flatten = __webpack_require__(561); +utils.isObject = __webpack_require__(539); +utils.fillRange = __webpack_require__(562); +utils.repeat = __webpack_require__(568); +utils.unique = __webpack_require__(553); utils.define = function(obj, key, val) { Object.defineProperty(obj, key, { @@ -64227,7 +64323,7 @@ utils.escapeRegex = function(str) { /***/ }), -/* 556 */ +/* 558 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64240,7 +64336,7 @@ utils.escapeRegex = function(str) { -var extend = __webpack_require__(557); +var extend = __webpack_require__(559); module.exports = function(str, options, fn) { if (typeof str !== 'string') { @@ -64405,14 +64501,14 @@ function keepEscaping(opts, str, idx) { /***/ }), -/* 557 */ +/* 559 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(558); -var assignSymbols = __webpack_require__(547); +var isExtendable = __webpack_require__(560); +var assignSymbols = __webpack_require__(549); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -64472,7 +64568,7 @@ function isEnum(obj, key) { /***/ }), -/* 558 */ +/* 560 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64485,7 +64581,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(546); +var isPlainObject = __webpack_require__(548); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -64493,7 +64589,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 559 */ +/* 561 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64522,7 +64618,7 @@ function flat(arr, res) { /***/ }), -/* 560 */ +/* 562 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64536,10 +64632,10 @@ function flat(arr, res) { var util = __webpack_require__(112); -var isNumber = __webpack_require__(561); -var extend = __webpack_require__(552); -var repeat = __webpack_require__(564); -var toRegex = __webpack_require__(565); +var isNumber = __webpack_require__(563); +var extend = __webpack_require__(554); +var repeat = __webpack_require__(566); +var toRegex = __webpack_require__(567); /** * Return a range of numbers or letters. @@ -64737,7 +64833,7 @@ module.exports = fillRange; /***/ }), -/* 561 */ +/* 563 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64750,7 +64846,7 @@ module.exports = fillRange; -var typeOf = __webpack_require__(562); +var typeOf = __webpack_require__(564); module.exports = function isNumber(num) { var type = typeOf(num); @@ -64766,10 +64862,10 @@ module.exports = function isNumber(num) { /***/ }), -/* 562 */ +/* 564 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(563); +var isBuffer = __webpack_require__(565); var toString = Object.prototype.toString; /** @@ -64888,7 +64984,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 563 */ +/* 565 */ /***/ (function(module, exports) { /*! @@ -64915,7 +65011,7 @@ function isSlowBuffer (obj) { /***/ }), -/* 564 */ +/* 566 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64992,7 +65088,7 @@ function repeat(str, num) { /***/ }), -/* 565 */ +/* 567 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65005,8 +65101,8 @@ function repeat(str, num) { -var repeat = __webpack_require__(564); -var isNumber = __webpack_require__(561); +var repeat = __webpack_require__(566); +var isNumber = __webpack_require__(563); var cache = {}; function toRegexRange(min, max, options) { @@ -65293,7 +65389,7 @@ module.exports = toRegexRange; /***/ }), -/* 566 */ +/* 568 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -65318,14 +65414,14 @@ module.exports = function repeat(ele, num) { /***/ }), -/* 567 */ +/* 569 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Node = __webpack_require__(568); -var utils = __webpack_require__(555); +var Node = __webpack_require__(570); +var utils = __webpack_require__(557); /** * Braces parsers @@ -65685,15 +65781,15 @@ function concatNodes(pos, node, parent, options) { /***/ }), -/* 568 */ +/* 570 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(537); -var define = __webpack_require__(569); -var utils = __webpack_require__(570); +var isObject = __webpack_require__(539); +var define = __webpack_require__(571); +var utils = __webpack_require__(572); var ownNames; /** @@ -66184,7 +66280,7 @@ exports = module.exports = Node; /***/ }), -/* 569 */ +/* 571 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66197,7 +66293,7 @@ exports = module.exports = Node; -var isDescriptor = __webpack_require__(538); +var isDescriptor = __webpack_require__(540); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -66222,13 +66318,13 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 570 */ +/* 572 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(562); +var typeOf = __webpack_require__(564); var utils = module.exports; /** @@ -67248,17 +67344,17 @@ function assert(val, message) { /***/ }), -/* 571 */ +/* 573 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(552); -var Snapdragon = __webpack_require__(572); -var compilers = __webpack_require__(554); -var parsers = __webpack_require__(567); -var utils = __webpack_require__(555); +var extend = __webpack_require__(554); +var Snapdragon = __webpack_require__(574); +var compilers = __webpack_require__(556); +var parsers = __webpack_require__(569); +var utils = __webpack_require__(557); /** * Customize Snapdragon parser and renderer @@ -67359,17 +67455,17 @@ module.exports = Braces; /***/ }), -/* 572 */ +/* 574 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Base = __webpack_require__(573); -var define = __webpack_require__(600); -var Compiler = __webpack_require__(610); -var Parser = __webpack_require__(639); -var utils = __webpack_require__(619); +var Base = __webpack_require__(575); +var define = __webpack_require__(602); +var Compiler = __webpack_require__(612); +var Parser = __webpack_require__(641); +var utils = __webpack_require__(621); var regexCache = {}; var cache = {}; @@ -67540,20 +67636,20 @@ module.exports.Parser = Parser; /***/ }), -/* 573 */ +/* 575 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(112); -var define = __webpack_require__(574); -var CacheBase = __webpack_require__(575); -var Emitter = __webpack_require__(576); -var isObject = __webpack_require__(537); -var merge = __webpack_require__(594); -var pascal = __webpack_require__(597); -var cu = __webpack_require__(598); +var define = __webpack_require__(576); +var CacheBase = __webpack_require__(577); +var Emitter = __webpack_require__(578); +var isObject = __webpack_require__(539); +var merge = __webpack_require__(596); +var pascal = __webpack_require__(599); +var cu = __webpack_require__(600); /** * Optionally define a custom `cache` namespace to use. @@ -67982,7 +68078,7 @@ module.exports.namespace = namespace; /***/ }), -/* 574 */ +/* 576 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -67995,7 +68091,7 @@ module.exports.namespace = namespace; -var isDescriptor = __webpack_require__(538); +var isDescriptor = __webpack_require__(540); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -68020,21 +68116,21 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 575 */ +/* 577 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(537); -var Emitter = __webpack_require__(576); -var visit = __webpack_require__(577); -var toPath = __webpack_require__(580); -var union = __webpack_require__(581); -var del = __webpack_require__(585); -var get = __webpack_require__(583); -var has = __webpack_require__(590); -var set = __webpack_require__(593); +var isObject = __webpack_require__(539); +var Emitter = __webpack_require__(578); +var visit = __webpack_require__(579); +var toPath = __webpack_require__(582); +var union = __webpack_require__(583); +var del = __webpack_require__(587); +var get = __webpack_require__(585); +var has = __webpack_require__(592); +var set = __webpack_require__(595); /** * Create a `Cache` constructor that when instantiated will @@ -68288,7 +68384,7 @@ module.exports.namespace = namespace; /***/ }), -/* 576 */ +/* 578 */ /***/ (function(module, exports, __webpack_require__) { @@ -68457,7 +68553,7 @@ Emitter.prototype.hasListeners = function(event){ /***/ }), -/* 577 */ +/* 579 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68470,8 +68566,8 @@ Emitter.prototype.hasListeners = function(event){ -var visit = __webpack_require__(578); -var mapVisit = __webpack_require__(579); +var visit = __webpack_require__(580); +var mapVisit = __webpack_require__(581); module.exports = function(collection, method, val) { var result; @@ -68494,7 +68590,7 @@ module.exports = function(collection, method, val) { /***/ }), -/* 578 */ +/* 580 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68507,7 +68603,7 @@ module.exports = function(collection, method, val) { -var isObject = __webpack_require__(537); +var isObject = __webpack_require__(539); module.exports = function visit(thisArg, method, target, val) { if (!isObject(thisArg) && typeof thisArg !== 'function') { @@ -68534,14 +68630,14 @@ module.exports = function visit(thisArg, method, target, val) { /***/ }), -/* 579 */ +/* 581 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(112); -var visit = __webpack_require__(578); +var visit = __webpack_require__(580); /** * Map `visit` over an array of objects. @@ -68578,7 +68674,7 @@ function isObject(val) { /***/ }), -/* 580 */ +/* 582 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68591,7 +68687,7 @@ function isObject(val) { -var typeOf = __webpack_require__(562); +var typeOf = __webpack_require__(564); module.exports = function toPath(args) { if (typeOf(args) !== 'arguments') { @@ -68618,16 +68714,16 @@ function filter(arr) { /***/ }), -/* 581 */ +/* 583 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(553); -var union = __webpack_require__(582); -var get = __webpack_require__(583); -var set = __webpack_require__(584); +var isObject = __webpack_require__(555); +var union = __webpack_require__(584); +var get = __webpack_require__(585); +var set = __webpack_require__(586); module.exports = function unionValue(obj, prop, value) { if (!isObject(obj)) { @@ -68655,7 +68751,7 @@ function arrayify(val) { /***/ }), -/* 582 */ +/* 584 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68691,7 +68787,7 @@ module.exports = function union(init) { /***/ }), -/* 583 */ +/* 585 */ /***/ (function(module, exports) { /*! @@ -68747,7 +68843,7 @@ function toString(val) { /***/ }), -/* 584 */ +/* 586 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68760,10 +68856,10 @@ function toString(val) { -var split = __webpack_require__(556); -var extend = __webpack_require__(552); -var isPlainObject = __webpack_require__(546); -var isObject = __webpack_require__(553); +var split = __webpack_require__(558); +var extend = __webpack_require__(554); +var isPlainObject = __webpack_require__(548); +var isObject = __webpack_require__(555); module.exports = function(obj, prop, val) { if (!isObject(obj)) { @@ -68809,7 +68905,7 @@ function isValidKey(key) { /***/ }), -/* 585 */ +/* 587 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68822,8 +68918,8 @@ function isValidKey(key) { -var isObject = __webpack_require__(537); -var has = __webpack_require__(586); +var isObject = __webpack_require__(539); +var has = __webpack_require__(588); module.exports = function unset(obj, prop) { if (!isObject(obj)) { @@ -68848,7 +68944,7 @@ module.exports = function unset(obj, prop) { /***/ }), -/* 586 */ +/* 588 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68861,9 +68957,9 @@ module.exports = function unset(obj, prop) { -var isObject = __webpack_require__(587); -var hasValues = __webpack_require__(589); -var get = __webpack_require__(583); +var isObject = __webpack_require__(589); +var hasValues = __webpack_require__(591); +var get = __webpack_require__(585); module.exports = function(obj, prop, noZero) { if (isObject(obj)) { @@ -68874,7 +68970,7 @@ module.exports = function(obj, prop, noZero) { /***/ }), -/* 587 */ +/* 589 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68887,7 +68983,7 @@ module.exports = function(obj, prop, noZero) { -var isArray = __webpack_require__(588); +var isArray = __webpack_require__(590); module.exports = function isObject(val) { return val != null && typeof val === 'object' && isArray(val) === false; @@ -68895,7 +68991,7 @@ module.exports = function isObject(val) { /***/ }), -/* 588 */ +/* 590 */ /***/ (function(module, exports) { var toString = {}.toString; @@ -68906,7 +69002,7 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 589 */ +/* 591 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68949,7 +69045,7 @@ module.exports = function hasValue(o, noZero) { /***/ }), -/* 590 */ +/* 592 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68962,9 +69058,9 @@ module.exports = function hasValue(o, noZero) { -var isObject = __webpack_require__(537); -var hasValues = __webpack_require__(591); -var get = __webpack_require__(583); +var isObject = __webpack_require__(539); +var hasValues = __webpack_require__(593); +var get = __webpack_require__(585); module.exports = function(val, prop) { return hasValues(isObject(val) && prop ? get(val, prop) : val); @@ -68972,7 +69068,7 @@ module.exports = function(val, prop) { /***/ }), -/* 591 */ +/* 593 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68985,8 +69081,8 @@ module.exports = function(val, prop) { -var typeOf = __webpack_require__(592); -var isNumber = __webpack_require__(561); +var typeOf = __webpack_require__(594); +var isNumber = __webpack_require__(563); module.exports = function hasValue(val) { // is-number checks for NaN and other edge cases @@ -69039,10 +69135,10 @@ module.exports = function hasValue(val) { /***/ }), -/* 592 */ +/* 594 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(563); +var isBuffer = __webpack_require__(565); var toString = Object.prototype.toString; /** @@ -69164,7 +69260,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 593 */ +/* 595 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69177,10 +69273,10 @@ module.exports = function kindOf(val) { -var split = __webpack_require__(556); -var extend = __webpack_require__(552); -var isPlainObject = __webpack_require__(546); -var isObject = __webpack_require__(553); +var split = __webpack_require__(558); +var extend = __webpack_require__(554); +var isPlainObject = __webpack_require__(548); +var isObject = __webpack_require__(555); module.exports = function(obj, prop, val) { if (!isObject(obj)) { @@ -69226,14 +69322,14 @@ function isValidKey(key) { /***/ }), -/* 594 */ +/* 596 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(595); -var forIn = __webpack_require__(596); +var isExtendable = __webpack_require__(597); +var forIn = __webpack_require__(598); function mixinDeep(target, objects) { var len = arguments.length, i = 0; @@ -69297,7 +69393,7 @@ module.exports = mixinDeep; /***/ }), -/* 595 */ +/* 597 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69310,7 +69406,7 @@ module.exports = mixinDeep; -var isPlainObject = __webpack_require__(546); +var isPlainObject = __webpack_require__(548); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -69318,7 +69414,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 596 */ +/* 598 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69341,7 +69437,7 @@ module.exports = function forIn(obj, fn, thisArg) { /***/ }), -/* 597 */ +/* 599 */ /***/ (function(module, exports) { /*! @@ -69368,14 +69464,14 @@ module.exports = pascalcase; /***/ }), -/* 598 */ +/* 600 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(112); -var utils = __webpack_require__(599); +var utils = __webpack_require__(601); /** * Expose class utils @@ -69740,7 +69836,7 @@ cu.bubble = function(Parent, events) { /***/ }), -/* 599 */ +/* 601 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69754,10 +69850,10 @@ var utils = {}; * Lazily required module dependencies */ -utils.union = __webpack_require__(582); -utils.define = __webpack_require__(600); -utils.isObj = __webpack_require__(537); -utils.staticExtend = __webpack_require__(607); +utils.union = __webpack_require__(584); +utils.define = __webpack_require__(602); +utils.isObj = __webpack_require__(539); +utils.staticExtend = __webpack_require__(609); /** @@ -69768,7 +69864,7 @@ module.exports = utils; /***/ }), -/* 600 */ +/* 602 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69781,7 +69877,7 @@ module.exports = utils; -var isDescriptor = __webpack_require__(601); +var isDescriptor = __webpack_require__(603); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -69806,7 +69902,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 601 */ +/* 603 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69819,9 +69915,9 @@ module.exports = function defineProperty(obj, prop, val) { -var typeOf = __webpack_require__(602); -var isAccessor = __webpack_require__(603); -var isData = __webpack_require__(605); +var typeOf = __webpack_require__(604); +var isAccessor = __webpack_require__(605); +var isData = __webpack_require__(607); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -69835,7 +69931,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 602 */ +/* 604 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -69988,7 +70084,7 @@ function isBuffer(val) { /***/ }), -/* 603 */ +/* 605 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70001,7 +70097,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(604); +var typeOf = __webpack_require__(606); // accessor descriptor properties var accessor = { @@ -70064,10 +70160,10 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 604 */ +/* 606 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(563); +var isBuffer = __webpack_require__(565); var toString = Object.prototype.toString; /** @@ -70186,7 +70282,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 605 */ +/* 607 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70199,7 +70295,7 @@ module.exports = function kindOf(val) { -var typeOf = __webpack_require__(606); +var typeOf = __webpack_require__(608); // data descriptor properties var data = { @@ -70248,10 +70344,10 @@ module.exports = isDataDescriptor; /***/ }), -/* 606 */ +/* 608 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(563); +var isBuffer = __webpack_require__(565); var toString = Object.prototype.toString; /** @@ -70370,7 +70466,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 607 */ +/* 609 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70383,8 +70479,8 @@ module.exports = function kindOf(val) { -var copy = __webpack_require__(608); -var define = __webpack_require__(600); +var copy = __webpack_require__(610); +var define = __webpack_require__(602); var util = __webpack_require__(112); /** @@ -70467,15 +70563,15 @@ module.exports = extend; /***/ }), -/* 608 */ +/* 610 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(562); -var copyDescriptor = __webpack_require__(609); -var define = __webpack_require__(600); +var typeOf = __webpack_require__(564); +var copyDescriptor = __webpack_require__(611); +var define = __webpack_require__(602); /** * Copy static properties, prototype properties, and descriptors from one object to another. @@ -70648,7 +70744,7 @@ module.exports.has = has; /***/ }), -/* 609 */ +/* 611 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70736,16 +70832,16 @@ function isObject(val) { /***/ }), -/* 610 */ +/* 612 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(611); -var define = __webpack_require__(600); -var debug = __webpack_require__(613)('snapdragon:compiler'); -var utils = __webpack_require__(619); +var use = __webpack_require__(613); +var define = __webpack_require__(602); +var debug = __webpack_require__(615)('snapdragon:compiler'); +var utils = __webpack_require__(621); /** * Create a new `Compiler` with the given `options`. @@ -70899,7 +70995,7 @@ Compiler.prototype = { // source map support if (opts.sourcemap) { - var sourcemaps = __webpack_require__(638); + var sourcemaps = __webpack_require__(640); sourcemaps(this); this.mapVisit(this.ast.nodes); this.applySourceMaps(); @@ -70920,7 +71016,7 @@ module.exports = Compiler; /***/ }), -/* 611 */ +/* 613 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70933,7 +71029,7 @@ module.exports = Compiler; -var utils = __webpack_require__(612); +var utils = __webpack_require__(614); module.exports = function base(app, opts) { if (!utils.isObject(app) && typeof app !== 'function') { @@ -71048,7 +71144,7 @@ module.exports = function base(app, opts) { /***/ }), -/* 612 */ +/* 614 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71062,8 +71158,8 @@ var utils = {}; * Lazily required module dependencies */ -utils.define = __webpack_require__(600); -utils.isObject = __webpack_require__(537); +utils.define = __webpack_require__(602); +utils.isObject = __webpack_require__(539); utils.isString = function(val) { @@ -71078,7 +71174,7 @@ module.exports = utils; /***/ }), -/* 613 */ +/* 615 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -71087,14 +71183,14 @@ module.exports = utils; */ if (typeof process !== 'undefined' && process.type === 'renderer') { - module.exports = __webpack_require__(614); + module.exports = __webpack_require__(616); } else { - module.exports = __webpack_require__(617); + module.exports = __webpack_require__(619); } /***/ }), -/* 614 */ +/* 616 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -71103,7 +71199,7 @@ if (typeof process !== 'undefined' && process.type === 'renderer') { * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(615); +exports = module.exports = __webpack_require__(617); exports.log = log; exports.formatArgs = formatArgs; exports.save = save; @@ -71285,7 +71381,7 @@ function localstorage() { /***/ }), -/* 615 */ +/* 617 */ /***/ (function(module, exports, __webpack_require__) { @@ -71301,7 +71397,7 @@ exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; -exports.humanize = __webpack_require__(616); +exports.humanize = __webpack_require__(618); /** * The currently active debug mode names, and names to skip. @@ -71493,7 +71589,7 @@ function coerce(val) { /***/ }), -/* 616 */ +/* 618 */ /***/ (function(module, exports) { /** @@ -71651,7 +71747,7 @@ function plural(ms, n, name) { /***/ }), -/* 617 */ +/* 619 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -71667,7 +71763,7 @@ var util = __webpack_require__(112); * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(615); +exports = module.exports = __webpack_require__(617); exports.init = init; exports.log = log; exports.formatArgs = formatArgs; @@ -71846,7 +71942,7 @@ function createWritableStdioStream (fd) { case 'PIPE': case 'TCP': - var net = __webpack_require__(618); + var net = __webpack_require__(620); stream = new net.Socket({ fd: fd, readable: false, @@ -71905,13 +72001,13 @@ exports.enable(load()); /***/ }), -/* 618 */ +/* 620 */ /***/ (function(module, exports) { module.exports = require("net"); /***/ }), -/* 619 */ +/* 621 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -71921,9 +72017,9 @@ module.exports = require("net"); * Module dependencies */ -exports.extend = __webpack_require__(552); -exports.SourceMap = __webpack_require__(620); -exports.sourceMapResolve = __webpack_require__(631); +exports.extend = __webpack_require__(554); +exports.SourceMap = __webpack_require__(622); +exports.sourceMapResolve = __webpack_require__(633); /** * Convert backslash in the given string to forward slashes @@ -71966,7 +72062,7 @@ exports.last = function(arr, n) { /***/ }), -/* 620 */ +/* 622 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -71974,13 +72070,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__(621).SourceMapGenerator; -exports.SourceMapConsumer = __webpack_require__(627).SourceMapConsumer; -exports.SourceNode = __webpack_require__(630).SourceNode; +exports.SourceMapGenerator = __webpack_require__(623).SourceMapGenerator; +exports.SourceMapConsumer = __webpack_require__(629).SourceMapConsumer; +exports.SourceNode = __webpack_require__(632).SourceNode; /***/ }), -/* 621 */ +/* 623 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71990,10 +72086,10 @@ exports.SourceNode = __webpack_require__(630).SourceNode; * http://opensource.org/licenses/BSD-3-Clause */ -var base64VLQ = __webpack_require__(622); -var util = __webpack_require__(624); -var ArraySet = __webpack_require__(625).ArraySet; -var MappingList = __webpack_require__(626).MappingList; +var base64VLQ = __webpack_require__(624); +var util = __webpack_require__(626); +var ArraySet = __webpack_require__(627).ArraySet; +var MappingList = __webpack_require__(628).MappingList; /** * An instance of the SourceMapGenerator represents a source map which is @@ -72402,7 +72498,7 @@ exports.SourceMapGenerator = SourceMapGenerator; /***/ }), -/* 622 */ +/* 624 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -72442,7 +72538,7 @@ exports.SourceMapGenerator = SourceMapGenerator; * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var base64 = __webpack_require__(623); +var base64 = __webpack_require__(625); // 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, @@ -72548,7 +72644,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { /***/ }), -/* 623 */ +/* 625 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -72621,7 +72717,7 @@ exports.decode = function (charCode) { /***/ }), -/* 624 */ +/* 626 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73044,7 +73140,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate /***/ }), -/* 625 */ +/* 627 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73054,7 +73150,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(624); +var util = __webpack_require__(626); var has = Object.prototype.hasOwnProperty; var hasNativeMap = typeof Map !== "undefined"; @@ -73171,7 +73267,7 @@ exports.ArraySet = ArraySet; /***/ }), -/* 626 */ +/* 628 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73181,7 +73277,7 @@ exports.ArraySet = ArraySet; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(624); +var util = __webpack_require__(626); /** * Determine whether mappingB is after mappingA with respect to generated @@ -73256,7 +73352,7 @@ exports.MappingList = MappingList; /***/ }), -/* 627 */ +/* 629 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73266,11 +73362,11 @@ exports.MappingList = MappingList; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(624); -var binarySearch = __webpack_require__(628); -var ArraySet = __webpack_require__(625).ArraySet; -var base64VLQ = __webpack_require__(622); -var quickSort = __webpack_require__(629).quickSort; +var util = __webpack_require__(626); +var binarySearch = __webpack_require__(630); +var ArraySet = __webpack_require__(627).ArraySet; +var base64VLQ = __webpack_require__(624); +var quickSort = __webpack_require__(631).quickSort; function SourceMapConsumer(aSourceMap) { var sourceMap = aSourceMap; @@ -74344,7 +74440,7 @@ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; /***/ }), -/* 628 */ +/* 630 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -74461,7 +74557,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { /***/ }), -/* 629 */ +/* 631 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -74581,7 +74677,7 @@ exports.quickSort = function (ary, comparator) { /***/ }), -/* 630 */ +/* 632 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -74591,8 +74687,8 @@ exports.quickSort = function (ary, comparator) { * http://opensource.org/licenses/BSD-3-Clause */ -var SourceMapGenerator = __webpack_require__(621).SourceMapGenerator; -var util = __webpack_require__(624); +var SourceMapGenerator = __webpack_require__(623).SourceMapGenerator; +var util = __webpack_require__(626); // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other // operating systems these days (capturing the result). @@ -75000,17 +75096,17 @@ exports.SourceNode = SourceNode; /***/ }), -/* 631 */ +/* 633 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014, 2015, 2016, 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var sourceMappingURL = __webpack_require__(632) -var resolveUrl = __webpack_require__(633) -var decodeUriComponent = __webpack_require__(634) -var urix = __webpack_require__(636) -var atob = __webpack_require__(637) +var sourceMappingURL = __webpack_require__(634) +var resolveUrl = __webpack_require__(635) +var decodeUriComponent = __webpack_require__(636) +var urix = __webpack_require__(638) +var atob = __webpack_require__(639) @@ -75308,7 +75404,7 @@ module.exports = { /***/ }), -/* 632 */ +/* 634 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014 Simon Lydell @@ -75371,7 +75467,7 @@ void (function(root, factory) { /***/ }), -/* 633 */ +/* 635 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -75389,13 +75485,13 @@ module.exports = resolveUrl /***/ }), -/* 634 */ +/* 636 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var decodeUriComponent = __webpack_require__(635) +var decodeUriComponent = __webpack_require__(637) function customDecodeUriComponent(string) { // `decodeUriComponent` turns `+` into ` `, but that's not wanted. @@ -75406,7 +75502,7 @@ module.exports = customDecodeUriComponent /***/ }), -/* 635 */ +/* 637 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75507,7 +75603,7 @@ module.exports = function (encodedURI) { /***/ }), -/* 636 */ +/* 638 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -75530,7 +75626,7 @@ module.exports = urix /***/ }), -/* 637 */ +/* 639 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75544,7 +75640,7 @@ module.exports = atob.atob = atob; /***/ }), -/* 638 */ +/* 640 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75552,8 +75648,8 @@ module.exports = atob.atob = atob; var fs = __webpack_require__(134); var path = __webpack_require__(4); -var define = __webpack_require__(600); -var utils = __webpack_require__(619); +var define = __webpack_require__(602); +var utils = __webpack_require__(621); /** * Expose `mixin()`. @@ -75696,19 +75792,19 @@ exports.comment = function(node) { /***/ }), -/* 639 */ +/* 641 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(611); +var use = __webpack_require__(613); var util = __webpack_require__(112); -var Cache = __webpack_require__(640); -var define = __webpack_require__(600); -var debug = __webpack_require__(613)('snapdragon:parser'); -var Position = __webpack_require__(641); -var utils = __webpack_require__(619); +var Cache = __webpack_require__(642); +var define = __webpack_require__(602); +var debug = __webpack_require__(615)('snapdragon:parser'); +var Position = __webpack_require__(643); +var utils = __webpack_require__(621); /** * Create a new `Parser` with the given `input` and `options`. @@ -76236,7 +76332,7 @@ module.exports = Parser; /***/ }), -/* 640 */ +/* 642 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76343,13 +76439,13 @@ MapCache.prototype.del = function mapDelete(key) { /***/ }), -/* 641 */ +/* 643 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var define = __webpack_require__(600); +var define = __webpack_require__(602); /** * Store position for a node @@ -76364,14 +76460,14 @@ module.exports = function Position(start, parser) { /***/ }), -/* 642 */ +/* 644 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(643); -var assignSymbols = __webpack_require__(547); +var isExtendable = __webpack_require__(645); +var assignSymbols = __webpack_require__(549); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -76431,7 +76527,7 @@ function isEnum(obj, key) { /***/ }), -/* 643 */ +/* 645 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76444,7 +76540,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(546); +var isPlainObject = __webpack_require__(548); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -76452,14 +76548,14 @@ module.exports = function isExtendable(val) { /***/ }), -/* 644 */ +/* 646 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var nanomatch = __webpack_require__(645); -var extglob = __webpack_require__(660); +var nanomatch = __webpack_require__(647); +var extglob = __webpack_require__(662); module.exports = function(snapdragon) { var compilers = snapdragon.compiler.compilers; @@ -76536,7 +76632,7 @@ function escapeExtglobs(compiler) { /***/ }), -/* 645 */ +/* 647 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76547,17 +76643,17 @@ function escapeExtglobs(compiler) { */ var util = __webpack_require__(112); -var toRegex = __webpack_require__(529); -var extend = __webpack_require__(646); +var toRegex = __webpack_require__(531); +var extend = __webpack_require__(648); /** * Local dependencies */ -var compilers = __webpack_require__(648); -var parsers = __webpack_require__(649); -var cache = __webpack_require__(652); -var utils = __webpack_require__(654); +var compilers = __webpack_require__(650); +var parsers = __webpack_require__(651); +var cache = __webpack_require__(654); +var utils = __webpack_require__(656); var MAX_LENGTH = 1024 * 64; /** @@ -77381,14 +77477,14 @@ module.exports = nanomatch; /***/ }), -/* 646 */ +/* 648 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(647); -var assignSymbols = __webpack_require__(547); +var isExtendable = __webpack_require__(649); +var assignSymbols = __webpack_require__(549); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -77448,7 +77544,7 @@ function isEnum(obj, key) { /***/ }), -/* 647 */ +/* 649 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77461,7 +77557,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(546); +var isPlainObject = __webpack_require__(548); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -77469,7 +77565,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 648 */ +/* 650 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77815,15 +77911,15 @@ module.exports = function(nanomatch, options) { /***/ }), -/* 649 */ +/* 651 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regexNot = __webpack_require__(548); -var toRegex = __webpack_require__(529); -var isOdd = __webpack_require__(650); +var regexNot = __webpack_require__(550); +var toRegex = __webpack_require__(531); +var isOdd = __webpack_require__(652); /** * Characters to use in negation regex (we want to "not" match @@ -78209,7 +78305,7 @@ module.exports.not = NOT_REGEX; /***/ }), -/* 650 */ +/* 652 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78222,7 +78318,7 @@ module.exports.not = NOT_REGEX; -var isNumber = __webpack_require__(651); +var isNumber = __webpack_require__(653); module.exports = function isOdd(i) { if (!isNumber(i)) { @@ -78236,7 +78332,7 @@ module.exports = function isOdd(i) { /***/ }), -/* 651 */ +/* 653 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78264,14 +78360,14 @@ module.exports = function isNumber(num) { /***/ }), -/* 652 */ +/* 654 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(653))(); +module.exports = new (__webpack_require__(655))(); /***/ }), -/* 653 */ +/* 655 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78284,7 +78380,7 @@ module.exports = new (__webpack_require__(653))(); -var MapCache = __webpack_require__(640); +var MapCache = __webpack_require__(642); /** * Create a new `FragmentCache` with an optional object to use for `caches`. @@ -78406,7 +78502,7 @@ exports = module.exports = FragmentCache; /***/ }), -/* 654 */ +/* 656 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78419,14 +78515,14 @@ var path = __webpack_require__(4); * Module dependencies */ -var isWindows = __webpack_require__(655)(); -var Snapdragon = __webpack_require__(572); -utils.define = __webpack_require__(656); -utils.diff = __webpack_require__(657); -utils.extend = __webpack_require__(646); -utils.pick = __webpack_require__(658); -utils.typeOf = __webpack_require__(659); -utils.unique = __webpack_require__(551); +var isWindows = __webpack_require__(657)(); +var Snapdragon = __webpack_require__(574); +utils.define = __webpack_require__(658); +utils.diff = __webpack_require__(659); +utils.extend = __webpack_require__(648); +utils.pick = __webpack_require__(660); +utils.typeOf = __webpack_require__(661); +utils.unique = __webpack_require__(553); /** * Returns true if the given value is effectively an empty string @@ -78792,7 +78888,7 @@ utils.unixify = function(options) { /***/ }), -/* 655 */ +/* 657 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! @@ -78820,7 +78916,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ /***/ }), -/* 656 */ +/* 658 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78833,8 +78929,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ -var isobject = __webpack_require__(537); -var isDescriptor = __webpack_require__(538); +var isobject = __webpack_require__(539); +var isDescriptor = __webpack_require__(540); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -78865,7 +78961,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 657 */ +/* 659 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78919,7 +79015,7 @@ function diffArray(one, two) { /***/ }), -/* 658 */ +/* 660 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78932,7 +79028,7 @@ function diffArray(one, two) { -var isObject = __webpack_require__(537); +var isObject = __webpack_require__(539); module.exports = function pick(obj, keys) { if (!isObject(obj) && typeof obj !== 'function') { @@ -78961,7 +79057,7 @@ module.exports = function pick(obj, keys) { /***/ }), -/* 659 */ +/* 661 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -79096,7 +79192,7 @@ function isBuffer(val) { /***/ }), -/* 660 */ +/* 662 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79106,18 +79202,18 @@ function isBuffer(val) { * Module dependencies */ -var extend = __webpack_require__(552); -var unique = __webpack_require__(551); -var toRegex = __webpack_require__(529); +var extend = __webpack_require__(554); +var unique = __webpack_require__(553); +var toRegex = __webpack_require__(531); /** * Local dependencies */ -var compilers = __webpack_require__(661); -var parsers = __webpack_require__(667); -var Extglob = __webpack_require__(670); -var utils = __webpack_require__(669); +var compilers = __webpack_require__(663); +var parsers = __webpack_require__(669); +var Extglob = __webpack_require__(672); +var utils = __webpack_require__(671); var MAX_LENGTH = 1024 * 64; /** @@ -79434,13 +79530,13 @@ module.exports = extglob; /***/ }), -/* 661 */ +/* 663 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(662); +var brackets = __webpack_require__(664); /** * Extglob compilers @@ -79610,7 +79706,7 @@ module.exports = function(extglob) { /***/ }), -/* 662 */ +/* 664 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79620,17 +79716,17 @@ module.exports = function(extglob) { * Local dependencies */ -var compilers = __webpack_require__(663); -var parsers = __webpack_require__(665); +var compilers = __webpack_require__(665); +var parsers = __webpack_require__(667); /** * Module dependencies */ -var debug = __webpack_require__(613)('expand-brackets'); -var extend = __webpack_require__(552); -var Snapdragon = __webpack_require__(572); -var toRegex = __webpack_require__(529); +var debug = __webpack_require__(615)('expand-brackets'); +var extend = __webpack_require__(554); +var Snapdragon = __webpack_require__(574); +var toRegex = __webpack_require__(531); /** * Parses the given POSIX character class `pattern` and returns a @@ -79828,13 +79924,13 @@ module.exports = brackets; /***/ }), -/* 663 */ +/* 665 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var posix = __webpack_require__(664); +var posix = __webpack_require__(666); module.exports = function(brackets) { brackets.compiler @@ -79922,7 +80018,7 @@ module.exports = function(brackets) { /***/ }), -/* 664 */ +/* 666 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79951,14 +80047,14 @@ module.exports = { /***/ }), -/* 665 */ +/* 667 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(666); -var define = __webpack_require__(600); +var utils = __webpack_require__(668); +var define = __webpack_require__(602); /** * Text regex @@ -80177,14 +80273,14 @@ module.exports.TEXT_REGEX = TEXT_REGEX; /***/ }), -/* 666 */ +/* 668 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var toRegex = __webpack_require__(529); -var regexNot = __webpack_require__(548); +var toRegex = __webpack_require__(531); +var regexNot = __webpack_require__(550); var cached; /** @@ -80218,15 +80314,15 @@ exports.createRegex = function(pattern, include) { /***/ }), -/* 667 */ +/* 669 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(662); -var define = __webpack_require__(668); -var utils = __webpack_require__(669); +var brackets = __webpack_require__(664); +var define = __webpack_require__(670); +var utils = __webpack_require__(671); /** * Characters to use in text regex (we want to "not" match @@ -80381,7 +80477,7 @@ module.exports = parsers; /***/ }), -/* 668 */ +/* 670 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80394,7 +80490,7 @@ module.exports = parsers; -var isDescriptor = __webpack_require__(538); +var isDescriptor = __webpack_require__(540); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -80419,14 +80515,14 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 669 */ +/* 671 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regex = __webpack_require__(548); -var Cache = __webpack_require__(653); +var regex = __webpack_require__(550); +var Cache = __webpack_require__(655); /** * Utils @@ -80495,7 +80591,7 @@ utils.createRegex = function(str) { /***/ }), -/* 670 */ +/* 672 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80505,16 +80601,16 @@ utils.createRegex = function(str) { * Module dependencies */ -var Snapdragon = __webpack_require__(572); -var define = __webpack_require__(668); -var extend = __webpack_require__(552); +var Snapdragon = __webpack_require__(574); +var define = __webpack_require__(670); +var extend = __webpack_require__(554); /** * Local dependencies */ -var compilers = __webpack_require__(661); -var parsers = __webpack_require__(667); +var compilers = __webpack_require__(663); +var parsers = __webpack_require__(669); /** * Customize Snapdragon parser and renderer @@ -80580,16 +80676,16 @@ module.exports = Extglob; /***/ }), -/* 671 */ +/* 673 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extglob = __webpack_require__(660); -var nanomatch = __webpack_require__(645); -var regexNot = __webpack_require__(548); -var toRegex = __webpack_require__(529); +var extglob = __webpack_require__(662); +var nanomatch = __webpack_require__(647); +var regexNot = __webpack_require__(550); +var toRegex = __webpack_require__(531); var not; /** @@ -80670,14 +80766,14 @@ function textRegex(pattern) { /***/ }), -/* 672 */ +/* 674 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(653))(); +module.exports = new (__webpack_require__(655))(); /***/ }), -/* 673 */ +/* 675 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80690,13 +80786,13 @@ var path = __webpack_require__(4); * Module dependencies */ -var Snapdragon = __webpack_require__(572); -utils.define = __webpack_require__(674); -utils.diff = __webpack_require__(657); -utils.extend = __webpack_require__(642); -utils.pick = __webpack_require__(658); -utils.typeOf = __webpack_require__(675); -utils.unique = __webpack_require__(551); +var Snapdragon = __webpack_require__(574); +utils.define = __webpack_require__(676); +utils.diff = __webpack_require__(659); +utils.extend = __webpack_require__(644); +utils.pick = __webpack_require__(660); +utils.typeOf = __webpack_require__(677); +utils.unique = __webpack_require__(553); /** * Returns true if the platform is windows, or `path.sep` is `\\`. @@ -80993,7 +81089,7 @@ utils.unixify = function(options) { /***/ }), -/* 674 */ +/* 676 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81006,8 +81102,8 @@ utils.unixify = function(options) { -var isobject = __webpack_require__(537); -var isDescriptor = __webpack_require__(538); +var isobject = __webpack_require__(539); +var isDescriptor = __webpack_require__(540); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -81038,7 +81134,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 675 */ +/* 677 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -81173,7 +81269,7 @@ function isBuffer(val) { /***/ }), -/* 676 */ +/* 678 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81192,9 +81288,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(677); -var reader_1 = __webpack_require__(690); -var fs_stream_1 = __webpack_require__(694); +var readdir = __webpack_require__(679); +var reader_1 = __webpack_require__(692); +var fs_stream_1 = __webpack_require__(696); var ReaderAsync = /** @class */ (function (_super) { __extends(ReaderAsync, _super); function ReaderAsync() { @@ -81255,15 +81351,15 @@ exports.default = ReaderAsync; /***/ }), -/* 677 */ +/* 679 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readdirSync = __webpack_require__(678); -const readdirAsync = __webpack_require__(686); -const readdirStream = __webpack_require__(689); +const readdirSync = __webpack_require__(680); +const readdirAsync = __webpack_require__(688); +const readdirStream = __webpack_require__(691); module.exports = exports = readdirAsyncPath; exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; @@ -81347,7 +81443,7 @@ function readdirStreamStat (dir, options) { /***/ }), -/* 678 */ +/* 680 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81355,11 +81451,11 @@ function readdirStreamStat (dir, options) { module.exports = readdirSync; -const DirectoryReader = __webpack_require__(679); +const DirectoryReader = __webpack_require__(681); let syncFacade = { - fs: __webpack_require__(684), - forEach: __webpack_require__(685), + fs: __webpack_require__(686), + forEach: __webpack_require__(687), sync: true }; @@ -81388,7 +81484,7 @@ function readdirSync (dir, options, internalOptions) { /***/ }), -/* 679 */ +/* 681 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81397,9 +81493,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__(680); -const stat = __webpack_require__(682); -const call = __webpack_require__(683); +const normalizeOptions = __webpack_require__(682); +const stat = __webpack_require__(684); +const call = __webpack_require__(685); /** * Asynchronously reads the contents of a directory and streams the results @@ -81775,14 +81871,14 @@ module.exports = DirectoryReader; /***/ }), -/* 680 */ +/* 682 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const globToRegExp = __webpack_require__(681); +const globToRegExp = __webpack_require__(683); module.exports = normalizeOptions; @@ -81959,7 +82055,7 @@ function normalizeOptions (options, internalOptions) { /***/ }), -/* 681 */ +/* 683 */ /***/ (function(module, exports) { module.exports = function (glob, opts) { @@ -82096,13 +82192,13 @@ module.exports = function (glob, opts) { /***/ }), -/* 682 */ +/* 684 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const call = __webpack_require__(683); +const call = __webpack_require__(685); module.exports = stat; @@ -82177,7 +82273,7 @@ function symlinkStat (fs, path, lstats, callback) { /***/ }), -/* 683 */ +/* 685 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82238,14 +82334,14 @@ function callOnce (fn) { /***/ }), -/* 684 */ +/* 686 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); -const call = __webpack_require__(683); +const call = __webpack_require__(685); /** * A facade around {@link fs.readdirSync} that allows it to be called @@ -82309,7 +82405,7 @@ exports.lstat = function (path, callback) { /***/ }), -/* 685 */ +/* 687 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82338,7 +82434,7 @@ function syncForEach (array, iterator, done) { /***/ }), -/* 686 */ +/* 688 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82346,12 +82442,12 @@ function syncForEach (array, iterator, done) { module.exports = readdirAsync; -const maybe = __webpack_require__(687); -const DirectoryReader = __webpack_require__(679); +const maybe = __webpack_require__(689); +const DirectoryReader = __webpack_require__(681); let asyncFacade = { fs: __webpack_require__(134), - forEach: __webpack_require__(688), + forEach: __webpack_require__(690), async: true }; @@ -82393,7 +82489,7 @@ function readdirAsync (dir, options, callback, internalOptions) { /***/ }), -/* 687 */ +/* 689 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82420,7 +82516,7 @@ module.exports = function maybe (cb, promise) { /***/ }), -/* 688 */ +/* 690 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82456,7 +82552,7 @@ function asyncForEach (array, iterator, done) { /***/ }), -/* 689 */ +/* 691 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82464,11 +82560,11 @@ function asyncForEach (array, iterator, done) { module.exports = readdirStream; -const DirectoryReader = __webpack_require__(679); +const DirectoryReader = __webpack_require__(681); let streamFacade = { fs: __webpack_require__(134), - forEach: __webpack_require__(688), + forEach: __webpack_require__(690), async: true }; @@ -82488,16 +82584,16 @@ function readdirStream (dir, options, internalOptions) { /***/ }), -/* 690 */ +/* 692 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var deep_1 = __webpack_require__(691); -var entry_1 = __webpack_require__(693); -var pathUtil = __webpack_require__(692); +var deep_1 = __webpack_require__(693); +var entry_1 = __webpack_require__(695); +var pathUtil = __webpack_require__(694); var Reader = /** @class */ (function () { function Reader(options) { this.options = options; @@ -82563,14 +82659,14 @@ exports.default = Reader; /***/ }), -/* 691 */ +/* 693 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(692); -var patternUtils = __webpack_require__(523); +var pathUtils = __webpack_require__(694); +var patternUtils = __webpack_require__(525); var DeepFilter = /** @class */ (function () { function DeepFilter(options, micromatchOptions) { this.options = options; @@ -82653,7 +82749,7 @@ exports.default = DeepFilter; /***/ }), -/* 692 */ +/* 694 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82684,14 +82780,14 @@ exports.makeAbsolute = makeAbsolute; /***/ }), -/* 693 */ +/* 695 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(692); -var patternUtils = __webpack_require__(523); +var pathUtils = __webpack_require__(694); +var patternUtils = __webpack_require__(525); var EntryFilter = /** @class */ (function () { function EntryFilter(options, micromatchOptions) { this.options = options; @@ -82776,7 +82872,7 @@ exports.default = EntryFilter; /***/ }), -/* 694 */ +/* 696 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82796,8 +82892,8 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(138); -var fsStat = __webpack_require__(695); -var fs_1 = __webpack_require__(699); +var fsStat = __webpack_require__(697); +var fs_1 = __webpack_require__(701); var FileSystemStream = /** @class */ (function (_super) { __extends(FileSystemStream, _super); function FileSystemStream() { @@ -82847,14 +82943,14 @@ exports.default = FileSystemStream; /***/ }), -/* 695 */ +/* 697 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const optionsManager = __webpack_require__(696); -const statProvider = __webpack_require__(698); +const optionsManager = __webpack_require__(698); +const statProvider = __webpack_require__(700); /** * Asynchronous API. */ @@ -82885,13 +82981,13 @@ exports.statSync = statSync; /***/ }), -/* 696 */ +/* 698 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsAdapter = __webpack_require__(697); +const fsAdapter = __webpack_require__(699); function prepare(opts) { const options = Object.assign({ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), @@ -82904,7 +83000,7 @@ exports.prepare = prepare; /***/ }), -/* 697 */ +/* 699 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82927,7 +83023,7 @@ exports.getFileSystemAdapter = getFileSystemAdapter; /***/ }), -/* 698 */ +/* 700 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82979,7 +83075,7 @@ exports.isFollowedSymlink = isFollowedSymlink; /***/ }), -/* 699 */ +/* 701 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83010,7 +83106,7 @@ exports.default = FileSystem; /***/ }), -/* 700 */ +/* 702 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83030,9 +83126,9 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(138); -var readdir = __webpack_require__(677); -var reader_1 = __webpack_require__(690); -var fs_stream_1 = __webpack_require__(694); +var readdir = __webpack_require__(679); +var reader_1 = __webpack_require__(692); +var fs_stream_1 = __webpack_require__(696); var TransformStream = /** @class */ (function (_super) { __extends(TransformStream, _super); function TransformStream(reader) { @@ -83100,7 +83196,7 @@ exports.default = ReaderStream; /***/ }), -/* 701 */ +/* 703 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83119,9 +83215,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(677); -var reader_1 = __webpack_require__(690); -var fs_sync_1 = __webpack_require__(702); +var readdir = __webpack_require__(679); +var reader_1 = __webpack_require__(692); +var fs_sync_1 = __webpack_require__(704); var ReaderSync = /** @class */ (function (_super) { __extends(ReaderSync, _super); function ReaderSync() { @@ -83181,7 +83277,7 @@ exports.default = ReaderSync; /***/ }), -/* 702 */ +/* 704 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83200,8 +83296,8 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var fsStat = __webpack_require__(695); -var fs_1 = __webpack_require__(699); +var fsStat = __webpack_require__(697); +var fs_1 = __webpack_require__(701); var FileSystemSync = /** @class */ (function (_super) { __extends(FileSystemSync, _super); function FileSystemSync() { @@ -83247,7 +83343,7 @@ exports.default = FileSystemSync; /***/ }), -/* 703 */ +/* 705 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83263,7 +83359,7 @@ exports.flatten = flatten; /***/ }), -/* 704 */ +/* 706 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83284,13 +83380,13 @@ exports.merge = merge; /***/ }), -/* 705 */ +/* 707 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const pathType = __webpack_require__(706); +const pathType = __webpack_require__(708); const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; @@ -83356,13 +83452,13 @@ module.exports.sync = (input, opts) => { /***/ }), -/* 706 */ +/* 708 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); -const pify = __webpack_require__(707); +const pify = __webpack_require__(709); function type(fn, fn2, fp) { if (typeof fp !== 'string') { @@ -83405,7 +83501,7 @@ exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 707 */ +/* 709 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83496,17 +83592,17 @@ module.exports = (obj, opts) => { /***/ }), -/* 708 */ +/* 710 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(134); const path = __webpack_require__(4); -const fastGlob = __webpack_require__(519); -const gitIgnore = __webpack_require__(709); -const pify = __webpack_require__(710); -const slash = __webpack_require__(711); +const fastGlob = __webpack_require__(521); +const gitIgnore = __webpack_require__(711); +const pify = __webpack_require__(712); +const slash = __webpack_require__(713); const DEFAULT_IGNORE = [ '**/node_modules/**', @@ -83604,7 +83700,7 @@ module.exports.sync = options => { /***/ }), -/* 709 */ +/* 711 */ /***/ (function(module, exports) { // A simple implementation of make-array @@ -84073,7 +84169,7 @@ module.exports = options => new IgnoreBase(options) /***/ }), -/* 710 */ +/* 712 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84148,7 +84244,7 @@ module.exports = (input, options) => { /***/ }), -/* 711 */ +/* 713 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84166,7 +84262,7 @@ module.exports = input => { /***/ }), -/* 712 */ +/* 714 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84179,7 +84275,7 @@ module.exports = input => { -var isGlob = __webpack_require__(713); +var isGlob = __webpack_require__(715); module.exports = function hasGlob(val) { if (val == null) return false; @@ -84199,7 +84295,7 @@ module.exports = function hasGlob(val) { /***/ }), -/* 713 */ +/* 715 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -84230,17 +84326,17 @@ module.exports = function isGlob(str) { /***/ }), -/* 714 */ +/* 716 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); const {constants: fsConstants} = __webpack_require__(134); -const pEvent = __webpack_require__(715); -const CpFileError = __webpack_require__(718); -const fs = __webpack_require__(720); -const ProgressEmitter = __webpack_require__(723); +const pEvent = __webpack_require__(717); +const CpFileError = __webpack_require__(720); +const fs = __webpack_require__(722); +const ProgressEmitter = __webpack_require__(725); const cpFileAsync = async (source, destination, options, progressEmitter) => { let readError; @@ -84354,12 +84450,12 @@ module.exports.sync = (source, destination, options) => { /***/ }), -/* 715 */ +/* 717 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pTimeout = __webpack_require__(716); +const pTimeout = __webpack_require__(718); const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; @@ -84650,12 +84746,12 @@ module.exports.iterator = (emitter, event, options) => { /***/ }), -/* 716 */ +/* 718 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pFinally = __webpack_require__(717); +const pFinally = __webpack_require__(719); class TimeoutError extends Error { constructor(message) { @@ -84701,7 +84797,7 @@ module.exports.TimeoutError = TimeoutError; /***/ }), -/* 717 */ +/* 719 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84723,12 +84819,12 @@ module.exports = (promise, onFinally) => { /***/ }), -/* 718 */ +/* 720 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(719); +const NestedError = __webpack_require__(721); class CpFileError extends NestedError { constructor(message, nested) { @@ -84742,7 +84838,7 @@ module.exports = CpFileError; /***/ }), -/* 719 */ +/* 721 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(112).inherits; @@ -84798,16 +84894,16 @@ module.exports = NestedError; /***/ }), -/* 720 */ +/* 722 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(112); const fs = __webpack_require__(133); -const makeDir = __webpack_require__(721); -const pEvent = __webpack_require__(715); -const CpFileError = __webpack_require__(718); +const makeDir = __webpack_require__(723); +const pEvent = __webpack_require__(717); +const CpFileError = __webpack_require__(720); const stat = promisify(fs.stat); const lstat = promisify(fs.lstat); @@ -84904,7 +85000,7 @@ exports.copyFileSync = (source, destination, flags) => { /***/ }), -/* 721 */ +/* 723 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84912,7 +85008,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__(722); +const semver = __webpack_require__(724); const useNativeRecursiveOption = semver.satisfies(process.version, '>=10.12.0'); @@ -85067,7 +85163,7 @@ module.exports.sync = (input, options) => { /***/ }), -/* 722 */ +/* 724 */ /***/ (function(module, exports) { exports = module.exports = SemVer @@ -86669,7 +86765,7 @@ function coerce (version, options) { /***/ }), -/* 723 */ +/* 725 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86710,7 +86806,7 @@ module.exports = ProgressEmitter; /***/ }), -/* 724 */ +/* 726 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86756,12 +86852,12 @@ exports.default = module.exports; /***/ }), -/* 725 */ +/* 727 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pMap = __webpack_require__(726); +const pMap = __webpack_require__(728); const pFilter = async (iterable, filterer, options) => { const values = await pMap( @@ -86778,7 +86874,7 @@ module.exports.default = pFilter; /***/ }), -/* 726 */ +/* 728 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -86857,12 +86953,12 @@ module.exports.default = pMap; /***/ }), -/* 727 */ +/* 729 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(719); +const NestedError = __webpack_require__(721); class CpyError extends NestedError { constructor(message, nested) { From 2cc66c1a6d9f5597609d10e0fb092bdd01ba2ae6 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 09:37:12 -0700 Subject: [PATCH 5/6] filter out stack trace from snapshot --- .../lib/docs/index_doc_records_stream.test.ts | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts index 14ada6c882d50..bb96d64b7b1f6 100644 --- a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts @@ -6,12 +6,49 @@ * Public License, v 1. */ -import { createListStream, createPromiseFromStreams, ToolingLog } from '@kbn/dev-utils'; +import { + createListStream, + createPromiseFromStreams, + ToolingLog, + createAbsolutePathSerializer, + createRecursiveSerializer, +} from '@kbn/dev-utils'; import { Progress } from '../progress'; import { createIndexDocRecordsStream } from './index_doc_records_stream'; import { createStats } from '../stats'; +const AT_LINE_RE = /^\s+at /m; + +expect.addSnapshotSerializer( + createRecursiveSerializer( + (v) => typeof v === 'string' && AT_LINE_RE.test(v), + (v: string) => { + const lines = v.split('\n'); + const withoutStack: string[] = []; + + // move source lines to withoutStack, filtering out stacktrace lines + while (lines.length) { + const line = lines.shift()!; + + if (!AT_LINE_RE.test(line)) { + withoutStack.push(line); + } else { + // push in representation of stack trace indented to match "at" + withoutStack.push(`${' '.repeat(line.indexOf('at'))}`); + + // shift off all subsequent `at ...` lines + while (lines.length && AT_LINE_RE.test(lines[0])) { + lines.shift(); + } + } + } + + return withoutStack.join('\n'); + } + ) +); + const log = new ToolingLog(); class MockClient { @@ -233,21 +270,15 @@ describe('bulk helper onDrop param', () => { Error: Bulk doc failure [operation=index]: doc: {\\"hello\\":\\"world\\"} error: {\\"reason\\":\\"1 conflicts with something\\"} - at Array.map () - at indexDocs (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:49:13) - at Writable.writev [as _writev] (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:73:9) + Error: Bulk doc failure [operation=index]: doc: {\\"hello\\":\\"world\\"} error: {\\"reason\\":\\"2 conflicts with something\\"} - at Array.map () - at indexDocs (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:49:13) - at Writable.writev [as _writev] (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:73:9) + Error: Bulk doc failure [operation=index]: doc: {\\"hello\\":\\"world\\"} error: {\\"reason\\":\\"3 conflicts with something\\"} - at Array.map () - at indexDocs (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:49:13) - at Writable.writev [as _writev] (/Users/spalger/kbn-dev/master/kibana/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.ts:73:9)" + " `); }); }); From eb138b3e7d05cb5b291dbc9e8a018020a60aed56 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 1 Feb 2021 09:44:14 -0700 Subject: [PATCH 6/6] remove unused import --- .../src/lib/docs/index_doc_records_stream.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts index bb96d64b7b1f6..a86359262bd41 100644 --- a/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts +++ b/packages/kbn-es-archiver/src/lib/docs/index_doc_records_stream.test.ts @@ -10,7 +10,6 @@ import { createListStream, createPromiseFromStreams, ToolingLog, - createAbsolutePathSerializer, createRecursiveSerializer, } from '@kbn/dev-utils';