mirror of
https://github.com/pezkuwichain/pezkuwi-telemetry.git
synced 2026-06-13 10:21:02 +00:00
Fix unit tests (#248)
* Fix tests - Remove jest tests and add coverage - Rebase master and fix tests * Ignore local .vscode Add clean script * Fix deps - Upgrade deps - Switch to esnext * Move tests to the right folder * Deps cleanup and bump up * Remove root level package.json * Fix grumbles * Remove the labeler action due to https://github.com/actions/labeler/issues/12 * Fix grumbles
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
Frontend:
|
||||
- frontend/**/*
|
||||
|
||||
Backend:
|
||||
- backend/**/*
|
||||
@@ -1,19 +0,0 @@
|
||||
# This workflow will triage pull requests and apply a label based on the
|
||||
# paths that are modified in the pull request.
|
||||
#
|
||||
# To use this workflow, you will need to set up a .github/labeler.yml
|
||||
# file with configuration. For more information, see:
|
||||
# https://github.com/actions/labeler/blob/master/README.md
|
||||
|
||||
name: Labeler
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
label:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/labeler@v2
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
@@ -18,6 +18,7 @@ build
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
env-config.js
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
.nyc
|
||||
.nyc_output
|
||||
+32
-45
@@ -4,61 +4,48 @@
|
||||
"author": "Parity Technologies Ltd. <admin@parity.io>",
|
||||
"license": "GPL-3.0",
|
||||
"description": "Polkadot Telemetry frontend",
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
"ts",
|
||||
"tsx",
|
||||
"js"
|
||||
],
|
||||
"setupFiles": [
|
||||
"jest-localstorage-mock"
|
||||
],
|
||||
"transform": {
|
||||
"\\.(ts|tsx)$": "ts-jest"
|
||||
},
|
||||
"testRegex": "/test/.*\\.(spec).(ts|tsx|js)$"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fnando/sparkline": "maciejhirsz/sparkline",
|
||||
"@polkadot/util-crypto": "^1.6.1",
|
||||
"@types/react-measure": "^2.0.5",
|
||||
"blakejs": "^1.1.0",
|
||||
"husky": "^4.2.3",
|
||||
"lint-staged": "^10.1.0",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-measure": "^2.3.0",
|
||||
"react-scripts-ts": "2.17.0",
|
||||
"react-svg": "^4.1.1",
|
||||
"stable": "^0.1.8",
|
||||
"tslint": "^6.1.0"
|
||||
},
|
||||
"scripts": {
|
||||
"precommit": "lint-staged",
|
||||
"start": "react-scripts-ts start",
|
||||
"build": "react-scripts-ts build",
|
||||
"test": "echo 'FIXME: FE tests need updating'",
|
||||
"test": "TS_NODE_PROJECT=tsconfig.test.json tape -r ts-node/register test/**/*spec.ts",
|
||||
"test:coverage": "nyc yarn test",
|
||||
"eject": "react-scripts-ts eject",
|
||||
"pretty:check": "prettier --check src/**/*.{ts,tsx}",
|
||||
"pretty:fix": "prettier --write src"
|
||||
"pretty:fix": "prettier --write src",
|
||||
"clean": "rm -rf node_modules build .nyc env-config.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fnando/sparkline": "maciejhirsz/sparkline",
|
||||
"@polkadot/util-crypto": "^2.8.1",
|
||||
"@types/react-measure": "^2.0.6",
|
||||
"blakejs": "^1.1.0",
|
||||
"husky": "^4.2.5",
|
||||
"lint-staged": "^10.1.3",
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-measure": "^2.3.0",
|
||||
"react-scripts-ts": "2.17.0",
|
||||
"react-svg": "^11.0.18",
|
||||
"stable": "^0.1.8",
|
||||
"tslint": "^6.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^23.0.2",
|
||||
"@types/node": "^10.3.2",
|
||||
"@types/react": "^16.3.17",
|
||||
"@types/react-dom": "^16.0.6",
|
||||
"@types/react-svg": "^3.0.0",
|
||||
"babel-jest": "^23.6.0",
|
||||
"@types/node": "^13.11.1",
|
||||
"@types/react": "^16.9.34",
|
||||
"@types/react-dom": "^16.9.6",
|
||||
"@types/react-svg": "^5.0.0",
|
||||
"@types/tape": "^4.2.34",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"enzyme": "^3.6.0",
|
||||
"enzyme-adapter-react-16": "^1.5.0",
|
||||
"jest": "^23.6.0",
|
||||
"jest-localstorage-mock": "^2.2.0",
|
||||
"mock-socket": "^8.0.2",
|
||||
"prettier": "^2.0.2",
|
||||
"react-test-renderer": "^16.5.2",
|
||||
"ts-jest": "^23.10.2",
|
||||
"identity-obj-proxy": "^3.0.0",
|
||||
"istanbul": "^0.4.5",
|
||||
"jest": "^25.3.0",
|
||||
"nyc": "^15.0.1",
|
||||
"prettier": "^2.0.4",
|
||||
"tape": "^4.13.2",
|
||||
"ts-node": "^8.8.2",
|
||||
"tslint": "^6.1.1",
|
||||
"tslint-config-prettier": "^1.18.0",
|
||||
"tslint-plugin-prettier": "^2.3.0",
|
||||
"typescript": "^2.9.2"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Types } from './common';
|
||||
import { State, UpdateBound } from './state';
|
||||
import { ConsensusDetail } from './common/types';
|
||||
|
||||
// Number of blocks which are kept in memory
|
||||
const BLOCKS_LIMIT = 50;
|
||||
|
||||
@@ -17,6 +17,12 @@ import { ACTIONS } from './common/feed';
|
||||
const TIMEOUT_BASE = (1000 * 5) as Types.Milliseconds; // 5 seconds
|
||||
const TIMEOUT_MAX = (1000 * 60 * 5) as Types.Milliseconds; // 5 minutes
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
process_env: string;
|
||||
}
|
||||
}
|
||||
|
||||
export class Connection {
|
||||
public static async create(
|
||||
pins: PersistentSet<Types.NodeName>,
|
||||
@@ -26,11 +32,25 @@ export class Connection {
|
||||
}
|
||||
|
||||
private static readonly utf8decoder = new TextDecoder('utf-8');
|
||||
private static readonly address = Connection.getAddress();
|
||||
|
||||
private static readonly address =
|
||||
window.location.protocol === 'https:'
|
||||
? `wss://${window.location.hostname}/feed/`
|
||||
: `ws://127.0.0.1:8000/feed`;
|
||||
private static getAddress(): string {
|
||||
const ENV_URL = 'SUBSTRATE_TELEMETRY_URL';
|
||||
|
||||
if (process.env && process.env[ENV_URL]) {
|
||||
return process.env[ENV_URL] as string;
|
||||
}
|
||||
|
||||
if (window.process_env && window.process_env[ENV_URL]) {
|
||||
return window.process_env[ENV_URL];
|
||||
}
|
||||
|
||||
if (window.location.protocol === 'https:') {
|
||||
return `wss://${window.location.hostname}/feed/`;
|
||||
}
|
||||
|
||||
return `ws://127.0.0.1:8000/feed`;
|
||||
}
|
||||
|
||||
private static async socket(): Promise<WebSocket> {
|
||||
let socket = await Connection.trySocket();
|
||||
@@ -63,7 +83,6 @@ export class Connection {
|
||||
clean();
|
||||
resolve(null);
|
||||
}
|
||||
|
||||
const socket = new WebSocket(Connection.address);
|
||||
|
||||
socket.binaryType = 'arraybuffer';
|
||||
@@ -82,7 +101,6 @@ export class Connection {
|
||||
private state: Readonly<State>;
|
||||
private readonly update: Update;
|
||||
private readonly pins: PersistentSet<Types.NodeName>;
|
||||
|
||||
constructor(
|
||||
socket: WebSocket,
|
||||
update: Update,
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.Consensus .flexContainerLargeRow .firstInRow .emptylegend,
|
||||
.Consensus .flexContainerLargeRow .firstInRow .emptyLegend,
|
||||
.Consensus .flexContainerLargeRow .firstInRow .nameLegend {
|
||||
width: 99%;
|
||||
flex-grow: 1000000000;
|
||||
@@ -134,7 +134,7 @@
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
.Consensus .flexContainerLargeRow .noStretchOnLastRow .firstInRow .emptylegend {
|
||||
.Consensus .flexContainerLargeRow .noStretchOnLastRow .firstInRow .emptyLegend {
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,325 +0,0 @@
|
||||
import * as Enzyme from './enzyme';
|
||||
const { shallow, mount } = Enzyme;
|
||||
|
||||
import { Server } from 'mock-socket';
|
||||
|
||||
import { Types, FeedMessage, timestamp, VERSION, SortedCollection } from '../../common';
|
||||
|
||||
import { Node, Update, State } from '../src/state';
|
||||
import { Connection } from '../src/Connection';
|
||||
import { PersistentObject, PersistentSet } from '../src/persist';
|
||||
|
||||
const { Actions } = FeedMessage;
|
||||
|
||||
describe('Connection.ts', () => {
|
||||
const fakeWebSocketURL = 'ws://localhost:8080';
|
||||
const mockServer = new Server(fakeWebSocketURL);
|
||||
|
||||
mockServer.on('connection', (socket: any) => {
|
||||
console.log('Got connection!');
|
||||
|
||||
// socket.on('message', (message: any) => {
|
||||
// console.log('message received by web socket -> ', message);
|
||||
// });
|
||||
//
|
||||
// socket.send('[0,15,8,["BBQ Birch",6],8,["Pistachios",57]]');
|
||||
});
|
||||
|
||||
let state: State;
|
||||
let connection: Connection;
|
||||
let handleMessages: any;
|
||||
let update: any;
|
||||
|
||||
const settings: State.Settings = {
|
||||
location: false,
|
||||
validator: false,
|
||||
implementation: false,
|
||||
peers: false,
|
||||
txs: false,
|
||||
cpu: false,
|
||||
mem: false,
|
||||
blocknumber: false,
|
||||
blockhash: false,
|
||||
blocktime: false,
|
||||
blockpropagation: false,
|
||||
blocklasttime: false
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
state = {
|
||||
status: 'offline',
|
||||
best: 0 as Types.BlockNumber,
|
||||
blockTimestamp: 0 as Types.Timestamp,
|
||||
blockAverage: null,
|
||||
timeDiff: 0 as Types.Milliseconds,
|
||||
subscribed: null,
|
||||
chains: new Map(),
|
||||
nodes: new SortedCollection(Node.compare),
|
||||
settings,
|
||||
pins: new Set()
|
||||
} as State;
|
||||
|
||||
const pins: PersistentSet<Types.NodeName> = new PersistentSet<Types.NodeName>('key', ((p) => {}));
|
||||
|
||||
update = jest.fn((changes) => {
|
||||
// console.log('message passed to the update function -> ', changes);
|
||||
|
||||
state = Object.assign({}, state, changes);
|
||||
|
||||
// stub update function
|
||||
return state as Readonly<State>;
|
||||
}) as Update;
|
||||
|
||||
connection = await Connection.create(pins, update);
|
||||
|
||||
const before = connection.handleMessages;
|
||||
|
||||
connection.handleMessages = jest.fn(connection.handleMessages);
|
||||
|
||||
// console.log('handle after', connection.handleMessages === handleMessages, connection.handleMessages === before);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
// clear stubs and fakes after each test case
|
||||
// connection.handleMessages.restore();
|
||||
})
|
||||
|
||||
test('handle Feed Version message state update', async () => {
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.FeedVersion,
|
||||
payload: VERSION
|
||||
}
|
||||
] as any as FeedMessage.Message[])
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.status).toBe('online');
|
||||
})
|
||||
|
||||
test('handle Best Block message state update', () => {
|
||||
const time = timestamp();
|
||||
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.BestBlock,
|
||||
payload: [1, time, 0],
|
||||
}, {
|
||||
action: Actions.BestBlock,
|
||||
payload: [1, time, 123456789]
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.blockTimestamp).toBe(time);
|
||||
expect(state.blockAverage).toBe(123456789);
|
||||
})
|
||||
|
||||
describe('Add and Remove a Node', () => {
|
||||
const time = timestamp();
|
||||
|
||||
test('handle Added Node message state update', () => {
|
||||
/*
|
||||
Added Node Message (NodeId, NodeDetails, NodeStats, BlockDetails, Maybe<NodeLocation>)
|
||||
*/
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.AddedNode,
|
||||
payload: [1, ['Sample Node', 'Sampling', '1.2.3', '0x123456789012345'], [12, 84], [[38], [78], [5]], [1, 'aoaiuhsf9o2ih389r', 777, time, 829]],
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.status).toBe('online');
|
||||
expect(state.nodes).toBeDefined();
|
||||
|
||||
const firstNode = state.nodes.sorted()[0];
|
||||
|
||||
expect(firstNode.id).toBe(1);
|
||||
expect(firstNode.name).toBe('Sample Node');
|
||||
expect(firstNode.implementation).toBe('Sampling');
|
||||
expect(firstNode.validator).toBe('0x123456789012345');
|
||||
expect(firstNode.peers).toBe(12);
|
||||
expect(firstNode.txs).toBe(84);
|
||||
expect(firstNode.mem).toEqual([38]);
|
||||
expect(firstNode.cpu).toEqual([78]);
|
||||
expect(firstNode.height).toBe(1);
|
||||
expect(firstNode.hash).toBe('aoaiuhsf9o2ih389r');
|
||||
expect(firstNode.blockTime).toBe(777);
|
||||
expect(firstNode.blockTimestamp).toBe(time);
|
||||
expect(firstNode.propagationTime).toBe(829);
|
||||
})
|
||||
|
||||
test('handle Located Node message state update', () => {
|
||||
|
||||
/*
|
||||
Located Node
|
||||
[NodeId, Latitude, Longitude, City]
|
||||
*/
|
||||
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.LocatedNode,
|
||||
payload: [1, 30.828, 101.4111, 'Kuala Lumpur']
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
|
||||
const firstNode = state.nodes.sorted()[0];
|
||||
|
||||
expect(firstNode.lat).toEqual(30.828)
|
||||
expect(firstNode.lon).toEqual(101.4111)
|
||||
expect(firstNode.city).toEqual('Kuala Lumpur')
|
||||
});
|
||||
|
||||
test('handle Time Sync message state update', () => {
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.TimeSync,
|
||||
payload: time + 12345432
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
const firstNode = state.nodes.sorted()[0];
|
||||
|
||||
expect(firstNode.blockTimestamp).toBe(time);
|
||||
})
|
||||
|
||||
test('handle Imported Block message state update', () => {
|
||||
/*
|
||||
ImportedBlockMessage [NodeId, BlockDetails]
|
||||
BlockDetails = [BlockNumber, BlockHash, Milliseconds, Timestamp, Maybe<PropagationTime>]
|
||||
*/
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.ImportedBlock,
|
||||
payload: ["BBQ Birch", [1, 'ABCDEFGH12345678', 123, time, 48292010]],
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
const firstSortedNode = state.nodes.sorted()[0];
|
||||
|
||||
expect(firstSortedNode.pinned).toBeFalsy();
|
||||
expect(firstSortedNode).toMatchObject({
|
||||
pinned: false,
|
||||
id: 1,
|
||||
name: 'Sample Node',
|
||||
implementation: 'Sampling',
|
||||
version: '1.2.3',
|
||||
validator: '0x123456789012345',
|
||||
peers: 12,
|
||||
txs: 84,
|
||||
mem: [38],
|
||||
cpu: [78],
|
||||
height: 1,
|
||||
hash: 'aoaiuhsf9o2ih389r',
|
||||
blockTime: 777,
|
||||
blockTimestamp: time,
|
||||
propagationTime: 829,
|
||||
lat: 30.828,
|
||||
lon: 101.4111,
|
||||
city: 'Kuala Lumpur'
|
||||
});
|
||||
});
|
||||
|
||||
test('handle Removed Node message state update', () => {
|
||||
/*
|
||||
payload: 1
|
||||
*/
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.RemovedNode,
|
||||
payload: 1
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.nodes.sorted()).toEqual([]);
|
||||
})
|
||||
})
|
||||
|
||||
describe('Add and Remove a Chain', () => {
|
||||
test('handle Added Chain message state update', () => {
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.AddedChain,
|
||||
payload: ["BBQ Birch", 6],
|
||||
}, {
|
||||
action: Actions.AddedChain,
|
||||
payload: ["Krumme Lanke", 57]
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
|
||||
const chains = [];
|
||||
|
||||
for (const chain of state.chains) {
|
||||
chains.push(chain);
|
||||
}
|
||||
|
||||
const firstChain = chains[0];
|
||||
const secondChain = chains[1];
|
||||
|
||||
expect(chains).toHaveLength(2);
|
||||
expect(firstChain).toEqual([ 'BBQ Birch', 6 ]);
|
||||
expect(secondChain).toEqual([ 'Krumme Lanke', 57 ]);
|
||||
});
|
||||
|
||||
test('handle Node Stats message state update', () => {
|
||||
|
||||
})
|
||||
|
||||
|
||||
describe('Subscribe and Unsubscribe to Message', () => {
|
||||
test('handle Subscribed To message state update', () => {
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.SubscribedTo,
|
||||
payload: 'BBQ Birch'
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.subscribed).toBe('BBQ Birch');
|
||||
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.SubscribedTo,
|
||||
payload: 'Krumme Lanke'
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.subscribed).toBe('Krumme Lanke');
|
||||
});
|
||||
|
||||
test('handle Unsubscribed From message state update', () => {
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.UnsubscribedFrom,
|
||||
payload: 'Krumme Lanke'
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.subscribed).toBeFalsy();
|
||||
})
|
||||
})
|
||||
|
||||
test('handle Removed Chain message state update', () => {
|
||||
connection.handleMessages([
|
||||
{
|
||||
action: Actions.RemovedChain,
|
||||
payload: 'BBQ Birch'
|
||||
}, {
|
||||
action: Actions.RemovedChain,
|
||||
payload: 'Krumme Lanke'
|
||||
}
|
||||
] as any as FeedMessage.Message[]);
|
||||
|
||||
expect(update).toHaveBeenCalled();
|
||||
expect(state.chains.keys()).toMatchObject({});
|
||||
})
|
||||
})
|
||||
});
|
||||
@@ -1,13 +1,11 @@
|
||||
const test = require('tape');
|
||||
const common = require('../build/common');
|
||||
|
||||
import * as test from 'tape';
|
||||
import { sortedInsert, sortedIndexOf } from '../src/common';
|
||||
test('sortedInsert', (assert) => {
|
||||
const { sortedInsert } = common;
|
||||
const cmp = (a, b) => a - b;
|
||||
const cmp = (a: number, b: number) => a - b;
|
||||
|
||||
let mod = sortedInsert(3, [1, 2, 4, 5], cmp);
|
||||
let _mod = sortedInsert(3, [1, 2, 4, 5], cmp);
|
||||
|
||||
function assertInsert(item, into, equals) {
|
||||
function assertInsert(item: number, into: number[], equals: number[]) {
|
||||
sortedInsert(item, into, cmp);
|
||||
assert.same(into, equals, `Inserts ${item}`);
|
||||
}
|
||||
@@ -26,14 +24,13 @@ test('sortedInsert', (assert) => {
|
||||
});
|
||||
|
||||
test('sortedInsert fuzz', (assert) => {
|
||||
const { sortedInsert } = common;
|
||||
const cmp = (a, b) => a - b;
|
||||
const cmp = (a: number, b: number) => a - b;
|
||||
const scramble = () => Math.random() - 0.5;
|
||||
const sorted = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||||
|
||||
for (let i = 0; i < 50; i++) {
|
||||
const scrambled = sorted.sort(scramble);
|
||||
const resorted = [];
|
||||
const resorted: number[] = [];
|
||||
|
||||
for (const item of scrambled) {
|
||||
sortedInsert(item, resorted, cmp);
|
||||
@@ -46,9 +43,8 @@ test('sortedInsert fuzz', (assert) => {
|
||||
});
|
||||
|
||||
test('sortedInsert indexes', (assert) => {
|
||||
const { sortedInsert } = common;
|
||||
const cmp = (a, b) => a - b;
|
||||
const into = [];
|
||||
const cmp = (a: number, b: number) => a - b;
|
||||
const into:number[] = [];
|
||||
|
||||
assert.equals(sortedInsert(5, into, cmp), 0, 'Insert 5');
|
||||
assert.same(into, [5], 'Elements check out');
|
||||
@@ -72,21 +68,27 @@ test('sortedInsert indexes', (assert) => {
|
||||
assert.end();
|
||||
});
|
||||
|
||||
type ValueObj = {
|
||||
value: number;
|
||||
};
|
||||
|
||||
test('sortedIndexOf', (assert) => {
|
||||
const { sortedIndexOf } = common;
|
||||
const cmp = (a, b) => a.value - b.value;
|
||||
const array = [];
|
||||
const cmp = (a: ValueObj, b: ValueObj) => a.value - b.value;
|
||||
const array: Array<ValueObj> = [];
|
||||
|
||||
for (let i = 1; i <= 1000; i++) {
|
||||
array.push({ value: i >> 1 });
|
||||
}
|
||||
|
||||
for (let i = 0; i < 50; i++) {
|
||||
let index = Math.random() * 1000 | 0;
|
||||
let index = (Math.random() * 1000) | 0;
|
||||
const item = array[index];
|
||||
|
||||
item = array[index];
|
||||
|
||||
assert.equals(sortedIndexOf(item, array, cmp), array.indexOf(item), `Correct for ${item.value}`);
|
||||
assert.equals(
|
||||
sortedIndexOf(item, array, cmp),
|
||||
array.indexOf(item),
|
||||
`Correct for ${item.value}`
|
||||
);
|
||||
}
|
||||
|
||||
assert.end();
|
||||
@@ -1,12 +0,0 @@
|
||||
// Copyright 2017-2018 @polkadot authors & contributors
|
||||
// This software may be modified and distributed under the terms
|
||||
// of the ISC license. See the LICENSE file for details.
|
||||
|
||||
const Adapter = require('enzyme-adapter-react-16');
|
||||
const Enzyme = require('enzyme');
|
||||
|
||||
Enzyme.configure({
|
||||
adapter: new Adapter()
|
||||
});
|
||||
|
||||
module.exports = Enzyme;
|
||||
@@ -13,7 +13,7 @@
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"noEmitOnError": false,
|
||||
"pretty": true,
|
||||
"forceConsistentCasingInFileNames": false,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noErrorTruncation": true,
|
||||
"noImplicitReturns": true,
|
||||
"noImplicitAny": true,
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
{
|
||||
"extends": "./tsconfig.json"
|
||||
}
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs"
|
||||
}
|
||||
}
|
||||
|
||||
+2476
-1026
File diff suppressed because it is too large
Load Diff
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=9.5",
|
||||
"yarn": "^1.3.2"
|
||||
},
|
||||
"resolutions": {
|
||||
"kind-of": ">=6.0.3"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "cd frontend && yarn start",
|
||||
"build": "npm-run-all --parallel build:*",
|
||||
"build:frontend": "cd frontend && yarn build",
|
||||
"test": "npm-run-all --parallel test:*",
|
||||
"test:frontend": "cd frontend && yarn test",
|
||||
"test:backend": "cd backend && cargo test",
|
||||
"check": "yarn pretty:check",
|
||||
"check:frontend": "cd frontend && yarn pretty:check",
|
||||
"check:backend": "cd backend && cargo check"
|
||||
},
|
||||
"devDependencies": {
|
||||
"npm-run-all": "^4.1.5"
|
||||
}
|
||||
}
|
||||
@@ -1,421 +0,0 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
balanced-match@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||
dependencies:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
chalk@^2.4.1:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||
dependencies:
|
||||
color-name "1.1.3"
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
|
||||
dependencies:
|
||||
nice-try "^1.0.4"
|
||||
path-key "^2.0.1"
|
||||
semver "^5.5.0"
|
||||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
define-properties@^1.1.2, define-properties@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||
integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
|
||||
dependencies:
|
||||
object-keys "^1.0.12"
|
||||
|
||||
error-ex@^1.3.1:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
||||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
||||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
|
||||
version "1.17.5"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
|
||||
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
|
||||
dependencies:
|
||||
es-to-primitive "^1.2.1"
|
||||
function-bind "^1.1.1"
|
||||
has "^1.0.3"
|
||||
has-symbols "^1.0.1"
|
||||
is-callable "^1.1.5"
|
||||
is-regex "^1.0.5"
|
||||
object-inspect "^1.7.0"
|
||||
object-keys "^1.1.1"
|
||||
object.assign "^4.1.0"
|
||||
string.prototype.trimleft "^2.1.1"
|
||||
string.prototype.trimright "^2.1.1"
|
||||
|
||||
es-to-primitive@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
|
||||
integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
|
||||
dependencies:
|
||||
is-callable "^1.1.4"
|
||||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.2"
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
graceful-fs@^4.1.2:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
|
||||
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||
|
||||
has-symbols@^1.0.0, has-symbols@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
|
||||
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
|
||||
|
||||
has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hosted-git-info@^2.1.4:
|
||||
version "2.8.8"
|
||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
|
||||
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
|
||||
|
||||
is-arrayish@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
|
||||
|
||||
is-callable@^1.1.4, is-callable@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
|
||||
integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
|
||||
|
||||
is-date-object@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
|
||||
integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
|
||||
|
||||
is-regex@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
|
||||
integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-symbol@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
|
||||
integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
|
||||
dependencies:
|
||||
has-symbols "^1.0.1"
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
json-parse-better-errors@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
|
||||
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
|
||||
|
||||
kind-of@>=6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
||||
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
|
||||
|
||||
load-json-file@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
|
||||
integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
parse-json "^4.0.0"
|
||||
pify "^3.0.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
memorystream@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
|
||||
integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
nice-try@^1.0.4:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
|
||||
|
||||
normalize-package-data@^2.3.2:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
|
||||
dependencies:
|
||||
hosted-git-info "^2.1.4"
|
||||
resolve "^1.10.0"
|
||||
semver "2 || 3 || 4 || 5"
|
||||
validate-npm-package-license "^3.0.1"
|
||||
|
||||
npm-run-all@^4.1.5:
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba"
|
||||
integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
chalk "^2.4.1"
|
||||
cross-spawn "^6.0.5"
|
||||
memorystream "^0.3.1"
|
||||
minimatch "^3.0.4"
|
||||
pidtree "^0.3.0"
|
||||
read-pkg "^3.0.0"
|
||||
shell-quote "^1.6.1"
|
||||
string.prototype.padend "^3.0.0"
|
||||
|
||||
object-inspect@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
|
||||
integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
|
||||
|
||||
object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
||||
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
||||
|
||||
object.assign@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
|
||||
integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
|
||||
dependencies:
|
||||
define-properties "^1.1.2"
|
||||
function-bind "^1.1.1"
|
||||
has-symbols "^1.0.0"
|
||||
object-keys "^1.0.11"
|
||||
|
||||
parse-json@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
|
||||
integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
|
||||
dependencies:
|
||||
error-ex "^1.3.1"
|
||||
json-parse-better-errors "^1.0.1"
|
||||
|
||||
path-key@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||
|
||||
path-parse@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||
|
||||
path-type@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
|
||||
integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
|
||||
dependencies:
|
||||
pify "^3.0.0"
|
||||
|
||||
pidtree@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
|
||||
integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==
|
||||
|
||||
pify@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
|
||||
|
||||
read-pkg@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
|
||||
integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
|
||||
dependencies:
|
||||
load-json-file "^4.0.0"
|
||||
normalize-package-data "^2.3.2"
|
||||
path-type "^3.0.0"
|
||||
|
||||
resolve@^1.10.0:
|
||||
version "1.15.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
|
||||
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
|
||||
dependencies:
|
||||
path-parse "^1.0.6"
|
||||
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.5.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
|
||||
dependencies:
|
||||
shebang-regex "^1.0.0"
|
||||
|
||||
shebang-regex@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
|
||||
|
||||
shell-quote@^1.6.1:
|
||||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
|
||||
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
|
||||
|
||||
spdx-correct@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
|
||||
integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
|
||||
dependencies:
|
||||
spdx-expression-parse "^3.0.0"
|
||||
spdx-license-ids "^3.0.0"
|
||||
|
||||
spdx-exceptions@^2.1.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
|
||||
integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
|
||||
|
||||
spdx-expression-parse@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
|
||||
integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
|
||||
dependencies:
|
||||
spdx-exceptions "^2.1.0"
|
||||
spdx-license-ids "^3.0.0"
|
||||
|
||||
spdx-license-ids@^3.0.0:
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
|
||||
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
|
||||
|
||||
string.prototype.padend@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3"
|
||||
integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.0-next.1"
|
||||
|
||||
string.prototype.trimend@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373"
|
||||
integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.5"
|
||||
|
||||
string.prototype.trimleft@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
|
||||
integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.5"
|
||||
string.prototype.trimstart "^1.0.0"
|
||||
|
||||
string.prototype.trimright@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
|
||||
integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.5"
|
||||
string.prototype.trimend "^1.0.0"
|
||||
|
||||
string.prototype.trimstart@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2"
|
||||
integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==
|
||||
dependencies:
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.17.5"
|
||||
|
||||
strip-bom@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
validate-npm-package-license@^3.0.1:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
||||
integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
|
||||
dependencies:
|
||||
spdx-correct "^3.0.0"
|
||||
spdx-expression-parse "^3.0.0"
|
||||
|
||||
which@^1.2.9:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
Reference in New Issue
Block a user