mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 11:05:39 -04:00
Remove bluebird dependency (#118097)
This commit is contained in:
parent
9dbb1d841e
commit
788db0dd9d
50 changed files with 631 additions and 626 deletions
|
@ -193,7 +193,6 @@
|
||||||
"archiver": "^5.2.0",
|
"archiver": "^5.2.0",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"base64-js": "^1.3.1",
|
"base64-js": "^1.3.1",
|
||||||
"bluebird": "3.5.5",
|
|
||||||
"brace": "0.11.1",
|
"brace": "0.11.1",
|
||||||
"broadcast-channel": "^4.2.0",
|
"broadcast-channel": "^4.2.0",
|
||||||
"chalk": "^4.1.0",
|
"chalk": "^4.1.0",
|
||||||
|
@ -494,7 +493,6 @@
|
||||||
"@types/archiver": "^5.1.0",
|
"@types/archiver": "^5.1.0",
|
||||||
"@types/babel__core": "^7.1.16",
|
"@types/babel__core": "^7.1.16",
|
||||||
"@types/base64-js": "^1.2.5",
|
"@types/base64-js": "^1.2.5",
|
||||||
"@types/bluebird": "^3.1.1",
|
|
||||||
"@types/chance": "^1.0.0",
|
"@types/chance": "^1.0.0",
|
||||||
"@types/chroma-js": "^1.4.2",
|
"@types/chroma-js": "^1.4.2",
|
||||||
"@types/chromedriver": "^81.0.0",
|
"@types/chromedriver": "^81.0.0",
|
||||||
|
|
|
@ -34,7 +34,6 @@ RUNTIME_DEPS = [
|
||||||
"//packages/kbn-utils",
|
"//packages/kbn-utils",
|
||||||
"@npm//@elastic/elasticsearch",
|
"@npm//@elastic/elasticsearch",
|
||||||
"@npm//aggregate-error",
|
"@npm//aggregate-error",
|
||||||
"@npm//bluebird",
|
|
||||||
"@npm//chance",
|
"@npm//chance",
|
||||||
"@npm//globby",
|
"@npm//globby",
|
||||||
"@npm//json-stable-stringify",
|
"@npm//json-stable-stringify",
|
||||||
|
@ -51,7 +50,6 @@ TYPES_DEPS = [
|
||||||
"@npm//aggregate-error",
|
"@npm//aggregate-error",
|
||||||
"@npm//globby",
|
"@npm//globby",
|
||||||
"@npm//zlib",
|
"@npm//zlib",
|
||||||
"@npm//@types/bluebird",
|
|
||||||
"@npm//@types/chance",
|
"@npm//@types/chance",
|
||||||
"@npm//@types/jest",
|
"@npm//@types/jest",
|
||||||
"@npm//@types/json-stable-stringify",
|
"@npm//@types/json-stable-stringify",
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { resolve, relative } from 'path';
|
import { resolve, relative } from 'path';
|
||||||
import { stat, Stats, rename, createReadStream, createWriteStream } from 'fs';
|
import { Stats, createReadStream, createWriteStream } from 'fs';
|
||||||
|
import { stat, rename } from 'fs/promises';
|
||||||
import { Readable, Writable } from 'stream';
|
import { Readable, Writable } from 'stream';
|
||||||
import { fromNode } from 'bluebird';
|
|
||||||
import { ToolingLog, REPO_ROOT } from '@kbn/dev-utils';
|
import { ToolingLog, REPO_ROOT } from '@kbn/dev-utils';
|
||||||
import { createPromiseFromStreams } from '@kbn/utils';
|
import { createPromiseFromStreams } from '@kbn/utils';
|
||||||
import {
|
import {
|
||||||
|
@ -21,7 +21,7 @@ import {
|
||||||
} from '../lib';
|
} from '../lib';
|
||||||
|
|
||||||
async function isDirectory(path: string): Promise<boolean> {
|
async function isDirectory(path: string): Promise<boolean> {
|
||||||
const stats: Stats = await fromNode((cb) => stat(path, cb));
|
const stats: Stats = await stat(path);
|
||||||
return stats.isDirectory();
|
return stats.isDirectory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ export async function rebuildAllAction({ dataDir, log }: { dataDir: string; log:
|
||||||
createWriteStream(tempFile),
|
createWriteStream(tempFile),
|
||||||
] as [Readable, ...Writable[]]);
|
] as [Readable, ...Writable[]]);
|
||||||
|
|
||||||
await fromNode((cb) => rename(tempFile, childPath, cb));
|
await rename(tempFile, childPath);
|
||||||
log.info('[%s] Rebuilt %j', archiveName, childName);
|
log.info('[%s] Rebuilt %j', archiveName, childName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,9 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { readdir } from 'fs';
|
import { readdir } from 'fs/promises';
|
||||||
import { fromNode } from 'bluebird';
|
|
||||||
|
|
||||||
export async function readDirectory(path: string) {
|
export async function readDirectory(path: string) {
|
||||||
const allNames = await fromNode<string[]>((cb) => readdir(path, cb));
|
const allNames = await readdir(path);
|
||||||
return allNames.filter((name) => !name.startsWith('.'));
|
return allNames.filter((name) => !name.startsWith('.'));
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
return {
|
return {
|
||||||
|
@ -22,13 +22,13 @@ export default function () {
|
||||||
|
|
||||||
lifecycle.testFailure.add(async (err, test) => {
|
lifecycle.testFailure.add(async (err, test) => {
|
||||||
log.info('testFailure %s %s', err.message, test.fullTitle());
|
log.info('testFailure %s %s', err.message, test.fullTitle());
|
||||||
await delay(10);
|
await setTimeoutAsync(10);
|
||||||
log.info('testFailureAfterDelay %s %s', err.message, test.fullTitle());
|
log.info('testFailureAfterDelay %s %s', err.message, test.fullTitle());
|
||||||
});
|
});
|
||||||
|
|
||||||
lifecycle.testHookFailure.add(async (err, test) => {
|
lifecycle.testHookFailure.add(async (err, test) => {
|
||||||
log.info('testHookFailure %s %s', err.message, test.fullTitle());
|
log.info('testHookFailure %s %s', err.message, test.fullTitle());
|
||||||
await delay(10);
|
await setTimeoutAsync(10);
|
||||||
log.info('testHookFailureAfterDelay %s %s', err.message, test.fullTitle());
|
log.info('testHookFailureAfterDelay %s %s', err.message, test.fullTitle());
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -6,13 +6,6 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// bluebird < v3.3.5 does not work with MutationObserver polyfill
|
|
||||||
// when MutationObserver exists, bluebird avoids using node's builtin async schedulers
|
|
||||||
const bluebird = require('bluebird');
|
|
||||||
bluebird.Promise.setScheduler(function (fn) {
|
|
||||||
global.setImmediate.call(global, fn);
|
|
||||||
});
|
|
||||||
|
|
||||||
const MutationObserver = require('mutation-observer');
|
const MutationObserver = require('mutation-observer');
|
||||||
Object.defineProperty(window, 'MutationObserver', { value: MutationObserver });
|
Object.defineProperty(window, 'MutationObserver', { value: MutationObserver });
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { readFileSync } from 'fs';
|
import { readFile } from 'fs/promises';
|
||||||
|
import { promisify } from 'util';
|
||||||
|
|
||||||
import { fromNode as fcb } from 'bluebird';
|
|
||||||
import { parseString } from 'xml2js';
|
import { parseString } from 'xml2js';
|
||||||
import del from 'del';
|
import del from 'del';
|
||||||
import Mocha from 'mocha';
|
import Mocha from 'mocha';
|
||||||
|
@ -22,6 +22,8 @@ const DURATION_REGEX = /^\d+\.\d{3}$/;
|
||||||
const ISO_DATE_SEC_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/;
|
const ISO_DATE_SEC_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/;
|
||||||
const XML_PATH = getUniqueJunitReportPath(PROJECT_DIR, 'test');
|
const XML_PATH = getUniqueJunitReportPath(PROJECT_DIR, 'test');
|
||||||
|
|
||||||
|
const parseStringAsync = promisify(parseString);
|
||||||
|
|
||||||
describe('dev/mocha/junit report generation', () => {
|
describe('dev/mocha/junit report generation', () => {
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
del.sync(resolve(PROJECT_DIR, 'target'));
|
del.sync(resolve(PROJECT_DIR, 'target'));
|
||||||
|
@ -39,7 +41,7 @@ describe('dev/mocha/junit report generation', () => {
|
||||||
|
|
||||||
mocha.addFile(resolve(PROJECT_DIR, 'test.js'));
|
mocha.addFile(resolve(PROJECT_DIR, 'test.js'));
|
||||||
await new Promise((resolve) => mocha.run(resolve));
|
await new Promise((resolve) => mocha.run(resolve));
|
||||||
const report = await fcb((cb) => parseString(readFileSync(XML_PATH), cb));
|
const report = await parseStringAsync(await readFile(XML_PATH));
|
||||||
|
|
||||||
// test case results are wrapped in <testsuites></testsuites>
|
// test case results are wrapped in <testsuites></testsuites>
|
||||||
expect(report).toEqual({
|
expect(report).toEqual({
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
|
|
||||||
import { createPromiseFromStreams } from './promise_from_streams';
|
import { createPromiseFromStreams } from './promise_from_streams';
|
||||||
import { createListStream } from './list_stream';
|
import { createListStream } from './list_stream';
|
||||||
|
@ -39,7 +39,7 @@ describe('createMapStream()', () => {
|
||||||
const result = await createPromiseFromStreams([
|
const result = await createPromiseFromStreams([
|
||||||
createListStream([1, 2, 3]),
|
createListStream([1, 2, 3]),
|
||||||
createMapStream(async (n: number, i: number) => {
|
createMapStream(async (n: number, i: number) => {
|
||||||
await delay(n);
|
await setTimeoutAsync(n);
|
||||||
return n * i;
|
return n * i;
|
||||||
}),
|
}),
|
||||||
createConcatStream([]),
|
createConcatStream([]),
|
||||||
|
|
|
@ -7,18 +7,20 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { readFile } from 'fs';
|
import { readFile } from 'fs/promises';
|
||||||
|
import { promisify } from 'util';
|
||||||
|
|
||||||
import { fromNode as fcb } from 'bluebird';
|
|
||||||
import glob from 'glob';
|
import glob from 'glob';
|
||||||
|
|
||||||
|
const globAsync = promisify(glob);
|
||||||
|
|
||||||
export async function getBundledNotices(packageDirectory) {
|
export async function getBundledNotices(packageDirectory) {
|
||||||
const pattern = resolve(packageDirectory, '*{LICENSE,NOTICE}*');
|
const pattern = resolve(packageDirectory, '*{LICENSE,NOTICE}*');
|
||||||
const paths = await fcb((cb) => glob(pattern, cb));
|
const paths = await globAsync(pattern);
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
paths.map(async (path) => ({
|
paths.map(async (path) => ({
|
||||||
path,
|
path,
|
||||||
text: await fcb((cb) => readFile(path, 'utf8', cb)),
|
text: await readFile(path, 'utf8'),
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import SimpleGit from 'simple-git';
|
import SimpleGit from 'simple-git/promise';
|
||||||
import { fromNode as fcb } from 'bluebird';
|
|
||||||
|
|
||||||
import { REPO_ROOT } from '@kbn/utils';
|
import { REPO_ROOT } from '@kbn/utils';
|
||||||
import { File } from '../file';
|
import { File } from '../file';
|
||||||
|
@ -22,7 +21,7 @@ import { File } from '../file';
|
||||||
export async function getFilesForCommit(gitRef) {
|
export async function getFilesForCommit(gitRef) {
|
||||||
const simpleGit = new SimpleGit(REPO_ROOT);
|
const simpleGit = new SimpleGit(REPO_ROOT);
|
||||||
const gitRefForDiff = gitRef ? gitRef : '--cached';
|
const gitRefForDiff = gitRef ? gitRef : '--cached';
|
||||||
const output = await fcb((cb) => simpleGit.diff(['--name-status', gitRefForDiff], cb));
|
const output = await simpleGit.diff(['--name-status', gitRefForDiff]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
output
|
output
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import { createSavedObjectClass } from './saved_object';
|
import { createSavedObjectClass } from './saved_object';
|
||||||
import {
|
import {
|
||||||
SavedObject,
|
SavedObject,
|
||||||
|
@ -55,16 +54,16 @@ describe('Saved Object', () => {
|
||||||
*/
|
*/
|
||||||
function stubESResponse(mockDocResponse: SimpleSavedObject<SavedObjectAttributes>) {
|
function stubESResponse(mockDocResponse: SimpleSavedObject<SavedObjectAttributes>) {
|
||||||
// Stub out search for duplicate title:
|
// Stub out search for duplicate title:
|
||||||
savedObjectsClientStub.get = jest.fn().mockReturnValue(Bluebird.resolve(mockDocResponse));
|
savedObjectsClientStub.get = jest.fn().mockReturnValue(Promise.resolve(mockDocResponse));
|
||||||
savedObjectsClientStub.update = jest.fn().mockReturnValue(Bluebird.resolve(mockDocResponse));
|
savedObjectsClientStub.update = jest.fn().mockReturnValue(Promise.resolve(mockDocResponse));
|
||||||
|
|
||||||
savedObjectsClientStub.find = jest
|
savedObjectsClientStub.find = jest
|
||||||
.fn()
|
.fn()
|
||||||
.mockReturnValue(Bluebird.resolve({ savedObjects: [], total: 0 }));
|
.mockReturnValue(Promise.resolve({ savedObjects: [], total: 0 }));
|
||||||
|
|
||||||
savedObjectsClientStub.bulkGet = jest
|
savedObjectsClientStub.bulkGet = jest
|
||||||
.fn()
|
.fn()
|
||||||
.mockReturnValue(Bluebird.resolve({ savedObjects: [mockDocResponse] }));
|
.mockReturnValue(Promise.resolve({ savedObjects: [mockDocResponse] }));
|
||||||
}
|
}
|
||||||
|
|
||||||
function stubSavedObjectsClientCreate(
|
function stubSavedObjectsClientCreate(
|
||||||
|
@ -73,7 +72,7 @@ describe('Saved Object', () => {
|
||||||
) {
|
) {
|
||||||
savedObjectsClientStub.create = jest
|
savedObjectsClientStub.create = jest
|
||||||
.fn()
|
.fn()
|
||||||
.mockReturnValue(resolve ? Bluebird.resolve(resp) : Bluebird.reject(resp));
|
.mockReturnValue(resolve ? Promise.resolve(resp) : Promise.reject(resp));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -262,7 +261,7 @@ describe('Saved Object', () => {
|
||||||
return createInitializedSavedObject({ type: 'dashboard', id: myId }).then((savedObject) => {
|
return createInitializedSavedObject({ type: 'dashboard', id: myId }).then((savedObject) => {
|
||||||
savedObjectsClientStub.create = jest.fn().mockImplementation(() => {
|
savedObjectsClientStub.create = jest.fn().mockImplementation(() => {
|
||||||
expect(savedObject.id).toBe(myId);
|
expect(savedObject.id).toBe(myId);
|
||||||
return Bluebird.resolve({ id: myId });
|
return Promise.resolve({ id: myId });
|
||||||
});
|
});
|
||||||
savedObject.copyOnSave = false;
|
savedObject.copyOnSave = false;
|
||||||
|
|
||||||
|
@ -296,7 +295,7 @@ describe('Saved Object', () => {
|
||||||
return createInitializedSavedObject({ type: 'dashboard', id }).then((savedObject) => {
|
return createInitializedSavedObject({ type: 'dashboard', id }).then((savedObject) => {
|
||||||
savedObjectsClientStub.create = jest.fn().mockImplementation(() => {
|
savedObjectsClientStub.create = jest.fn().mockImplementation(() => {
|
||||||
expect(savedObject.isSaving).toBe(true);
|
expect(savedObject.isSaving).toBe(true);
|
||||||
return Bluebird.resolve({
|
return Promise.resolve({
|
||||||
type: 'dashboard',
|
type: 'dashboard',
|
||||||
id,
|
id,
|
||||||
_version: 'foo',
|
_version: 'foo',
|
||||||
|
@ -315,7 +314,7 @@ describe('Saved Object', () => {
|
||||||
return createInitializedSavedObject({ type: 'dashboard' }).then((savedObject) => {
|
return createInitializedSavedObject({ type: 'dashboard' }).then((savedObject) => {
|
||||||
savedObjectsClientStub.create = jest.fn().mockImplementation(() => {
|
savedObjectsClientStub.create = jest.fn().mockImplementation(() => {
|
||||||
expect(savedObject.isSaving).toBe(true);
|
expect(savedObject.isSaving).toBe(true);
|
||||||
return Bluebird.reject('');
|
return Promise.reject('');
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(savedObject.isSaving).toBe(false);
|
expect(savedObject.isSaving).toBe(false);
|
||||||
|
@ -745,7 +744,7 @@ describe('Saved Object', () => {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
savedObject.searchSource!.setField('index', indexPattern);
|
savedObject.searchSource!.setField('index', indexPattern);
|
||||||
return Bluebird.resolve(indexPattern);
|
return Promise.resolve(indexPattern);
|
||||||
});
|
});
|
||||||
expect(!!savedObject.searchSource!.getField('index')).toBe(false);
|
expect(!!savedObject.searchSource!.getField('index')).toBe(false);
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import { i18n } from '@kbn/i18n';
|
import { i18n } from '@kbn/i18n';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
|
@ -42,7 +41,7 @@ export default function chainRunner(tlConfig) {
|
||||||
|
|
||||||
function resolveArgument(item) {
|
function resolveArgument(item) {
|
||||||
if (Array.isArray(item)) {
|
if (Array.isArray(item)) {
|
||||||
return Bluebird.all(_.map(item, resolveArgument));
|
return Promise.all(_.map(item, resolveArgument));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_.isObject(item)) {
|
if (_.isObject(item)) {
|
||||||
|
@ -51,7 +50,7 @@ export default function chainRunner(tlConfig) {
|
||||||
const itemFunctionDef = tlConfig.getFunction(item.function);
|
const itemFunctionDef = tlConfig.getFunction(item.function);
|
||||||
if (itemFunctionDef.cacheKey && queryCache[itemFunctionDef.cacheKey(item)]) {
|
if (itemFunctionDef.cacheKey && queryCache[itemFunctionDef.cacheKey(item)]) {
|
||||||
stats.queryCount++;
|
stats.queryCount++;
|
||||||
return Bluebird.resolve(_.cloneDeep(queryCache[itemFunctionDef.cacheKey(item)]));
|
return Promise.resolve(_.cloneDeep(queryCache[itemFunctionDef.cacheKey(item)]));
|
||||||
}
|
}
|
||||||
return invoke(item.function, item.arguments);
|
return invoke(item.function, item.arguments);
|
||||||
}
|
}
|
||||||
|
@ -94,7 +93,7 @@ export default function chainRunner(tlConfig) {
|
||||||
|
|
||||||
args = _.map(args, resolveArgument);
|
args = _.map(args, resolveArgument);
|
||||||
|
|
||||||
return Bluebird.all(args).then(function (args) {
|
return Promise.all(args).then(function (args) {
|
||||||
args.byName = indexArguments(functionDef, args);
|
args.byName = indexArguments(functionDef, args);
|
||||||
return functionDef.fn(args, tlConfig);
|
return functionDef.fn(args, tlConfig);
|
||||||
});
|
});
|
||||||
|
@ -128,7 +127,7 @@ export default function chainRunner(tlConfig) {
|
||||||
return args;
|
return args;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return Bluebird.all(seriesList).then(function (args) {
|
return Promise.all(seriesList).then(function (args) {
|
||||||
const list = _.chain(args).map('list').flatten().value();
|
const list = _.chain(args).map('list').flatten().value();
|
||||||
const seriesList = _.merge.apply(this, _.flatten([{}, args]));
|
const seriesList = _.merge.apply(this, _.flatten([{}, args]));
|
||||||
seriesList.list = list;
|
seriesList.list = list;
|
||||||
|
@ -158,22 +157,22 @@ export default function chainRunner(tlConfig) {
|
||||||
})
|
})
|
||||||
.value();
|
.value();
|
||||||
|
|
||||||
return Bluebird.settle(promises).then(function (resolvedDatasources) {
|
return Promise.allSettled(promises).then(function (resolvedDatasources) {
|
||||||
stats.queryTime = new Date().getTime();
|
stats.queryTime = new Date().getTime();
|
||||||
|
|
||||||
_.each(queries, function (query, i) {
|
_.each(queries, function (query, i) {
|
||||||
const functionDef = tlConfig.getFunction(query.function);
|
const functionDef = tlConfig.getFunction(query.function);
|
||||||
const resolvedDatasource = resolvedDatasources[i];
|
const resolvedDatasource = resolvedDatasources[i];
|
||||||
|
|
||||||
if (resolvedDatasource.isRejected()) {
|
if (resolvedDatasource.status === 'rejected') {
|
||||||
if (resolvedDatasource.reason().isBoom) {
|
if (resolvedDatasource.reason.isBoom) {
|
||||||
throw resolvedDatasource.reason();
|
throw resolvedDatasource.reason;
|
||||||
} else {
|
} else {
|
||||||
throwWithCell(query.cell, resolvedDatasource.reason());
|
throwWithCell(query.cell, resolvedDatasource.reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
queryCache[functionDef.cacheKey(query)] = resolvedDatasource.value();
|
queryCache[functionDef.cacheKey(query)] = resolvedDatasource.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
stats.cacheCount = _.keys(queryCache).length;
|
stats.cacheCount = _.keys(queryCache).length;
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
/* @param {Array} args
|
/* @param {Array} args
|
||||||
|
@ -18,7 +17,7 @@ import _ from 'lodash';
|
||||||
|
|
||||||
export default function alter(args, fn) {
|
export default function alter(args, fn) {
|
||||||
// In theory none of the args should ever be promises. This is probably a waste.
|
// In theory none of the args should ever be promises. This is probably a waste.
|
||||||
return Bluebird.all(args)
|
return Promise.all(args)
|
||||||
.then(function (args) {
|
.then(function (args) {
|
||||||
const seriesList = args.shift();
|
const seriesList = args.shift();
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
import { IRouter, Logger, CoreSetup } from 'kibana/server';
|
import { IRouter, Logger, CoreSetup } from 'kibana/server';
|
||||||
import { schema } from '@kbn/config-schema';
|
import { schema } from '@kbn/config-schema';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import chainRunnerFn from '../handlers/chain_runner.js';
|
import chainRunnerFn from '../handlers/chain_runner.js';
|
||||||
|
@ -96,7 +95,7 @@ export function runRoute(
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
const chainRunner = chainRunnerFn(tlConfig);
|
const chainRunner = chainRunnerFn(tlConfig);
|
||||||
const sheet = await Bluebird.all(chainRunner.processRequest(request.body));
|
const sheet = await Promise.all(await chainRunner.processRequest(request.body));
|
||||||
return response.ok({
|
return response.ok({
|
||||||
body: {
|
body: {
|
||||||
sheet,
|
sheet,
|
||||||
|
|
|
@ -10,7 +10,6 @@ import { i18n } from '@kbn/i18n';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
fetch.Promise = require('bluebird');
|
|
||||||
|
|
||||||
import Datasource from '../lib/classes/datasource';
|
import Datasource from '../lib/classes/datasource';
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
import { i18n } from '@kbn/i18n';
|
import { i18n } from '@kbn/i18n';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import Datasource from '../lib/classes/datasource';
|
import Datasource from '../lib/classes/datasource';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
|
|
||||||
export default new Datasource('static', {
|
export default new Datasource('static', {
|
||||||
aliases: ['value'],
|
aliases: ['value'],
|
||||||
|
@ -51,7 +50,7 @@ export default new Datasource('static', {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return Bluebird.resolve({
|
return Promise.resolve({
|
||||||
type: 'seriesList',
|
type: 'seriesList',
|
||||||
list: [
|
list: [
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
import { i18n } from '@kbn/i18n';
|
import { i18n } from '@kbn/i18n';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import worldbank from './worldbank.js';
|
import worldbank from './worldbank.js';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import Datasource from '../lib/classes/datasource';
|
import Datasource from '../lib/classes/datasource';
|
||||||
|
|
||||||
export default new Datasource('worldbank_indicators', {
|
export default new Datasource('worldbank_indicators', {
|
||||||
|
@ -61,9 +60,11 @@ export default new Datasource('worldbank_indicators', {
|
||||||
return worldbank.timelionFn(wbArgs, tlConfig);
|
return worldbank.timelionFn(wbArgs, tlConfig);
|
||||||
});
|
});
|
||||||
|
|
||||||
return Bluebird.map(seriesLists, function (seriesList) {
|
return Promise.all(
|
||||||
|
seriesLists.map(function (seriesList) {
|
||||||
return seriesList.list[0];
|
return seriesList.list[0];
|
||||||
}).then(function (list) {
|
})
|
||||||
|
).then(function (list) {
|
||||||
return {
|
return {
|
||||||
type: 'seriesList',
|
type: 'seriesList',
|
||||||
list: list,
|
list: list,
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import fn from './yaxis';
|
import fn from './yaxis';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
const expect = require('chai').expect;
|
const expect = require('chai').expect;
|
||||||
import invoke from './helpers/invoke_series_fn.js';
|
import invoke from './helpers/invoke_series_fn.js';
|
||||||
|
|
||||||
|
@ -25,7 +24,7 @@ describe('yaxis.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('puts odd numbers of the left, even on the right, by default', () => {
|
it('puts odd numbers of the left, even on the right, by default', () => {
|
||||||
return Bluebird.all([
|
return Promise.all([
|
||||||
invoke(fn, [seriesList, 1]).then((r) => {
|
invoke(fn, [seriesList, 1]).then((r) => {
|
||||||
expect(r.output.list[0]._global.yaxes[0].position).to.equal('left');
|
expect(r.output.list[0]._global.yaxes[0].position).to.equal('left');
|
||||||
}),
|
}),
|
||||||
|
@ -39,7 +38,7 @@ describe('yaxis.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('it lets you override default positions', () => {
|
it('it lets you override default positions', () => {
|
||||||
return Bluebird.all([
|
return Promise.all([
|
||||||
invoke(fn, [seriesList, 1, null, null, 'right']).then((r) => {
|
invoke(fn, [seriesList, 1, null, null, 'right']).then((r) => {
|
||||||
expect(r.output.list[0]._global.yaxes[0].position).to.equal('right');
|
expect(r.output.list[0]._global.yaxes[0].position).to.equal('right');
|
||||||
}),
|
}),
|
||||||
|
@ -50,7 +49,7 @@ describe('yaxis.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('sets the minimum (default: no min)', () => {
|
it('sets the minimum (default: no min)', () => {
|
||||||
return Bluebird.all([
|
return Promise.all([
|
||||||
invoke(fn, [seriesList, 1, null]).then((r) => {
|
invoke(fn, [seriesList, 1, null]).then((r) => {
|
||||||
expect(r.output.list[0]._global.yaxes[0].min).to.equal(null);
|
expect(r.output.list[0]._global.yaxes[0].min).to.equal(null);
|
||||||
}),
|
}),
|
||||||
|
@ -61,7 +60,7 @@ describe('yaxis.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('sets the max (default: no max)', () => {
|
it('sets the max (default: no max)', () => {
|
||||||
return Bluebird.all([
|
return Promise.all([
|
||||||
invoke(fn, [seriesList, 1, null]).then((r) => {
|
invoke(fn, [seriesList, 1, null]).then((r) => {
|
||||||
expect(r.output.list[0]._global.yaxes[0].max).to.equal(undefined);
|
expect(r.output.list[0]._global.yaxes[0].max).to.equal(undefined);
|
||||||
}),
|
}),
|
||||||
|
@ -72,7 +71,7 @@ describe('yaxis.js', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('sets the units (default: no unit', () => {
|
it('sets the units (default: no unit', () => {
|
||||||
return Bluebird.all([
|
return Promise.all([
|
||||||
invoke(fn, [seriesList, 1, null, null, null, null, null, null]).then((r) => {
|
invoke(fn, [seriesList, 1, null, null, null, null, null, null]).then((r) => {
|
||||||
expect(r.output.list[0]._global.yaxes[0].units).to.equal(undefined);
|
expect(r.output.list[0]._global.yaxes[0].units).to.equal(undefined);
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import { get } from 'lodash';
|
import { get } from 'lodash';
|
||||||
import { FtrProviderContext } from '../../ftr_provider_context';
|
import { FtrProviderContext } from '../../ftr_provider_context';
|
||||||
|
|
||||||
|
@ -89,7 +88,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should only accept literal boolean values for the opt_in POST body param', function () {
|
it('should only accept literal boolean values for the opt_in POST body param', function () {
|
||||||
return Bluebird.all([
|
return Promise.all([
|
||||||
supertest
|
supertest
|
||||||
.post('/api/kibana/kql_opt_in_stats')
|
.post('/api/kibana/kql_opt_in_stats')
|
||||||
.set('content-type', 'application/json')
|
.set('content-type', 'application/json')
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
|
@ -214,7 +214,7 @@ export class CommonPageObject extends FtrService {
|
||||||
|
|
||||||
async sleep(sleepMilliseconds: number) {
|
async sleep(sleepMilliseconds: number) {
|
||||||
this.log.debug(`... sleep(${sleepMilliseconds}) start`);
|
this.log.debug(`... sleep(${sleepMilliseconds}) start`);
|
||||||
await delay(sleepMilliseconds);
|
await setTimeoutAsync(sleepMilliseconds);
|
||||||
this.log.debug(`... sleep(${sleepMilliseconds}) end`);
|
this.log.debug(`... sleep(${sleepMilliseconds}) end`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { FtrService } from '../ftr_provider_context';
|
import { FtrService } from '../ftr_provider_context';
|
||||||
|
|
||||||
export class LoginPageObject extends FtrService {
|
export class LoginPageObject extends FtrService {
|
||||||
|
@ -40,7 +40,7 @@ export class LoginPageObject extends FtrService {
|
||||||
|
|
||||||
async sleep(sleepMilliseconds: number) {
|
async sleep(sleepMilliseconds: number) {
|
||||||
this.log.debug(`... sleep(${sleepMilliseconds}) start`);
|
this.log.debug(`... sleep(${sleepMilliseconds}) start`);
|
||||||
await delay(sleepMilliseconds);
|
await setTimeoutAsync(sleepMilliseconds);
|
||||||
this.log.debug(`... sleep(${sleepMilliseconds}) end`);
|
this.log.debug(`... sleep(${sleepMilliseconds}) end`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { keyBy } from 'lodash';
|
import { keyBy } from 'lodash';
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
import { FtrService } from '../../ftr_provider_context';
|
import { FtrService } from '../../ftr_provider_context';
|
||||||
|
|
||||||
export class SavedObjectsPageObject extends FtrService {
|
export class SavedObjectsPageObject extends FtrService {
|
||||||
|
@ -201,7 +200,8 @@ export class SavedObjectsPageObject extends FtrService {
|
||||||
|
|
||||||
async getElementsInTable() {
|
async getElementsInTable() {
|
||||||
const rows = await this.testSubjects.findAll('~savedObjectsTableRow');
|
const rows = await this.testSubjects.findAll('~savedObjectsTableRow');
|
||||||
return mapAsync(rows, async (row) => {
|
return await Promise.all(
|
||||||
|
rows.map(async (row) => {
|
||||||
const checkbox = await row.findByCssSelector('[data-test-subj*="checkboxSelectRow"]');
|
const checkbox = await row.findByCssSelector('[data-test-subj*="checkboxSelectRow"]');
|
||||||
// return the object type aria-label="index patterns"
|
// return the object type aria-label="index patterns"
|
||||||
const objectType = await row.findByTestSubject('objectType');
|
const objectType = await row.findByTestSubject('objectType');
|
||||||
|
@ -228,7 +228,9 @@ export class SavedObjectsPageObject extends FtrService {
|
||||||
inspectElement = await row.findByTestSubject('savedObjectsTableAction-inspect');
|
inspectElement = await row.findByTestSubject('savedObjectsTableAction-inspect');
|
||||||
}
|
}
|
||||||
if (actionsHTML.includes('savedObjectsTableAction-relationships')) {
|
if (actionsHTML.includes('savedObjectsTableAction-relationships')) {
|
||||||
relationshipsElement = await row.findByTestSubject('savedObjectsTableAction-relationships');
|
relationshipsElement = await row.findByTestSubject(
|
||||||
|
'savedObjectsTableAction-relationships'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (actionsHTML.includes('savedObjectsTableAction-copy_saved_objects_to_space')) {
|
if (actionsHTML.includes('savedObjectsTableAction-copy_saved_objects_to_space')) {
|
||||||
copySaveObjectsElement = await row.findByTestSubject(
|
copySaveObjectsElement = await row.findByTestSubject(
|
||||||
|
@ -245,7 +247,8 @@ export class SavedObjectsPageObject extends FtrService {
|
||||||
relationshipsElement,
|
relationshipsElement,
|
||||||
copySaveObjectsElement,
|
copySaveObjectsElement,
|
||||||
};
|
};
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getRowTitles() {
|
async getRowTitles() {
|
||||||
|
@ -259,7 +262,8 @@ export class SavedObjectsPageObject extends FtrService {
|
||||||
|
|
||||||
async getRelationshipFlyout() {
|
async getRelationshipFlyout() {
|
||||||
const rows = await this.testSubjects.findAll('relationshipsTableRow');
|
const rows = await this.testSubjects.findAll('relationshipsTableRow');
|
||||||
return mapAsync(rows, async (row) => {
|
return await Promise.all(
|
||||||
|
rows.map(async (row) => {
|
||||||
const objectType = await row.findByTestSubject('relationshipsObjectType');
|
const objectType = await row.findByTestSubject('relationshipsObjectType');
|
||||||
const relationship = await row.findByTestSubject('directRelationship');
|
const relationship = await row.findByTestSubject('directRelationship');
|
||||||
const titleElement = await row.findByTestSubject('relationshipsTitle');
|
const titleElement = await row.findByTestSubject('relationshipsTitle');
|
||||||
|
@ -271,12 +275,14 @@ export class SavedObjectsPageObject extends FtrService {
|
||||||
title: await titleElement.getVisibleText(),
|
title: await titleElement.getVisibleText(),
|
||||||
inspectElement,
|
inspectElement,
|
||||||
};
|
};
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getInvalidRelations() {
|
async getInvalidRelations() {
|
||||||
const rows = await this.testSubjects.findAll('invalidRelationshipsTableRow');
|
const rows = await this.testSubjects.findAll('invalidRelationshipsTableRow');
|
||||||
return mapAsync(rows, async (row) => {
|
return await Promise.all(
|
||||||
|
rows.map(async (row) => {
|
||||||
const objectType = await row.findByTestSubject('relationshipsObjectType');
|
const objectType = await row.findByTestSubject('relationshipsObjectType');
|
||||||
const objectId = await row.findByTestSubject('relationshipsObjectId');
|
const objectId = await row.findByTestSubject('relationshipsObjectId');
|
||||||
const relationship = await row.findByTestSubject('directRelationship');
|
const relationship = await row.findByTestSubject('directRelationship');
|
||||||
|
@ -287,7 +293,8 @@ export class SavedObjectsPageObject extends FtrService {
|
||||||
relationship: await relationship.getVisibleText(),
|
relationship: await relationship.getVisibleText(),
|
||||||
error: await error.getVisibleText(),
|
error: await error.getVisibleText(),
|
||||||
};
|
};
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getTableSummary() {
|
async getTableSummary() {
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { FtrService } from '../ftr_provider_context';
|
import { FtrService } from '../ftr_provider_context';
|
||||||
|
|
||||||
|
@ -234,23 +233,29 @@ export class SettingsPageObject extends FtrService {
|
||||||
|
|
||||||
async getFieldNames() {
|
async getFieldNames() {
|
||||||
const fieldNameCells = await this.testSubjects.findAll('editIndexPattern > indexedFieldName');
|
const fieldNameCells = await this.testSubjects.findAll('editIndexPattern > indexedFieldName');
|
||||||
return await mapAsync(fieldNameCells, async (cell) => {
|
return await Promise.all(
|
||||||
|
fieldNameCells.map(async (cell) => {
|
||||||
return (await cell.getVisibleText()).trim();
|
return (await cell.getVisibleText()).trim();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getFieldTypes() {
|
async getFieldTypes() {
|
||||||
const fieldNameCells = await this.testSubjects.findAll('editIndexPattern > indexedFieldType');
|
const fieldNameCells = await this.testSubjects.findAll('editIndexPattern > indexedFieldType');
|
||||||
return await mapAsync(fieldNameCells, async (cell) => {
|
return await Promise.all(
|
||||||
|
fieldNameCells.map(async (cell) => {
|
||||||
return (await cell.getVisibleText()).trim();
|
return (await cell.getVisibleText()).trim();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getScriptedFieldLangs() {
|
async getScriptedFieldLangs() {
|
||||||
const fieldNameCells = await this.testSubjects.findAll('editIndexPattern > scriptedFieldLang');
|
const fieldNameCells = await this.testSubjects.findAll('editIndexPattern > scriptedFieldLang');
|
||||||
return await mapAsync(fieldNameCells, async (cell) => {
|
return await Promise.all(
|
||||||
|
fieldNameCells.map(async (cell) => {
|
||||||
return (await cell.getVisibleText()).trim();
|
return (await cell.getVisibleText()).trim();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async setFieldTypeFilter(type: string) {
|
async setFieldTypeFilter(type: string) {
|
||||||
|
@ -327,9 +332,11 @@ export class SettingsPageObject extends FtrService {
|
||||||
|
|
||||||
async getAllIndexPatternNames() {
|
async getAllIndexPatternNames() {
|
||||||
const indexPatterns = await this.getIndexPatternList();
|
const indexPatterns = await this.getIndexPatternList();
|
||||||
return await mapAsync(indexPatterns, async (index) => {
|
return await Promise.all(
|
||||||
|
indexPatterns.map(async (index) => {
|
||||||
return await index.getVisibleText();
|
return await index.getVisibleText();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async isIndexPatternListEmpty() {
|
async isIndexPatternListEmpty() {
|
||||||
|
@ -565,9 +572,11 @@ export class SettingsPageObject extends FtrService {
|
||||||
const table = await this.find.byClassName('euiTable');
|
const table = await this.find.byClassName('euiTable');
|
||||||
await this.retry.waitFor('field filter to be added', async () => {
|
await this.retry.waitFor('field filter to be added', async () => {
|
||||||
const tableCells = await table.findAllByCssSelector('td');
|
const tableCells = await table.findAllByCssSelector('td');
|
||||||
const fieldNames = await mapAsync(tableCells, async (cell) => {
|
const fieldNames = await Promise.all(
|
||||||
|
tableCells.map(async (cell) => {
|
||||||
return (await cell.getVisibleText()).trim();
|
return (await cell.getVisibleText()).trim();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
return fieldNames.includes(name);
|
return fieldNames.includes(name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { cloneDeepWith } from 'lodash';
|
import { cloneDeepWith } from 'lodash';
|
||||||
import { Key, Origin, WebDriver } from 'selenium-webdriver';
|
import { Key, Origin, WebDriver } from 'selenium-webdriver';
|
||||||
// @ts-ignore internal modules are not typed
|
// @ts-ignore internal modules are not typed
|
||||||
|
@ -303,7 +303,7 @@ class BrowserService extends FtrService {
|
||||||
to
|
to
|
||||||
);
|
);
|
||||||
// wait for 150ms to make sure the script has run
|
// wait for 150ms to make sure the script has run
|
||||||
await delay(150);
|
await setTimeoutAsync(150);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import testSubjSelector from '@kbn/test-subj-selector';
|
import testSubjSelector from '@kbn/test-subj-selector';
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
import { WebElementWrapper } from '../lib/web_element_wrapper';
|
import { WebElementWrapper } from '../lib/web_element_wrapper';
|
||||||
import { FtrService } from '../../ftr_provider_context';
|
import { FtrService } from '../../ftr_provider_context';
|
||||||
|
|
||||||
|
@ -271,11 +270,11 @@ export class TestSubjects extends FtrService {
|
||||||
|
|
||||||
private async _mapAll<T>(
|
private async _mapAll<T>(
|
||||||
selectorAll: string,
|
selectorAll: string,
|
||||||
mapFn: (element: WebElementWrapper, index?: number, arrayLength?: number) => Promise<T>
|
mapFn: (element: WebElementWrapper, index: number, array: WebElementWrapper[]) => Promise<T>
|
||||||
): Promise<T[]> {
|
): Promise<T[]> {
|
||||||
return await this.retry.try(async () => {
|
return await this.retry.try(async () => {
|
||||||
const elements = await this.findAll(selectorAll);
|
const elements = await this.findAll(selectorAll);
|
||||||
return await mapAsync(elements, mapFn);
|
return await Promise.all(elements.map(mapFn));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { WebElement, WebDriver, By, Key } from 'selenium-webdriver';
|
import { WebElement, WebDriver, By, Key } from 'selenium-webdriver';
|
||||||
import { PNG } from 'pngjs';
|
import { PNG } from 'pngjs';
|
||||||
import cheerio from 'cheerio';
|
import cheerio from 'cheerio';
|
||||||
|
@ -121,7 +121,7 @@ export class WebElementWrapper {
|
||||||
`finding element '${this.locator.toString()}' again, ${attemptsRemaining - 1} attempts left`
|
`finding element '${this.locator.toString()}' again, ${attemptsRemaining - 1} attempts left`
|
||||||
);
|
);
|
||||||
|
|
||||||
await delay(200);
|
await setTimeoutAsync(200);
|
||||||
this._webElement = await this.driver.findElement(this.locator);
|
this._webElement = await this.driver.findElement(this.locator);
|
||||||
return await this.retryCall(fn, attemptsRemaining - 1);
|
return await this.retryCall(fn, attemptsRemaining - 1);
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ export class WebElementWrapper {
|
||||||
const value = await this.getAttribute('value');
|
const value = await this.getAttribute('value');
|
||||||
for (let i = 0; i <= value.length; i++) {
|
for (let i = 0; i <= value.length; i++) {
|
||||||
await this.pressKeys(this.Keys.BACK_SPACE);
|
await this.pressKeys(this.Keys.BACK_SPACE);
|
||||||
await delay(100);
|
await setTimeoutAsync(100);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (this.isChromium) {
|
if (this.isChromium) {
|
||||||
|
@ -279,7 +279,7 @@ export class WebElementWrapper {
|
||||||
for (const char of value) {
|
for (const char of value) {
|
||||||
await this.retryCall(async function type(wrapper) {
|
await this.retryCall(async function type(wrapper) {
|
||||||
await wrapper._webElement.sendKeys(char);
|
await wrapper._webElement.sendKeys(char);
|
||||||
await delay(100);
|
await setTimeoutAsync(100);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ export async function hasKibanaBooted(context: FtrProviderContext) {
|
||||||
// Run 30 consecutive requests with 1.5s delay to check if Kibana is up and running.
|
// Run 30 consecutive requests with 1.5s delay to check if Kibana is up and running.
|
||||||
let kibanaHasBooted = false;
|
let kibanaHasBooted = false;
|
||||||
for (const counter of [...Array(30).keys()]) {
|
for (const counter of [...Array(30).keys()]) {
|
||||||
await delay(1500);
|
await setTimeoutAsync(1500);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
expect((await supertest.get('/api/status').expect(200)).body).to.have.keys([
|
expect((await supertest.get('/api/status').expect(200)).body).to.have.keys([
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
import type { TypeOf } from '@kbn/config-schema';
|
import type { TypeOf } from '@kbn/config-schema';
|
||||||
import type { RequestHandler, ResponseHeaders } from 'src/core/server';
|
import type { RequestHandler, ResponseHeaders } from 'src/core/server';
|
||||||
import bluebird from 'bluebird';
|
import pMap from 'p-map';
|
||||||
import { safeDump } from 'js-yaml';
|
import { safeDump } from 'js-yaml';
|
||||||
|
|
||||||
import { fullAgentPolicyToYaml } from '../../../common/services';
|
import { fullAgentPolicyToYaml } from '../../../common/services';
|
||||||
|
@ -57,7 +57,7 @@ export const getAgentPoliciesHandler: RequestHandler<
|
||||||
perPage,
|
perPage,
|
||||||
};
|
};
|
||||||
|
|
||||||
await bluebird.map(
|
await pMap(
|
||||||
items,
|
items,
|
||||||
(agentPolicy: GetAgentPoliciesResponseItem) =>
|
(agentPolicy: GetAgentPoliciesResponseItem) =>
|
||||||
getAgentsByKuery(esClient, {
|
getAgentsByKuery(esClient, {
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import { checkParam } from '../error_missing_required';
|
import { checkParam } from '../error_missing_required';
|
||||||
import { getSeries } from './get_series';
|
import { getSeries } from './get_series';
|
||||||
import { calculateTimeseriesInterval } from '../calculate_timeseries_interval';
|
import { calculateTimeseriesInterval } from '../calculate_timeseries_interval';
|
||||||
|
@ -40,25 +39,29 @@ export async function getMetrics(
|
||||||
min = max - numOfBuckets * bucketSize * 1000;
|
min = max - numOfBuckets * bucketSize * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Bluebird.map(metricSet, (metric: Metric) => {
|
return Promise.all(
|
||||||
|
metricSet.map((metric: Metric) => {
|
||||||
// metric names match the literal metric name, but they can be supplied in groups or individually
|
// metric names match the literal metric name, but they can be supplied in groups or individually
|
||||||
let metricNames;
|
let metricNames;
|
||||||
|
|
||||||
if (typeof metric !== 'string') {
|
if (typeof metric !== 'string') {
|
||||||
metricNames = metric.keys;
|
metricNames = typeof metric.keys === 'string' ? [metric.keys] : metric.keys;
|
||||||
} else {
|
} else {
|
||||||
metricNames = [metric];
|
metricNames = [metric];
|
||||||
}
|
}
|
||||||
|
|
||||||
return Bluebird.map(metricNames, (metricName) => {
|
return Promise.all(
|
||||||
|
metricNames.map((metricName) => {
|
||||||
return getSeries(req, indexPattern, metricName, metricOptions, filters, groupBy, {
|
return getSeries(req, indexPattern, metricName, metricOptions, filters, groupBy, {
|
||||||
min,
|
min,
|
||||||
max,
|
max,
|
||||||
bucketSize,
|
bucketSize,
|
||||||
timezone,
|
timezone,
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
}).then((rows) => {
|
);
|
||||||
|
})
|
||||||
|
).then((rows) => {
|
||||||
const data: Record<string, any> = {};
|
const data: Record<string, any> = {};
|
||||||
metricSet.forEach((key, index) => {
|
metricSet.forEach((key, index) => {
|
||||||
// keyName must match the value stored in the html template
|
// keyName must match the value stored in the html template
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import { chain, find } from 'lodash';
|
import { chain, find } from 'lodash';
|
||||||
import { LegacyRequest, Cluster, Bucket } from '../../types';
|
import { LegacyRequest, Cluster, Bucket } from '../../types';
|
||||||
import { checkParam } from '../error_missing_required';
|
import { checkParam } from '../error_missing_required';
|
||||||
|
@ -36,7 +35,8 @@ export function getKibanasForClusters(
|
||||||
const start = req.payload.timeRange.min;
|
const start = req.payload.timeRange.min;
|
||||||
const end = req.payload.timeRange.max;
|
const end = req.payload.timeRange.max;
|
||||||
|
|
||||||
return Bluebird.map(clusters, (cluster) => {
|
return Promise.all(
|
||||||
|
clusters.map((cluster) => {
|
||||||
const clusterUuid = cluster.elasticsearch?.cluster?.id ?? cluster.cluster_uuid;
|
const clusterUuid = cluster.elasticsearch?.cluster?.id ?? cluster.cluster_uuid;
|
||||||
const metric = KibanaClusterMetric.getMetricFields();
|
const metric = KibanaClusterMetric.getMetricFields();
|
||||||
const params = {
|
const params = {
|
||||||
|
@ -213,5 +213,6 @@ export function getKibanasForClusters(
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Bluebird from 'bluebird';
|
|
||||||
import { get } from 'lodash';
|
import { get } from 'lodash';
|
||||||
import { LegacyRequest, Cluster, Bucket } from '../../types';
|
import { LegacyRequest, Cluster, Bucket } from '../../types';
|
||||||
import { LOGSTASH } from '../../../common/constants';
|
import { LOGSTASH } from '../../../common/constants';
|
||||||
|
@ -48,7 +47,8 @@ export function getLogstashForClusters(
|
||||||
const end = req.payload.timeRange.max;
|
const end = req.payload.timeRange.max;
|
||||||
const config = req.server.config();
|
const config = req.server.config();
|
||||||
|
|
||||||
return Bluebird.map(clusters, (cluster) => {
|
return Promise.all(
|
||||||
|
clusters.map((cluster) => {
|
||||||
const clusterUuid = get(cluster, 'elasticsearch.cluster.id', cluster.cluster_uuid);
|
const clusterUuid = get(cluster, 'elasticsearch.cluster.id', cluster.cluster_uuid);
|
||||||
const params = {
|
const params = {
|
||||||
index: lsIndexPattern,
|
index: lsIndexPattern,
|
||||||
|
@ -251,5 +251,6 @@ export function getLogstashForClusters(
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import bluebird from 'bluebird';
|
import pMap from 'p-map';
|
||||||
import { schema } from '@kbn/config-schema';
|
import { schema } from '@kbn/config-schema';
|
||||||
import { filter, uniq, map } from 'lodash';
|
import { filter, uniq, map } from 'lodash';
|
||||||
import { satisfies } from 'semver';
|
import { satisfies } from 'semver';
|
||||||
|
@ -47,7 +47,7 @@ export const getAgentPoliciesRoute = (router: IRouter, osqueryContext: OsqueryAp
|
||||||
const agentPolicies = await agentPolicyService?.getByIds(soClient, agentPolicyIds);
|
const agentPolicies = await agentPolicyService?.getByIds(soClient, agentPolicyIds);
|
||||||
|
|
||||||
if (agentPolicies?.length) {
|
if (agentPolicies?.length) {
|
||||||
await bluebird.map(
|
await pMap(
|
||||||
agentPolicies,
|
agentPolicies,
|
||||||
(agentPolicy: GetAgentPoliciesResponseItem) =>
|
(agentPolicy: GetAgentPoliciesResponseItem) =>
|
||||||
agentService
|
agentService
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import { run, RunFn, createFailError } from '@kbn/dev-utils';
|
import { run, RunFn, createFailError } from '@kbn/dev-utils';
|
||||||
import { KbnClient } from '@kbn/test';
|
import { KbnClient } from '@kbn/test';
|
||||||
import { AxiosError } from 'axios';
|
import { AxiosError } from 'axios';
|
||||||
import bluebird from 'bluebird';
|
import pMap from 'p-map';
|
||||||
import type { CreateExceptionListSchema } from '@kbn/securitysolution-io-ts-list-types';
|
import type { CreateExceptionListSchema } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
import {
|
import {
|
||||||
ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION,
|
ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION,
|
||||||
|
@ -70,7 +70,7 @@ const createEventFilters: RunFn = async ({ flags, log }) => {
|
||||||
|
|
||||||
await ensureCreateEndpointEventFiltersList(kbn);
|
await ensureCreateEndpointEventFiltersList(kbn);
|
||||||
|
|
||||||
await bluebird.map(
|
await pMap(
|
||||||
Array.from({ length: flags.count as unknown as number }),
|
Array.from({ length: flags.count as unknown as number }),
|
||||||
() =>
|
() =>
|
||||||
kbn
|
kbn
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import { run, RunFn, createFailError } from '@kbn/dev-utils';
|
import { run, RunFn, createFailError } from '@kbn/dev-utils';
|
||||||
import { KbnClient } from '@kbn/test';
|
import { KbnClient } from '@kbn/test';
|
||||||
import { AxiosError } from 'axios';
|
import { AxiosError } from 'axios';
|
||||||
import bluebird from 'bluebird';
|
import pMap from 'p-map';
|
||||||
import type { CreateExceptionListSchema } from '@kbn/securitysolution-io-ts-list-types';
|
import type { CreateExceptionListSchema } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
import {
|
import {
|
||||||
ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION,
|
ENDPOINT_HOST_ISOLATION_EXCEPTIONS_LIST_DESCRIPTION,
|
||||||
|
@ -70,7 +70,7 @@ const createHostIsolationException: RunFn = async ({ flags, log }) => {
|
||||||
|
|
||||||
await ensureCreateEndpointHostIsolationExceptionList(kbn);
|
await ensureCreateEndpointHostIsolationExceptionList(kbn);
|
||||||
|
|
||||||
await bluebird.map(
|
await pMap(
|
||||||
Array.from({ length: flags.count as unknown as number }),
|
Array.from({ length: flags.count as unknown as number }),
|
||||||
() =>
|
() =>
|
||||||
kbn
|
kbn
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import minimist from 'minimist';
|
import minimist from 'minimist';
|
||||||
import { ToolingLog } from '@kbn/dev-utils';
|
import { ToolingLog } from '@kbn/dev-utils';
|
||||||
import { KbnClient } from '@kbn/test';
|
import { KbnClient } from '@kbn/test';
|
||||||
import bluebird from 'bluebird';
|
import pMap from 'p-map';
|
||||||
import { basename } from 'path';
|
import { basename } from 'path';
|
||||||
import { AxiosResponse } from 'axios';
|
import { AxiosResponse } from 'axios';
|
||||||
import { TRUSTED_APPS_CREATE_API, TRUSTED_APPS_LIST_API } from '../../../common/endpoint/constants';
|
import { TRUSTED_APPS_CREATE_API, TRUSTED_APPS_LIST_API } from '../../../common/endpoint/constants';
|
||||||
|
@ -113,7 +113,7 @@ export const run: (options?: RunOptions) => Promise<TrustedApp[]> = async ({
|
||||||
return () => policyIds[randomN(policyIds.length)];
|
return () => policyIds[randomN(policyIds.length)];
|
||||||
})();
|
})();
|
||||||
|
|
||||||
return bluebird.map(
|
return pMap(
|
||||||
Array.from({ length: count }),
|
Array.from({ length: count }),
|
||||||
async () => {
|
async () => {
|
||||||
const body = trustedAppGenerator.generateTrustedAppForCreate();
|
const body = trustedAppGenerator.generateTrustedAppForCreate();
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { FtrProviderContext } from '../ftr_provider_context';
|
import { FtrProviderContext } from '../ftr_provider_context';
|
||||||
import { logWrapper } from './log_wrapper';
|
import { logWrapper } from './log_wrapper';
|
||||||
|
|
||||||
|
@ -1094,7 +1094,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont
|
||||||
draggedOver,
|
draggedOver,
|
||||||
dropTarget
|
dropTarget
|
||||||
);
|
);
|
||||||
await delay(150);
|
await setTimeoutAsync(150);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
import { FtrService } from '../ftr_provider_context';
|
import { FtrService } from '../ftr_provider_context';
|
||||||
|
|
||||||
export class RollupPageObject extends FtrService {
|
export class RollupPageObject extends FtrService {
|
||||||
|
@ -111,13 +110,18 @@ export class RollupPageObject extends FtrService {
|
||||||
|
|
||||||
async getJobList() {
|
async getJobList() {
|
||||||
const jobs = await this.testSubjects.findAll('jobTableRow');
|
const jobs = await this.testSubjects.findAll('jobTableRow');
|
||||||
return mapAsync(jobs, async (job) => {
|
return await Promise.all(
|
||||||
|
jobs.map(async (job) => {
|
||||||
const jobNameElement = await job.findByTestSubject('jobTableCell-id');
|
const jobNameElement = await job.findByTestSubject('jobTableCell-id');
|
||||||
const jobStatusElement = await job.findByTestSubject('jobTableCell-status');
|
const jobStatusElement = await job.findByTestSubject('jobTableCell-status');
|
||||||
const jobIndexPatternElement = await job.findByTestSubject('jobTableCell-indexPattern');
|
const jobIndexPatternElement = await job.findByTestSubject('jobTableCell-indexPattern');
|
||||||
const jobRollUpIndexPatternElement = await job.findByTestSubject('jobTableCell-rollupIndex');
|
const jobRollUpIndexPatternElement = await job.findByTestSubject(
|
||||||
|
'jobTableCell-rollupIndex'
|
||||||
|
);
|
||||||
const jobDelayElement = await job.findByTestSubject('jobTableCell-rollupDelay');
|
const jobDelayElement = await job.findByTestSubject('jobTableCell-rollupDelay');
|
||||||
const jobIntervalElement = await job.findByTestSubject('jobTableCell-dateHistogramInterval');
|
const jobIntervalElement = await job.findByTestSubject(
|
||||||
|
'jobTableCell-dateHistogramInterval'
|
||||||
|
);
|
||||||
const jobGroupElement = await job.findByTestSubject('jobTableCell-groups');
|
const jobGroupElement = await job.findByTestSubject('jobTableCell-groups');
|
||||||
const jobMetricsElement = await job.findByTestSubject('jobTableCell-metrics');
|
const jobMetricsElement = await job.findByTestSubject('jobTableCell-metrics');
|
||||||
|
|
||||||
|
@ -131,6 +135,7 @@ export class RollupPageObject extends FtrService {
|
||||||
jobGroup: await jobGroupElement.getVisibleText(),
|
jobGroup: await jobGroupElement.getVisibleText(),
|
||||||
jobMetrics: await jobMetricsElement.getVisibleText(),
|
jobMetrics: await jobMetricsElement.getVisibleText(),
|
||||||
};
|
};
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
import { FtrService } from '../ftr_provider_context';
|
import { FtrService } from '../ftr_provider_context';
|
||||||
|
|
||||||
export class WatcherPageObject extends FtrService {
|
export class WatcherPageObject extends FtrService {
|
||||||
|
@ -51,7 +50,8 @@ export class WatcherPageObject extends FtrService {
|
||||||
// get all the watches in the list
|
// get all the watches in the list
|
||||||
async getWatches() {
|
async getWatches() {
|
||||||
const watches = await this.find.allByCssSelector('.euiTableRow');
|
const watches = await this.find.allByCssSelector('.euiTableRow');
|
||||||
return mapAsync(watches, async (watch) => {
|
return await Promise.all(
|
||||||
|
watches.map(async (watch) => {
|
||||||
const checkBox = await watch.findByCssSelector('td:nth-child(1)');
|
const checkBox = await watch.findByCssSelector('td:nth-child(1)');
|
||||||
const id = await watch.findByCssSelector('td:nth-child(2)');
|
const id = await watch.findByCssSelector('td:nth-child(2)');
|
||||||
const name = await watch.findByCssSelector('td:nth-child(3)');
|
const name = await watch.findByCssSelector('td:nth-child(3)');
|
||||||
|
@ -61,6 +61,7 @@ export class WatcherPageObject extends FtrService {
|
||||||
id: await id.getVisibleText(),
|
id: await id.getVisibleText(),
|
||||||
name: (await name.getVisibleText()).split(',').map((role) => role.trim()),
|
name: (await name.getVisibleText()).split(',').map((role) => role.trim()),
|
||||||
};
|
};
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,6 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
|
|
||||||
export function AceEditorProvider({ getService }) {
|
export function AceEditorProvider({ getService }) {
|
||||||
const testSubjects = getService('testSubjects');
|
const testSubjects = getService('testSubjects');
|
||||||
const find = getService('find');
|
const find = getService('find');
|
||||||
|
@ -35,7 +33,7 @@ export function AceEditorProvider({ getService }) {
|
||||||
return await retry.try(async () => {
|
return await retry.try(async () => {
|
||||||
const editor = await testSubjects.find(testSubjectSelector);
|
const editor = await testSubjects.find(testSubjectSelector);
|
||||||
const lines = await editor.findAllByClassName('ace_line');
|
const lines = await editor.findAllByClassName('ace_line');
|
||||||
const linesText = await mapAsync(lines, (line) => line.getVisibleText());
|
const linesText = await Promise.all(lines.map((line) => line.getVisibleText()));
|
||||||
return linesText.join('\n');
|
return linesText.join('\n');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { range } from 'lodash';
|
import { range } from 'lodash';
|
||||||
import { map as mapAsync } from 'bluebird';
|
|
||||||
|
|
||||||
export function MonitoringClusterAlertsProvider({ getService, getPageObjects }) {
|
export function MonitoringClusterAlertsProvider({ getService, getPageObjects }) {
|
||||||
const testSubjects = getService('testSubjects');
|
const testSubjects = getService('testSubjects');
|
||||||
|
@ -61,9 +60,11 @@ export function MonitoringClusterAlertsProvider({ getService, getPageObjects })
|
||||||
const listingRows = await this.getOverviewAlerts();
|
const listingRows = await this.getOverviewAlerts();
|
||||||
const alertIcons = await retry.try(async () => {
|
const alertIcons = await retry.try(async () => {
|
||||||
const elements = await find.allByCssSelector(SUBJ_OVERVIEW_ICONS);
|
const elements = await find.allByCssSelector(SUBJ_OVERVIEW_ICONS);
|
||||||
return await mapAsync(elements, async (element) => {
|
return await Promise.all(
|
||||||
|
elements.map(async (element) => {
|
||||||
return await element.getVisibleText();
|
return await element.getVisibleText();
|
||||||
});
|
})
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return await this._getAlertSetAll({
|
return await this._getAlertSetAll({
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { props as propsAsync } from 'bluebird';
|
|
||||||
|
|
||||||
export function PipelineEditorProvider({ getService }) {
|
export function PipelineEditorProvider({ getService }) {
|
||||||
const retry = getService('retry');
|
const retry = getService('retry');
|
||||||
|
@ -125,20 +124,27 @@ export function PipelineEditorProvider({ getService }) {
|
||||||
* @return {Promise<undefined>}
|
* @return {Promise<undefined>}
|
||||||
*/
|
*/
|
||||||
async assertInputs(expectedValues) {
|
async assertInputs(expectedValues) {
|
||||||
const values = await propsAsync({
|
const values = await Promise.all([
|
||||||
id: testSubjects.getAttribute(SUBJ_INPUT_ID, 'value'),
|
testSubjects.getAttribute(SUBJ_INPUT_ID, 'value'),
|
||||||
description: testSubjects.getAttribute(SUBJ_INPUT_DESCRIPTION, 'value'),
|
testSubjects.getAttribute(SUBJ_INPUT_DESCRIPTION, 'value'),
|
||||||
pipeline: aceEditor.getValue(SUBJ_UI_ACE_PIPELINE),
|
aceEditor.getValue(SUBJ_UI_ACE_PIPELINE),
|
||||||
workers: testSubjects.getAttribute(SUBJ_INPUT_WORKERS, 'value'),
|
testSubjects.getAttribute(SUBJ_INPUT_WORKERS, 'value'),
|
||||||
batchSize: testSubjects.getAttribute(SUBJ_INPUT_BATCH_SIZE, 'value'),
|
testSubjects.getAttribute(SUBJ_INPUT_BATCH_SIZE, 'value'),
|
||||||
queueType: testSubjects.getAttribute(SUBJ_SELECT_QUEUE_TYPE, 'value'),
|
testSubjects.getAttribute(SUBJ_SELECT_QUEUE_TYPE, 'value'),
|
||||||
queueMaxBytesNumber: testSubjects.getAttribute(SUBJ_INPUT_QUEUE_MAX_BYTES_NUMBER, 'value'),
|
testSubjects.getAttribute(SUBJ_INPUT_QUEUE_MAX_BYTES_NUMBER, 'value'),
|
||||||
queueMaxBytesUnits: testSubjects.getAttribute(SUBJ_SELECT_QUEUE_MAX_BYTES_UNITS, 'value'),
|
testSubjects.getAttribute(SUBJ_SELECT_QUEUE_MAX_BYTES_UNITS, 'value'),
|
||||||
queueCheckpointWrites: testSubjects.getAttribute(
|
testSubjects.getAttribute(SUBJ_INPUT_QUEUE_CHECKPOINT_WRITES, 'value'),
|
||||||
SUBJ_INPUT_QUEUE_CHECKPOINT_WRITES,
|
]).then((values) => ({
|
||||||
'value'
|
id: values[0],
|
||||||
),
|
description: values[1],
|
||||||
});
|
pipeline: values[2],
|
||||||
|
workers: values[3],
|
||||||
|
batchSize: values[4],
|
||||||
|
queueType: values[5],
|
||||||
|
queueMaxBytesNumber: values[6],
|
||||||
|
queueMaxBytesUnits: values[7],
|
||||||
|
queueCheckpointWrites: values[8],
|
||||||
|
}));
|
||||||
|
|
||||||
expect(values).to.eql(expectedValues);
|
expect(values).to.eql(expectedValues);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
|
|
||||||
import { FtrProviderContext } from '../../ftr_provider_context';
|
import { FtrProviderContext } from '../../ftr_provider_context';
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => {
|
||||||
let alert: any;
|
let alert: any;
|
||||||
await retry.tryForTime(60 * 1000, async () => {
|
await retry.tryForTime(60 * 1000, async () => {
|
||||||
// add a delay before next call to not overload the server
|
// add a delay before next call to not overload the server
|
||||||
await delay(1500);
|
await setTimeoutAsync(1500);
|
||||||
const apiResponse = await supertest.get('/api/alerts/_find?search=uptime-test');
|
const apiResponse = await supertest.get('/api/alerts/_find?search=uptime-test');
|
||||||
const alertsFromThisTest = apiResponse.body.data.filter(
|
const alertsFromThisTest = apiResponse.body.data.filter(
|
||||||
({ name }: { name: string }) => name === 'uptime-test'
|
({ name }: { name: string }) => name === 'uptime-test'
|
||||||
|
|
|
@ -10,7 +10,7 @@ import { resolve } from 'path';
|
||||||
import { REPO_ROOT } from '@kbn/utils';
|
import { REPO_ROOT } from '@kbn/utils';
|
||||||
import Fs from 'fs';
|
import Fs from 'fs';
|
||||||
import { createFlagError } from '@kbn/dev-utils';
|
import { createFlagError } from '@kbn/dev-utils';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { FtrProviderContext } from './../functional/ftr_provider_context';
|
import { FtrProviderContext } from './../functional/ftr_provider_context';
|
||||||
|
|
||||||
const baseSimulationPath = 'src/test/scala/org/kibanaLoadTest/simulation';
|
const baseSimulationPath = 'src/test/scala/org/kibanaLoadTest/simulation';
|
||||||
|
@ -82,7 +82,7 @@ export async function GatlingTestRunner({ getService }: FtrProviderContext) {
|
||||||
});
|
});
|
||||||
// wait a minute between simulations, skip for the last one
|
// wait a minute between simulations, skip for the last one
|
||||||
if (i < simulationClasses.length - 1) {
|
if (i < simulationClasses.length - 1) {
|
||||||
await delay(60 * 1000);
|
await setTimeoutAsync(60 * 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { adminTestUser } from '@kbn/test';
|
import { adminTestUser } from '@kbn/test';
|
||||||
import { FtrProviderContext } from '../../ftr_provider_context';
|
import { FtrProviderContext } from '../../ftr_provider_context';
|
||||||
import {
|
import {
|
||||||
|
@ -319,7 +319,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Access token expiration is set to 15s for API integration tests.
|
// Access token expiration is set to 15s for API integration tests.
|
||||||
// Let's wait for 20s to make sure token expires.
|
// Let's wait for 20s to make sure token expires.
|
||||||
await delay(20000);
|
await setTimeoutAsync(20000);
|
||||||
|
|
||||||
// This api call should succeed and automatically refresh token. Returned cookie will contain
|
// This api call should succeed and automatically refresh token. Returned cookie will contain
|
||||||
// the new access and refresh token pair.
|
// the new access and refresh token pair.
|
||||||
|
@ -350,7 +350,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Access token expiration is set to 15s for API integration tests.
|
// Access token expiration is set to 15s for API integration tests.
|
||||||
// Let's wait for 20s to make sure token expires.
|
// Let's wait for 20s to make sure token expires.
|
||||||
await delay(20000);
|
await setTimeoutAsync(20000);
|
||||||
|
|
||||||
// This request should succeed and automatically refresh token. Returned cookie will contain
|
// This request should succeed and automatically refresh token. Returned cookie will contain
|
||||||
// the new access and refresh token pair.
|
// the new access and refresh token pair.
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { adminTestUser } from '@kbn/test';
|
import { adminTestUser } from '@kbn/test';
|
||||||
import { getStateAndNonce } from '../../../fixtures/oidc/oidc_tools';
|
import { getStateAndNonce } from '../../../fixtures/oidc/oidc_tools';
|
||||||
import { FtrProviderContext } from '../../../ftr_provider_context';
|
import { FtrProviderContext } from '../../../ftr_provider_context';
|
||||||
|
@ -494,7 +494,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Access token expiration is set to 15s for API integration tests.
|
// Access token expiration is set to 15s for API integration tests.
|
||||||
// Let's wait for 20s to make sure token expires.
|
// Let's wait for 20s to make sure token expires.
|
||||||
await delay(20000);
|
await setTimeoutAsync(20000);
|
||||||
|
|
||||||
// This api call should succeed and automatically refresh token. Returned cookie will contain
|
// This api call should succeed and automatically refresh token. Returned cookie will contain
|
||||||
// the new access and refresh token pair.
|
// the new access and refresh token pair.
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import { readFileSync } from 'fs';
|
import { readFileSync } from 'fs';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { CA_CERT_PATH } from '@kbn/dev-utils';
|
import { CA_CERT_PATH } from '@kbn/dev-utils';
|
||||||
|
@ -358,7 +358,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Access token expiration is set to 15s for API integration tests.
|
// Access token expiration is set to 15s for API integration tests.
|
||||||
// Let's wait for 20s to make sure token expires.
|
// Let's wait for 20s to make sure token expires.
|
||||||
await delay(20000);
|
await setTimeoutAsync(20000);
|
||||||
|
|
||||||
// This api call should succeed and automatically refresh token. Returned cookie will contain
|
// This api call should succeed and automatically refresh token. Returned cookie will contain
|
||||||
// the new access token.
|
// the new access token.
|
||||||
|
@ -382,7 +382,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Access token expiration is set to 15s for API integration tests.
|
// Access token expiration is set to 15s for API integration tests.
|
||||||
// Let's wait for 20s to make sure token expires.
|
// Let's wait for 20s to make sure token expires.
|
||||||
await delay(20000);
|
await setTimeoutAsync(20000);
|
||||||
|
|
||||||
// This request should succeed and automatically refresh token. Returned cookie will contain
|
// This request should succeed and automatically refresh token. Returned cookie will contain
|
||||||
// the new access and refresh token pair.
|
// the new access and refresh token pair.
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
import { stringify } from 'query-string';
|
import { stringify } from 'query-string';
|
||||||
import url from 'url';
|
import url from 'url';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
||||||
import { adminTestUser } from '@kbn/test';
|
import { adminTestUser } from '@kbn/test';
|
||||||
|
@ -468,7 +468,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Access token expiration is set to 15s for API integration tests.
|
// Access token expiration is set to 15s for API integration tests.
|
||||||
// Let's wait for 20s to make sure token expires.
|
// Let's wait for 20s to make sure token expires.
|
||||||
await delay(20000);
|
await setTimeoutAsync(20000);
|
||||||
});
|
});
|
||||||
|
|
||||||
const expectNewSessionCookie = (cookie: Cookie) => {
|
const expectNewSessionCookie = (cookie: Cookie) => {
|
||||||
|
@ -639,7 +639,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
['when access token is valid', async () => {}],
|
['when access token is valid', async () => {}],
|
||||||
// Scenario when active cookie has an expired access token. Access token expiration is set
|
// Scenario when active cookie has an expired access token. Access token expiration is set
|
||||||
// to 15s for API integration tests so we need to wait for 20s to make sure token expires.
|
// to 15s for API integration tests so we need to wait for 20s to make sure token expires.
|
||||||
['when access token is expired', async () => await delay(20000)],
|
['when access token is expired', async () => await setTimeoutAsync(20000)],
|
||||||
// Scenario when active cookie references to access/refresh token pair that were already
|
// Scenario when active cookie references to access/refresh token pair that were already
|
||||||
// removed from Elasticsearch (to simulate 24h when expired tokens are removed).
|
// removed from Elasticsearch (to simulate 24h when expired tokens are removed).
|
||||||
[
|
[
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { adminTestUser } from '@kbn/test';
|
import { adminTestUser } from '@kbn/test';
|
||||||
import type { AuthenticationProvider } from '../../../../plugins/security/common/model';
|
import type { AuthenticationProvider } from '../../../../plugins/security/common/model';
|
||||||
|
@ -101,7 +101,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
// Cleanup routine runs every 10s, and idle timeout threshold is three times larger than 5s
|
// Cleanup routine runs every 10s, and idle timeout threshold is three times larger than 5s
|
||||||
// idle timeout, let's wait for 40s to make sure cleanup routine runs when idle timeout
|
// idle timeout, let's wait for 40s to make sure cleanup routine runs when idle timeout
|
||||||
// threshold is exceeded.
|
// threshold is exceeded.
|
||||||
await delay(40000);
|
await setTimeoutAsync(40000);
|
||||||
|
|
||||||
// Session info is removed from the index and cookie isn't valid anymore
|
// Session info is removed from the index and cookie isn't valid anymore
|
||||||
expect(await getNumberOfSessionDocuments()).to.be(0);
|
expect(await getNumberOfSessionDocuments()).to.be(0);
|
||||||
|
@ -143,7 +143,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
// Cleanup routine runs every 10s, and idle timeout threshold is three times larger than 5s
|
// Cleanup routine runs every 10s, and idle timeout threshold is three times larger than 5s
|
||||||
// idle timeout, let's wait for 40s to make sure cleanup routine runs when idle timeout
|
// idle timeout, let's wait for 40s to make sure cleanup routine runs when idle timeout
|
||||||
// threshold is exceeded.
|
// threshold is exceeded.
|
||||||
await delay(40000);
|
await setTimeoutAsync(40000);
|
||||||
|
|
||||||
// Session for basic and SAML that used global session settings should not be valid anymore.
|
// Session for basic and SAML that used global session settings should not be valid anymore.
|
||||||
expect(await getNumberOfSessionDocuments()).to.be(2);
|
expect(await getNumberOfSessionDocuments()).to.be(2);
|
||||||
|
@ -191,7 +191,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
// least twice.
|
// least twice.
|
||||||
for (const counter of [...Array(20).keys()]) {
|
for (const counter of [...Array(20).keys()]) {
|
||||||
// Session idle timeout is 15s, let's wait 10s and make a new request that would extend the session.
|
// Session idle timeout is 15s, let's wait 10s and make a new request that would extend the session.
|
||||||
await delay(1500);
|
await setTimeoutAsync(1500);
|
||||||
|
|
||||||
sessionCookie = (await checkSessionCookie(sessionCookie, basicUsername, {
|
sessionCookie = (await checkSessionCookie(sessionCookie, basicUsername, {
|
||||||
type: 'basic',
|
type: 'basic',
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
import { parse as parseCookie, Cookie } from 'tough-cookie';
|
||||||
import { delay } from 'bluebird';
|
import { setTimeout as setTimeoutAsync } from 'timers/promises';
|
||||||
import expect from '@kbn/expect';
|
import expect from '@kbn/expect';
|
||||||
import { adminTestUser } from '@kbn/test';
|
import { adminTestUser } from '@kbn/test';
|
||||||
import type { AuthenticationProvider } from '../../../../plugins/security/common/model';
|
import type { AuthenticationProvider } from '../../../../plugins/security/common/model';
|
||||||
|
@ -98,7 +98,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Cleanup routine runs every 10s, let's wait for 40s to make sure it runs multiple times and
|
// Cleanup routine runs every 10s, let's wait for 40s to make sure it runs multiple times and
|
||||||
// when lifespan is exceeded.
|
// when lifespan is exceeded.
|
||||||
await delay(40000);
|
await setTimeoutAsync(40000);
|
||||||
|
|
||||||
// Session info is removed from the index and cookie isn't valid anymore
|
// Session info is removed from the index and cookie isn't valid anymore
|
||||||
expect(await getNumberOfSessionDocuments()).to.be(0);
|
expect(await getNumberOfSessionDocuments()).to.be(0);
|
||||||
|
@ -138,7 +138,7 @@ export default function ({ getService }: FtrProviderContext) {
|
||||||
|
|
||||||
// Cleanup routine runs every 10s, let's wait for 40s to make sure it runs multiple times and
|
// Cleanup routine runs every 10s, let's wait for 40s to make sure it runs multiple times and
|
||||||
// when lifespan is exceeded.
|
// when lifespan is exceeded.
|
||||||
await delay(40000);
|
await setTimeoutAsync(40000);
|
||||||
|
|
||||||
// Session for basic and SAML that used global session settings should not be valid anymore.
|
// Session for basic and SAML that used global session settings should not be valid anymore.
|
||||||
expect(await getNumberOfSessionDocuments()).to.be(2);
|
expect(await getNumberOfSessionDocuments()).to.be(2);
|
||||||
|
|
10
yarn.lock
10
yarn.lock
|
@ -5905,11 +5905,6 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/base64-js/-/base64-js-1.2.5.tgz#582b2476169a6cba460a214d476c744441d873d5"
|
resolved "https://registry.yarnpkg.com/@types/base64-js/-/base64-js-1.2.5.tgz#582b2476169a6cba460a214d476c744441d873d5"
|
||||||
integrity sha1-WCskdhaabLpGCiFNR2x0REHYc9U=
|
integrity sha1-WCskdhaabLpGCiFNR2x0REHYc9U=
|
||||||
|
|
||||||
"@types/bluebird@^3.1.1":
|
|
||||||
version "3.5.30"
|
|
||||||
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.30.tgz#ee034a0eeea8b84ed868b1aa60d690b08a6cfbc5"
|
|
||||||
integrity sha512-8LhzvcjIoqoi1TghEkRMkbbmM+jhHnBokPGkJWjclMK+Ks0MxEBow3/p2/iFTZ+OIbJHQDSfpgdZEb+af3gfVw==
|
|
||||||
|
|
||||||
"@types/braces@*":
|
"@types/braces@*":
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb"
|
resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb"
|
||||||
|
@ -9422,11 +9417,6 @@ bluebird@3.5.3:
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
|
||||||
integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
|
integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
|
||||||
|
|
||||||
bluebird@3.5.5:
|
|
||||||
version "3.5.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
|
|
||||||
integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
|
|
||||||
|
|
||||||
bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2:
|
bluebird@3.7.2, bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.5, bluebird@^3.7.1, bluebird@^3.7.2:
|
||||||
version "3.7.2"
|
version "3.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue