test: migrate mashup tests to use enigma mocker (#725)

This commit is contained in:
Thomas Bengtsson
2021-12-03 09:49:03 +01:00
committed by GitHub
parent a48f583ed2
commit 6fe584cff8
11 changed files with 529 additions and 499 deletions

View File

@@ -83,17 +83,6 @@ jobs:
steps:
- checkout
# start the SSE plugin as early as possible so that the engine
# image has enough time to connect to it before tests are run
- run:
name: Initiate SSE plugin
command: |
cd test/fixtures/sse
echo "{}" > package.json
npm install qlik-sse@0.3.0 --no-package-lock
rm package.json
node start.js
background: true
- restore_cache: *restore_yarn_cache

View File

@@ -70,7 +70,6 @@
"prettier": "2.5.0",
"pretty-quick": "3.1.2",
"qix-faker": "0.3.0",
"qlik-sse": "0.3.0",
"rollup": "2.60.2",
"rollup-plugin-babel": "4.4.0",
"rollup-plugin-dependency-flow": "0.3.0",

View File

@@ -3,7 +3,6 @@
const yargs = require('yargs');
const mashupServer = require('../test/mashup/server');
const sseServer = require('../test/fixtures/sse');
const useEngine = require('../commands/serve/lib/engine');
const args = yargs
@@ -12,18 +11,13 @@ const args = yargs
type: 'boolean',
describe: 'Start the mashup server',
})
.option('sse', {
default: true,
type: 'boolean',
describe: 'Start the SSE plugin',
})
.option('engine', {
default: false,
type: 'boolean',
describe: 'Start the engine',
}).argv;
const { start, sse, engine } = args;
const { start, engine } = args;
let hasCleanedUp = false;
const services = [];
@@ -42,17 +36,6 @@ if (start) {
});
}
if (sse) {
const s = sseServer;
services.push({
name: 'SSE plugin server',
start: () => {
s.start();
},
stop: () => s.close(),
});
}
if (engine) {
let e;
services.push({

View File

@@ -1,51 +0,0 @@
const q = require('qlik-sse');
const s = q.server({
identifier: 'heavy',
version: '0.1.0',
allowScript: true,
});
async function heavy(request) {
request.on('data', (bundle) => {
const rows = [];
let t = 100;
try {
t = bundle.rows[0].duals[0].numData;
} catch (e) {
/* */
}
setTimeout(() => {
bundle.rows.forEach((row) => {
row.duals.forEach((dual) => {
rows.push({
duals: [{ numData: dual.numData, strData: `$${dual.numData}` }],
});
});
});
request.write({ rows });
request.end();
}, t);
});
}
s.addFunction(heavy, {
functionType: q.sse.FunctionType.SCALAR,
returnType: q.sse.DataType.NUMERIC,
params: [
{
name: 'first',
dataType: q.sse.DataType.NUMERIC,
},
],
});
// start the server
/*
s.start({
port: 50051,
});
*/
module.exports = s;

View File

@@ -1,3 +0,0 @@
require('./index').start({
port: 50051,
});

View File

@@ -1,25 +0,0 @@
export default function connect() {
const loadSchema = () => fetch('/node_modules/enigma.js/schemas/3.2.json').then((response) => response.json());
const createConnection = () =>
loadSchema().then((schema) =>
window.enigma
.create({
schema,
url: `ws://${window.location.hostname || 'localhost'}:9076/app/${Date.now()}`,
})
.open()
.then((qix) => qix.createSessionApp())
);
return createConnection().then((app) =>
app
.setScript(
`
Characters:
Load Chr(RecNo()+Ord('A')-1) as Alpha, RecNo() as Num autogenerate 5;
`
)
.then(() => app.doReload().then(() => app))
);
}

View File

@@ -2,8 +2,9 @@
<html>
<head>
<meta charset="UTF-8" />
<script src="/node_modules/enigma.js/enigma.min.js"></script>
<script src="/apis/stardust/dist/stardust.dev.js"></script>
<script src="/apis/enigma-mocker/dist/enigma-mocker.dev.js"></script>
<script src="scenarios.js"></script>
<style>
html,
@@ -44,22 +45,5 @@
<div class="viz"></div>
<div class="actions"></div>
</div>
<script type="module">
import connect from './connect.js';
import phases from './phases.js';
connect().then(async (app) => {
const actionsElement = document.querySelector('.actions');
const p = phases({ app }).phases;
p.forEach((phase) => {
const btn = document.createElement('button');
btn.textContent = phase.name;
btn.setAttribute('data-phase', phase.name.toLowerCase().replace(/\s+/g, '-'));
btn.addEventListener('click', phase.action);
actionsElement.appendChild(btn);
});
});
</script>
</body>
</html>

View File

@@ -1,4 +1,4 @@
describe.skip('object lifecycle', () => {
describe('object lifecycle', () => {
const waitForTextStatus = async (selector, text, options = { timeout: 1000 }) => {
await page.waitForSelector(selector, { visible: true });
await page.waitForFunction(
@@ -8,13 +8,14 @@ describe.skip('object lifecycle', () => {
text
);
};
before(async () => {
await page.goto(`${process.env.BASE_URL}/visualize/life.html`);
await page.waitForSelector('button[data-phase="init-as-bad-type"]', { visible: true });
});
function getScenarioUrl(scenario) {
return `${process.env.BASE_URL}/visualize/life.html?scenario=${scenario}`;
}
it('should fail to load unknown type', async () => {
await page.click('button[data-phase="init-as-bad-type"]');
const url = getScenarioUrl('invalid-type');
await page.goto(url);
await waitForTextStatus(
'[data-tid="error-title"]',
"Could not find a version of 'voooz' that supports current object version. Did you forget to register voooz?"
@@ -22,7 +23,8 @@ describe.skip('object lifecycle', () => {
});
it('should show spinner and requirements for known type', async () => {
await page.click('button[data-phase="set-proper-type"]');
const url = getScenarioUrl('valid-type');
await page.goto(url);
// should show loading spinner
await page.waitForSelector('.njs-cell [role="progressbar"]', { timeout: 3000 });
@@ -32,40 +34,27 @@ describe.skip('object lifecycle', () => {
// need to fix calc condition view first
it('should show calculation unfulfilled', async () => {
await page.click('button[data-phase="set-calc-condition"]');
const url = getScenarioUrl('calc-unfulfilled');
await page.goto(url);
await waitForTextStatus('[data-tid="error-title"]', 'The calculation condition is not fulfilled');
});
it('should render error when a hypercube contains a qError', async () => {
await page.click('button[data-phase="hypercube-error"]');
const url = getScenarioUrl('hypercube-error');
await page.goto(url);
await waitForTextStatus('[data-tid="error-title"]', 'Error');
});
it('should render when requirements are fulfilled', async () => {
await page.click('button[data-phase="fulfill-requirements"]');
const url = getScenarioUrl('valid-config');
await page.goto(url);
await waitForTextStatus('.rendered', 'Success!');
});
it('should render long running query', async () => {
await page.click('button[data-phase="long-running-query"]');
// the cancel button should appear after 2000ms
// TODO - fix error thrown when long running query is cancelled
// await waitForTextStatus('.njs-cell button', 'Cancel', { timeout: 2500 });
// await page.click('.njs-cell button');
// await waitForTextStatus('.njs-cell button', 'Retry');
await waitForTextStatus('.pages', '4001', { timeout: 5000 });
});
it('should render other type', async () => {
await page.click('button[data-phase="set-the-other-type"]');
await waitForTextStatus('.njs-viz', 'The other one!');
});
it('should destroy', async () => {
await page.click('button[data-phase="destroy"]');
const url = getScenarioUrl('destroy');
await page.goto(url);
// wait for some time to ensure destroy has been run and no errors are thrown
await page.waitFor(100);
await page.waitFor(5000);
});
});

View File

@@ -1,176 +0,0 @@
const baseProps = {
qInfo: {
qType: 'doesnt matter',
},
visualization: 'my-chart',
qHyperCubeDef: {},
};
const badType = {
...baseProps,
visualization: 'voooz',
};
const otherType = {
...baseProps,
visualization: 'my-other-chart',
};
const calcCond = {
...baseProps,
qHyperCubeDef: {
qCalcCondition: {
qCond: { qv: '0' },
},
qDimensions: [{ qDef: { qFieldDefs: ['=a'] } }],
qMeasures: [{ qDef: { qDef: '=1' } }],
},
};
const cubeError = {
...baseProps,
qHyperCubeDef: {
qMode: 'S',
qMeasures: [{}],
qInterColumnSortOrder: [-2],
},
};
const fulfilled = {
...baseProps,
qHyperCubeDef: {
qDimensions: [{ qDef: { qFieldDefs: ['=a'] } }],
qMeasures: [{ qDef: { qDef: '=1' } }],
},
};
const longRunning = {
...baseProps,
qHyperCubeDef: {
qInitialDataFetch: [
{
qTop: 0,
qLeft: 0,
qWidth: 2,
qHeight: 10,
},
],
qDimensions: [{ qDef: { qFieldDefs: ['=a'] } }],
qMeasures: [{ qDef: { qDef: 'sse.heavy(4001)' } }],
},
};
const { useElement, useLayout } = window.stardust;
const chart = {
qae: {
data: {
targets: [
{
path: '/qHyperCubeDef',
dimensions: { min: 1, description: () => 'Some dimension' },
measures: { min: 1 },
},
],
},
},
component() {
const element = useElement();
const layout = useLayout();
element.innerHTML = `
<div>
<div class="rendered">Success!</div>
<div class="pages">${layout.qHyperCube.qDataPages[0] && layout.qHyperCube.qDataPages[0].qMatrix[0][1].qText}</div>
</div>
`;
},
};
const myOtherChart = {
component() {
useElement().innerText = 'The other one!';
},
};
// eslint-disable-next-line
const configured = stardust.embed.createConfiguration({
types: [
{
name: 'my-chart',
load: () =>
new Promise((resolve) => {
setTimeout(() => {
resolve(chart);
}, 1500);
}),
},
{
name: 'my-other-chart',
load: () => Promise.resolve(myOtherChart),
},
],
});
export default function phases({ app }) {
let viz;
let obj;
return {
phases: [
{
name: 'Init as bad type',
action: async () => {
if (obj) {
throw new Error('Already initiated');
}
obj = await app.createSessionObject(badType);
viz = await configured(app).render({
element: document.querySelector('.viz'),
id: obj.id,
});
},
},
{
name: 'Set proper type',
action: () => {
obj.setProperties(baseProps);
},
},
{
name: 'Set calc condition',
action: () => {
obj.setProperties(calcCond);
},
},
{
name: 'Hypercube error',
action: () => {
obj.setProperties(cubeError);
},
},
{
name: 'Fulfill requirements',
action: () => {
obj.setProperties(fulfilled);
},
},
{
name: 'Long running query',
action: () => {
obj.setProperties(longRunning);
},
},
{
name: 'Set the other type',
action: () => {
obj.setProperties(otherType);
},
},
{
name: 'Destroy',
action: () => {
viz.destroy();
},
},
],
};
}

View File

@@ -0,0 +1,495 @@
const scenarios = {};
scenarios['invalid-type'] = {
name: 'Invalid type',
genericObject: {
getLayout() {
return {
qInfo: {
qId: 'bb8',
},
visualization: 'voooz',
};
},
},
};
scenarios['valid-type'] = {
name: 'Valid type',
genericObject: {
getLayout() {
return {
qInfo: {
qId: 'bb8',
qType: 'doesnt matter',
},
qMeta: {
privileges: ['read', 'update', 'delete', 'exportdata'],
},
qSelectionInfo: {},
visualization: 'my-chart',
};
},
getProperties() {
return {};
},
},
};
scenarios['calc-unfulfilled'] = {
name: 'Calculations unfulfilled',
genericObject: {
getLayout() {
return {
qInfo: {
qId: 'bb8',
qType: 'doesnt matter',
},
qMeta: {
privileges: ['read', 'update', 'delete', 'exportdata'],
},
qSelectionInfo: {},
visualization: 'my-chart',
qHyperCube: {
qSize: {
qcx: 0,
qcy: 0,
},
qDimensionInfo: [
{
qFallbackTitle: '=a',
qApprMaxGlyphCount: 0,
qCardinal: 0,
qSortIndicator: 'N',
qGroupFallbackTitles: ['=a'],
qGroupPos: 0,
qStateCounts: {
qLocked: 0,
qSelected: 0,
qOption: 0,
qDeselected: 0,
qAlternative: 0,
qExcluded: 0,
qSelectedExcluded: 0,
qLockedExcluded: 0,
},
qTags: [],
qError: {
qErrorCode: 7014,
},
qDimensionType: 'D',
qGrouping: 'N',
qNumFormat: {
qType: 'U',
qnDec: 10,
qUseThou: 0,
},
qGroupFieldDefs: ['=a'],
qMin: 0,
qMax: 0,
qAttrExprInfo: [],
qAttrDimInfo: [],
qCardinalities: {
qCardinal: 0,
qHypercubeCardinal: 0,
qAllValuesCardinal: -1,
},
},
],
qMeasureInfo: [
{
qFallbackTitle: '=1',
qApprMaxGlyphCount: 0,
qCardinal: 0,
qSortIndicator: 'N',
qNumFormat: {
qType: 'U',
qnDec: 10,
qUseThou: 0,
},
qMin: 0,
qMax: 0,
qAttrExprInfo: [],
qAttrDimInfo: [],
qTrendLines: [],
},
],
qEffectiveInterColumnSortOrder: [1],
qGrandTotalRow: [],
qDataPages: [],
qPivotDataPages: [],
qStackedDataPages: [],
qMode: 'S',
qNoOfLeftDims: -1,
qTreeNodesOnDim: [],
qColumnOrder: [],
qError: {
qErrorCode: 7005,
},
},
};
},
getProperties() {
return {};
},
},
};
scenarios['hypercube-error'] = {
name: 'Hypercube error',
genericObject: {
getLayout() {
return {
qInfo: {
qId: 'bb8',
qType: 'doesnt matter',
},
qMeta: {
privileges: ['read', 'update', 'delete', 'exportdata'],
},
qSelectionInfo: {},
visualization: 'my-chart',
qHyperCube: {
qSize: {
qcx: 1,
qcy: 1,
},
qDimensionInfo: [],
qMeasureInfo: [
{
qApprMaxGlyphCount: 1,
qCardinal: 0,
qSortIndicator: 'N',
qNumFormat: {
qType: 'U',
qnDec: 0,
qUseThou: 0,
},
qMin: 'NaN',
qMax: 'NaN',
qIsAutoFormat: true,
qAttrExprInfo: [],
qAttrDimInfo: [],
qTrendLines: [],
},
],
qEffectiveInterColumnSortOrder: [0],
qGrandTotalRow: [
{
qText: '-',
qNum: 'NaN',
qElemNumber: -1,
qState: 'X',
qIsTotalCell: true,
},
],
qDataPages: [],
qPivotDataPages: [],
qStackedDataPages: [],
qMode: 'S',
qNoOfLeftDims: -1,
qTreeNodesOnDim: [],
qColumnOrder: [],
qError: {
qErrorCode: 7008,
},
},
};
},
getProperties() {
return {};
},
},
};
scenarios['valid-config'] = {
name: 'Valid config',
genericObject: {
getLayout() {
return {
qInfo: {
qId: 'bb8',
qType: 'doesnt matter',
},
qMeta: {
privileges: ['read', 'update', 'delete', 'exportdata'],
},
qSelectionInfo: {},
visualization: 'my-chart',
qHyperCube: {
qSize: {
qcx: 2,
qcy: 1,
},
qDimensionInfo: [
{
qFallbackTitle: '=a',
qApprMaxGlyphCount: 1,
qCardinal: 0,
qSortIndicator: 'N',
qGroupFallbackTitles: ['=a'],
qGroupPos: 0,
qStateCounts: {
qLocked: 0,
qSelected: 0,
qOption: 0,
qDeselected: 0,
qAlternative: 0,
qExcluded: 0,
qSelectedExcluded: 0,
qLockedExcluded: 0,
},
qTags: [],
qDimensionType: 'D',
qGrouping: 'N',
qNumFormat: {
qType: 'U',
qnDec: 0,
qUseThou: 0,
},
qIsAutoFormat: true,
qGroupFieldDefs: ['=a'],
qMin: 'NaN',
qMax: 'NaN',
qAttrExprInfo: [],
qAttrDimInfo: [],
qIsCalculated: true,
qCardinalities: {
qCardinal: 0,
qHypercubeCardinal: 1,
qAllValuesCardinal: -1,
},
},
],
qMeasureInfo: [
{
qFallbackTitle: '=1',
qApprMaxGlyphCount: 1,
qCardinal: 0,
qSortIndicator: 'N',
qNumFormat: {
qType: 'U',
qnDec: 0,
qUseThou: 0,
},
qMin: 1,
qMax: 1,
qIsAutoFormat: true,
qAttrExprInfo: [],
qAttrDimInfo: [],
qTrendLines: [],
},
],
qEffectiveInterColumnSortOrder: [0, 1],
qGrandTotalRow: [
{
qText: '1',
qNum: 1,
qElemNumber: -1,
qState: 'X',
qIsTotalCell: true,
},
],
qDataPages: [],
qPivotDataPages: [],
qStackedDataPages: [],
qMode: 'S',
qNoOfLeftDims: -1,
qTreeNodesOnDim: [],
qColumnOrder: [],
},
};
},
getProperties() {
return {};
},
},
};
scenarios.destroy = {
name: 'Destroy',
genericObject: {
getLayout() {
return {
qInfo: {
qId: 'bb8',
qType: 'doesnt matter',
},
qMeta: {
privileges: ['read', 'update', 'delete', 'exportdata'],
},
qSelectionInfo: {},
visualization: 'my-chart',
qHyperCube: {
qSize: {
qcx: 2,
qcy: 1,
},
qDimensionInfo: [
{
qFallbackTitle: '=a',
qApprMaxGlyphCount: 1,
qCardinal: 0,
qSortIndicator: 'N',
qGroupFallbackTitles: ['=a'],
qGroupPos: 0,
qStateCounts: {
qLocked: 0,
qSelected: 0,
qOption: 0,
qDeselected: 0,
qAlternative: 0,
qExcluded: 0,
qSelectedExcluded: 0,
qLockedExcluded: 0,
},
qTags: [],
qDimensionType: 'D',
qGrouping: 'N',
qNumFormat: {
qType: 'U',
qnDec: 0,
qUseThou: 0,
},
qIsAutoFormat: true,
qGroupFieldDefs: ['=a'],
qMin: 'NaN',
qMax: 'NaN',
qAttrExprInfo: [],
qAttrDimInfo: [],
qIsCalculated: true,
qCardinalities: {
qCardinal: 0,
qHypercubeCardinal: 1,
qAllValuesCardinal: -1,
},
},
],
qMeasureInfo: [
{
qFallbackTitle: '=1',
qApprMaxGlyphCount: 1,
qCardinal: 0,
qSortIndicator: 'N',
qNumFormat: {
qType: 'U',
qnDec: 0,
qUseThou: 0,
},
qMin: 1,
qMax: 1,
qIsAutoFormat: true,
qAttrExprInfo: [],
qAttrDimInfo: [],
qTrendLines: [],
},
],
qEffectiveInterColumnSortOrder: [0, 1],
qGrandTotalRow: [
{
qText: '1',
qNum: 1,
qElemNumber: -1,
qState: 'X',
qIsTotalCell: true,
},
],
qDataPages: [],
qPivotDataPages: [],
qStackedDataPages: [],
qMode: 'S',
qNoOfLeftDims: -1,
qTreeNodesOnDim: [],
qColumnOrder: [],
},
};
},
getProperties() {
return {};
},
removeListener() {
return {};
},
},
post: (viz) => {
window.setTimeout(() => viz.destroy(), 500);
},
};
const { useElement, useLayout, embed } = window.stardust;
const chart = {
qae: {
data: {
targets: [
{
path: '/qHyperCubeDef',
dimensions: { min: 1, description: () => 'Some dimension' },
measures: { min: 1 },
},
],
},
},
component() {
const element = useElement();
const layout = useLayout();
element.innerHTML = `
<div>
<div class="rendered">Success!</div>
<div class="pages">${layout.qHyperCube.qDataPages[0] && layout.qHyperCube.qDataPages[0].qMatrix[0][1].qText}</div>
</div>
`;
},
};
const configuration = embed.createConfiguration({
types: [
{
name: 'my-chart',
load: () =>
new Promise((resolve) => {
setTimeout(() => resolve(chart), 1500);
}),
},
],
});
function getScenario() {
const queryParams = new URLSearchParams(window.location.search);
const id = queryParams.get('scenario');
const scenario = scenarios[id];
if (!scenario) {
throw new Error(`No scenario with id "${id}" found`);
}
return scenario;
}
async function render() {
const scenario = getScenario();
const app = await window.enigmaMocker.fromGenericObjects([scenario.genericObject]);
const element = document.querySelector('.viz');
const viz = await configuration(app).render({ element, id: 'bb8' });
if (typeof scenario.post === 'function') {
scenario.post(viz);
}
}
function addButtons() {
const actionsElement = document.querySelector('.actions');
Object.entries(scenarios).forEach(([id, scenario]) => {
const btn = document.createElement('button');
btn.textContent = scenario.name;
btn.addEventListener('click', () => {
window.location = `/visualize/life-mocked.html?scenario=${id}`;
});
actionsElement.appendChild(btn);
});
}
window.addEventListener('load', render);
window.addEventListener('load', addButtons);

180
yarn.lock
View File

@@ -6118,14 +6118,6 @@
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
"@types/bytebuffer@^5.0.40":
version "5.0.41"
resolved "https://registry.yarnpkg.com/@types/bytebuffer/-/bytebuffer-5.0.41.tgz#6850dba4d4cd2846596b4842874d5bfc01cd3db1"
integrity sha512-Mdrv4YcaHvpkx25ksqqFaezktx3yZRcd51GZY0rY/9avyaqZdiT/GiWRhfrJhMpgzXqTOSHgGvsumGxJFNiZZA==
dependencies:
"@types/long" "*"
"@types/node" "*"
"@types/color-convert@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.0.tgz#8f5ee6b9e863dcbee5703f5a517ffb13d3ea4e22"
@@ -6286,11 +6278,6 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
"@types/long@*":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
"@types/mdast@^3.0.0":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
@@ -7393,14 +7380,6 @@ asap@^2.0.0:
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
ascli@~1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc"
integrity sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=
dependencies:
colour "~0.7.1"
optjs "~3.2.2"
asn1.js@^4.0.0:
version "4.10.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@@ -8110,13 +8089,6 @@ byte-size@^7.0.0:
resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3"
integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==
bytebuffer@~5:
version "5.0.1"
resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd"
integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=
dependencies:
long "~3"
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -8278,7 +8250,7 @@ camelcase-keys@^6.2.2:
map-obj "^4.0.0"
quick-lru "^4.0.1"
camelcase@^2.0.0, camelcase@^2.0.1:
camelcase@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
@@ -8698,15 +8670,6 @@ clipboard@^2.0.0:
select "^1.1.2"
tiny-emitter "^2.0.0"
cliui@^3.0.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
dependencies:
string-width "^1.0.1"
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
cliui@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@@ -8835,11 +8798,6 @@ colors@^1.1.2:
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
colour@~0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
integrity sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=
columnify@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb"
@@ -12027,10 +11985,10 @@ glob@7.1.3, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.5, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
glob@^7.1.4:
version "7.1.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -12039,10 +11997,10 @@ glob@^7.0.5, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.1.4:
version "7.1.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -12232,18 +12190,6 @@ growl@1.10.5:
version "1.10.5"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
grpc@^1.14.1:
version "1.24.3"
resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.24.3.tgz#92efe28dfc1250dca179b8133e40b4f2341473d9"
integrity sha512-EDemzuZTfhM0hgrXqC4PtR76O3t+hTIYJYR5vgiW0yt2WJqo4mhxUqZUirzUQz34Psz7dbLp38C6Cl7Ij2vXRQ==
dependencies:
"@types/bytebuffer" "^5.0.40"
lodash.camelcase "^4.3.0"
lodash.clone "^4.5.0"
nan "^2.13.2"
node-pre-gyp "^0.15.0"
protobufjs "^5.0.3"
gzip-size@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
@@ -14490,11 +14436,6 @@ lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
lodash.clone@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6"
integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -14592,11 +14533,6 @@ lolex@^4.1.0, lolex@^4.2.0:
resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7"
integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==
long@~3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b"
integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -15222,7 +15158,7 @@ minipass-sized@^1.0.3:
dependencies:
minipass "^3.0.0"
minipass@^2.2.1, minipass@^2.3.4, minipass@^2.8.6:
minipass@^2.2.1, minipass@^2.3.4:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
@@ -15237,7 +15173,7 @@ minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
dependencies:
yallist "^4.0.0"
minizlib@^1.1.1, minizlib@^1.2.1:
minizlib@^1.1.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
dependencies:
@@ -15449,11 +15385,6 @@ mute-stream@0.0.8, mute-stream@~0.0.4:
version "0.0.8"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
nan@^2.13.2:
version "2.14.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
nan@^2.9.2:
version "2.12.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
@@ -15491,15 +15422,6 @@ needle@^2.2.1:
iconv-lite "^0.4.4"
sax "^1.2.4"
needle@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz#e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0"
integrity sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
@@ -15690,22 +15612,6 @@ node-pre-gyp@^0.10.0:
semver "^5.3.0"
tar "^4"
node-pre-gyp@^0.15.0:
version "0.15.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz#c2fc383276b74c7ffa842925241553e8b40f1087"
integrity sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.3"
needle "^2.5.0"
nopt "^4.0.1"
npm-packlist "^1.1.6"
npmlog "^4.0.2"
rc "^1.2.7"
rimraf "^2.6.1"
semver "^5.3.0"
tar "^4.4.2"
node-releases@^1.1.61, node-releases@^1.1.70, node-releases@^1.1.71:
version "1.1.71"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb"
@@ -16239,11 +16145,6 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
optjs@~3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee"
integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4=
ora@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
@@ -16267,13 +16168,6 @@ os-homedir@^1.0.0, os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
os-locale@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
dependencies:
lcid "^1.0.0"
os-locale@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
@@ -17475,16 +17369,6 @@ proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
protobufjs@^5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17"
integrity sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==
dependencies:
ascli "~1"
bytebuffer "~5"
glob "^7.0.5"
yargs "^3.10.0"
protocols@^1.1.0, protocols@^1.4.0:
version "1.4.7"
resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32"
@@ -17610,13 +17494,6 @@ qix-faker@0.3.0:
dependencies:
faker "^4.1.0"
qlik-sse@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/qlik-sse/-/qlik-sse-0.3.0.tgz#d251bf1ffd0059d1721e893a58db5fd62560d0fd"
integrity sha512-vbhoF7R3qWg4kKTDjN/mnPdbRFmn4gPQIrEp2Q8t1QLChtEAjZJU54OSJd2qzn7F1zHv5I2Zg7CNs2QEw+hP/w==
dependencies:
grpc "^1.14.1"
qs@6.7.0:
version "6.7.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
@@ -20121,19 +19998,6 @@ tar@^4, tar@^4.4.8:
safe-buffer "^5.1.2"
yallist "^3.0.2"
tar@^4.4.2:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
minipass "^2.8.6"
minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
yallist "^3.0.3"
tar@^6.0.2:
version "6.0.5"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f"
@@ -21389,11 +21253,6 @@ wildcard@^2.0.0:
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
window-size@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=
word-wrap@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@@ -21584,7 +21443,7 @@ xtend@^4.0.1:
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
y18n@^3.2.0, y18n@^3.2.1:
y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
@@ -21602,7 +21461,7 @@ yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
yallist@^3.0.0, yallist@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
@@ -21807,19 +21666,6 @@ yargs@^17.0.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
yargs@^3.10.0:
version "3.32.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=
dependencies:
camelcase "^2.0.1"
cliui "^3.0.3"
decamelize "^1.1.1"
os-locale "^1.4.0"
string-width "^1.0.1"
window-size "^0.1.4"
y18n "^3.2.0"
yauzl@2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"