perf: migrate to undici for node env #74
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
"types": "./lib/types/index.d.ts",
|
||||
"sideEffects": false,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
"node": ">=16"
|
||||
},
|
||||
"scripts": {
|
||||
"build:cjs": "tsc -b tsconfig.json && tsc-alias -p tsconfig.json",
|
||||
@@ -56,11 +56,11 @@
|
||||
"arweave-multihost": "^0.1.0",
|
||||
"axios": "^0.21.4",
|
||||
"bignumber.js": "^9.0.1",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"json-beautify": "^1.1.1",
|
||||
"knex": "^0.95.14",
|
||||
"lodash": "^4.17.21",
|
||||
"tslog": "^3.2.2"
|
||||
"tslog": "^3.2.2",
|
||||
"undici": "^4.12.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/cheerio": "^0.22.30",
|
||||
@@ -77,8 +77,8 @@
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-prettier": "^3.4.1",
|
||||
"express": "^4.17.1",
|
||||
"got": "^11.8.2",
|
||||
"jest": "^27.4.3",
|
||||
"pg": "^8.7.1",
|
||||
"prettier": "^2.3.2",
|
||||
"rimraf": "^3.0.2",
|
||||
"safe-stable-stringify": "2.3.1",
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
ArTransfer,
|
||||
ArWallet,
|
||||
ArweaveWrapper,
|
||||
Benchmark,
|
||||
BenchmarkStats,
|
||||
Contract,
|
||||
@@ -56,6 +57,8 @@ export class HandlerBasedContract<State> implements Contract<State> {
|
||||
|
||||
private _benchmarkStats: BenchmarkStats = null;
|
||||
|
||||
private readonly _arweaveWrapper: ArweaveWrapper;
|
||||
|
||||
/**
|
||||
* wallet connected to this contract
|
||||
*/
|
||||
@@ -68,6 +71,7 @@ export class HandlerBasedContract<State> implements Contract<State> {
|
||||
private readonly _callingInteraction: GQLNodeInterface = null
|
||||
) {
|
||||
this.waitForConfirmation = this.waitForConfirmation.bind(this);
|
||||
this._arweaveWrapper = new ArweaveWrapper(smartweave.arweave);
|
||||
if (_parentContract != null) {
|
||||
this._networkInfo = _parentContract.getNetworkInfo();
|
||||
this._rootBlockHeight = _parentContract.getRootBlockHeight();
|
||||
@@ -305,7 +309,7 @@ export class HandlerBasedContract<State> implements Contract<State> {
|
||||
};
|
||||
} else {
|
||||
this.logger.debug('Reading network info for root call');
|
||||
currentNetworkInfo = await arweave.network.getInfo();
|
||||
currentNetworkInfo = await this._arweaveWrapper.info();
|
||||
this._networkInfo = currentNetworkInfo;
|
||||
}
|
||||
} else {
|
||||
@@ -458,7 +462,7 @@ export class HandlerBasedContract<State> implements Contract<State> {
|
||||
|
||||
// add block data to execution context
|
||||
if (!executionContext.currentBlockData) {
|
||||
const currentBlockData = executionContext.currentNetworkInfo
|
||||
const currentBlockData = executionContext.currentNetworkInfo?.current
|
||||
? // trying to optimise calls to arweave as much as possible...
|
||||
await arweave.blocks.get(executionContext.currentNetworkInfo.current)
|
||||
: await arweave.blocks.getCurrent();
|
||||
@@ -534,7 +538,7 @@ export class HandlerBasedContract<State> implements Contract<State> {
|
||||
|
||||
const interaction: ContractInteraction<Input> = {
|
||||
input,
|
||||
caller: this._parentContract.txId() //executionContext.caller
|
||||
caller: this._parentContract.txId()
|
||||
};
|
||||
|
||||
const interactionData: InteractionData<Input> = {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
ArweaveWrapper,
|
||||
Benchmark,
|
||||
EvaluationOptions,
|
||||
GQLEdgeInterface,
|
||||
@@ -23,7 +24,7 @@ interface BlockFilter {
|
||||
max: number;
|
||||
}
|
||||
|
||||
interface ReqVariables {
|
||||
export interface GqlReqVariables {
|
||||
tags: TagFilter[];
|
||||
blockFilter: BlockFilter;
|
||||
first: number;
|
||||
@@ -63,7 +64,11 @@ export class ArweaveGatewayInteractionsLoader implements InteractionsLoader {
|
||||
|
||||
private static readonly _30seconds = 30 * 1000;
|
||||
|
||||
constructor(private readonly arweave: Arweave) {}
|
||||
private readonly arweaveWrapper: ArweaveWrapper;
|
||||
|
||||
constructor(private readonly arweave: Arweave) {
|
||||
this.arweaveWrapper = new ArweaveWrapper(arweave);
|
||||
}
|
||||
|
||||
async load(
|
||||
contractId: string,
|
||||
@@ -72,7 +77,7 @@ export class ArweaveGatewayInteractionsLoader implements InteractionsLoader {
|
||||
evaluationOptions: EvaluationOptions
|
||||
): Promise<GQLEdgeInterface[]> {
|
||||
this.logger.debug('Loading interactions for', { contractId, fromBlockHeight, toBlockHeight });
|
||||
const mainTransactionsVariables: ReqVariables = {
|
||||
const mainTransactionsVariables: GqlReqVariables = {
|
||||
tags: [
|
||||
{
|
||||
name: SmartWeaveTags.APP_NAME,
|
||||
@@ -90,10 +95,12 @@ export class ArweaveGatewayInteractionsLoader implements InteractionsLoader {
|
||||
first: MAX_REQUEST
|
||||
};
|
||||
|
||||
const loadingBenchmark = Benchmark.measure();
|
||||
let interactions = await this.loadPages(mainTransactionsVariables);
|
||||
loadingBenchmark.stop();
|
||||
|
||||
if (evaluationOptions.internalWrites) {
|
||||
const innerWritesVariables: ReqVariables = {
|
||||
const innerWritesVariables: GqlReqVariables = {
|
||||
tags: [
|
||||
{
|
||||
name: SmartWeaveTags.INTERACT_WRITE,
|
||||
@@ -111,16 +118,17 @@ export class ArweaveGatewayInteractionsLoader implements InteractionsLoader {
|
||||
interactions = interactions.concat(innerWritesInteractions);
|
||||
}
|
||||
|
||||
this.logger.debug('All loaded interactions:', {
|
||||
this.logger.info('All loaded interactions:', {
|
||||
from: fromBlockHeight,
|
||||
to: toBlockHeight,
|
||||
loaded: interactions.length
|
||||
loaded: interactions.length,
|
||||
time: loadingBenchmark.elapsed()
|
||||
});
|
||||
|
||||
return interactions;
|
||||
}
|
||||
|
||||
private async loadPages(variables: ReqVariables) {
|
||||
private async loadPages(variables: GqlReqVariables) {
|
||||
let transactions = await this.getNextPage(variables);
|
||||
|
||||
// note: according to https://discord.com/channels/357957786904166400/756557551234973696/920918240702660638
|
||||
@@ -144,12 +152,9 @@ export class ArweaveGatewayInteractionsLoader implements InteractionsLoader {
|
||||
return txInfos;
|
||||
}
|
||||
|
||||
private async getNextPage(variables: ReqVariables): Promise<GQLTransactionsResultInterface> {
|
||||
private async getNextPage(variables: GqlReqVariables): Promise<GQLTransactionsResultInterface> {
|
||||
const benchmark = Benchmark.measure();
|
||||
let response = await this.arweave.api.post('graphql', {
|
||||
query: ArweaveGatewayInteractionsLoader.query,
|
||||
variables
|
||||
});
|
||||
let response = await this.arweaveWrapper.gql(ArweaveGatewayInteractionsLoader.query, variables);
|
||||
this.logger.debug('GQL page load:', benchmark.elapsed());
|
||||
|
||||
while (response.status === 403) {
|
||||
@@ -157,10 +162,7 @@ export class ArweaveGatewayInteractionsLoader implements InteractionsLoader {
|
||||
|
||||
await sleep(ArweaveGatewayInteractionsLoader._30seconds);
|
||||
|
||||
response = await this.arweave.api.post('graphql', {
|
||||
query: ArweaveGatewayInteractionsLoader.query,
|
||||
variables
|
||||
});
|
||||
response = await this.arweaveWrapper.gql(ArweaveGatewayInteractionsLoader.query, variables);
|
||||
}
|
||||
|
||||
if (response.status !== 200) {
|
||||
|
||||
@@ -34,6 +34,8 @@ export class ContractDefinitionLoader implements DefinitionLoader {
|
||||
|
||||
async doLoad<State>(contractTxId: string, forcedSrcTxId?: string): Promise<ContractDefinition<State>> {
|
||||
const benchmark = Benchmark.measure();
|
||||
const arweaveUrl = `${this.arweave.api.config.protocol}://${this.arweave.api.config.host}:${this.arweave.api.config.port}`;
|
||||
|
||||
const contractTx = await this.arweave.transactions.get(contractTxId);
|
||||
const owner = await this.arweave.wallets.ownerToAddress(contractTx.owner);
|
||||
this.logger.debug('Contract tx and owner', benchmark.elapsed());
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { ContractDefinition, LoggerFactory, stripTrailingSlash, SwCache } from '@smartweave';
|
||||
import Arweave from 'arweave';
|
||||
import 'isomorphic-fetch';
|
||||
import { ContractDefinitionLoader } from './ContractDefinitionLoader';
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,7 +6,6 @@ import {
|
||||
GQLEdgeInterface,
|
||||
GQLNodeInterface
|
||||
} from '@smartweave';
|
||||
import 'isomorphic-fetch';
|
||||
|
||||
interface Paging {
|
||||
total: string;
|
||||
@@ -111,12 +110,11 @@ export class RedstoneGatewayInteractionsLoader implements InteractionsLoader {
|
||||
this.logger.debug(`Loaded interactions length: ${interactions.length}`);
|
||||
} while (page < totalPages);
|
||||
|
||||
this.logger.debug(`Loading interactions for ${contractId}: ${benchmarkTotalTime.elapsed()}`);
|
||||
|
||||
this.logger.debug('All loaded interactions:', {
|
||||
from: fromBlockHeight,
|
||||
to: toBlockHeight,
|
||||
loaded: interactions.length
|
||||
loaded: interactions.length,
|
||||
time: benchmarkTotalTime.elapsed()
|
||||
});
|
||||
|
||||
return interactions;
|
||||
|
||||
71
src/utils/ArweaveWrapper.ts
Normal file
71
src/utils/ArweaveWrapper.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import Arweave from 'arweave';
|
||||
import { NetworkInfoInterface } from 'arweave/node/network';
|
||||
import { GqlReqVariables, LoggerFactory } from '@smartweave';
|
||||
import { AxiosResponse } from 'axios';
|
||||
|
||||
export class ArweaveWrapper {
|
||||
private readonly logger = LoggerFactory.INST.create('ArweaveWrapper');
|
||||
|
||||
private readonly baseUrl;
|
||||
|
||||
constructor(private readonly arweave: Arweave) {
|
||||
this.baseUrl = `${arweave.api.config.protocol}://${arweave.api.config.host}:${arweave.api.config.port}`;
|
||||
this.logger.debug('baseurl', this.baseUrl);
|
||||
}
|
||||
|
||||
async info(): Promise<Partial<NetworkInfoInterface>> {
|
||||
try {
|
||||
const response = await fetch(`${this.baseUrl}/info`)
|
||||
.then((res) => {
|
||||
return res.ok ? res.json() : Promise.reject(res);
|
||||
})
|
||||
.catch((error) => {
|
||||
if (error.body?.message) {
|
||||
this.logger.error(error.body.message);
|
||||
}
|
||||
throw new Error(`Unable to retrieve info. ${error.status}.`);
|
||||
});
|
||||
|
||||
return response;
|
||||
} catch (e) {
|
||||
this.logger.error('Error while loading network info', e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
async gql(query: string, variables: GqlReqVariables): Promise<Partial<AxiosResponse>> {
|
||||
try {
|
||||
const data = JSON.stringify({
|
||||
query: query,
|
||||
variables: variables
|
||||
});
|
||||
|
||||
const response = await fetch(`${this.baseUrl}/graphql`, {
|
||||
method: 'POST',
|
||||
body: data,
|
||||
headers: {
|
||||
'Accept-Encoding': 'gzip, deflate, br',
|
||||
'Content-Type': 'application/json',
|
||||
Accept: 'application/json'
|
||||
}
|
||||
})
|
||||
.then((res) => {
|
||||
return res.ok ? res.json() : Promise.reject(res);
|
||||
})
|
||||
.catch((error) => {
|
||||
if (error.body?.message) {
|
||||
this.logger.error(error.body.message);
|
||||
}
|
||||
throw new Error(`Unable to retrieve info. ${error.status}.`);
|
||||
});
|
||||
|
||||
return {
|
||||
data: response,
|
||||
status: 200
|
||||
};
|
||||
} catch (e) {
|
||||
this.logger.error('Error while loading gql', e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1,2 @@
|
||||
export * from './utils';
|
||||
export * from './ArweaveWrapper';
|
||||
|
||||
@@ -1,19 +1,25 @@
|
||||
/* eslint-disable */
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
|
||||
const isNode = new Function('try {return this===global;}catch(e){return false;}');
|
||||
// TODO: requires setting "external" in webpack
|
||||
import v8 from 'v8';
|
||||
import Undici from "undici";
|
||||
|
||||
export const isNode = new Function('try {return this===global;}catch(e){return false;}');
|
||||
|
||||
let v8 = null;
|
||||
if (isNode()) {
|
||||
v8 = require('v8');
|
||||
global.fetch = async function(input, init): Promise<Response> {
|
||||
return await Undici.fetch.call(this, input, init);
|
||||
}
|
||||
}
|
||||
|
||||
export const sleep = (ms: number): Promise<void> => {
|
||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
||||
};
|
||||
|
||||
|
||||
export const deepCopy = (input: unknown): any => {
|
||||
if (v8) {
|
||||
if (isNode()) {
|
||||
return v8.deserialize(v8.serialize(input));
|
||||
}
|
||||
return cloneDeep(input);
|
||||
|
||||
@@ -7,15 +7,9 @@ import {
|
||||
SmartWeaveWebFactory
|
||||
} from '../src';
|
||||
|
||||
import {TsLogFactory} from '../src/logging/node/TsLogFactory';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import {FromFileInteractionsLoader} from './FromFileInteractionsLoader';
|
||||
import {SmartWeaveNodeFactory} from '../src/core/node/SmartWeaveNodeFactory';
|
||||
import {readContract} from "smartweave";
|
||||
import {inspect} from "util";
|
||||
import colors = module
|
||||
import {max, mean, median, min, standardDeviation, variance} from "simple-statistics";
|
||||
import * as path from "path";
|
||||
import * as fs from "fs";
|
||||
|
||||
const stringify = require('safe-stable-stringify')
|
||||
|
||||
@@ -26,6 +20,8 @@ let os = require("os");
|
||||
|
||||
//LoggerFactory.use(new TsLogFactory());
|
||||
LoggerFactory.INST.logLevel("fatal");
|
||||
LoggerFactory.INST.logLevel("info", "ArweaveGatewayInteractionsLoader");
|
||||
LoggerFactory.INST.logLevel("debug", "ArweaveWrapper");
|
||||
LoggerFactory.INST.logLevel("info", "Contract");
|
||||
|
||||
|
||||
@@ -36,7 +32,7 @@ LoggerFactory.INST.logLevel("debug", "HandlerBasedContract");
|
||||
LoggerFactory.INST.logLevel("debug", "ContractDefinitionLoader");
|
||||
LoggerFactory.INST.logLevel("debug", "CacheableContractInteractionsLoader");*/
|
||||
|
||||
|
||||
const colors = require('colors');
|
||||
async function main() {
|
||||
const arweave = Arweave.init({
|
||||
host: 'arweave.net', // Hostname or IP address for a Arweave host
|
||||
@@ -63,85 +59,28 @@ async function main() {
|
||||
usedAfter
|
||||
});*/
|
||||
|
||||
const colors = require('colors');
|
||||
const stats = require('simple-statistics')
|
||||
|
||||
console.log("Test info ".bgRed);
|
||||
console.log("===============");
|
||||
|
||||
console.log(" ", "OS ".bgGrey, os.type() + " " + os.release() + " " + os.arch());
|
||||
console.log(" ", "Node.JS ".bgGrey, process.versions.node);
|
||||
console.log(" ", "V8 ".bgGrey, process.versions.v8);
|
||||
|
||||
let cpus = os.cpus().map(function (cpu) {
|
||||
return cpu.model;
|
||||
}).reduce(function (o, model) {
|
||||
if (!o[model]) o[model] = 0;
|
||||
o[model]++;
|
||||
return o;
|
||||
}, {});
|
||||
|
||||
cpus = Object.keys(cpus).map(function (key) {
|
||||
return key + " \u00d7 " + cpus[key];
|
||||
}).join("\n");
|
||||
|
||||
console.log(" ", "CPU ".bgGrey, cpus);
|
||||
console.log(" ", "Memory ".bgGrey, (os.totalmem() / 1024 / 1024 / 1024).toFixed(0), "GB");
|
||||
|
||||
console.log("===============");
|
||||
console.log(" ", "Contract ".bgGrey, "t9T7DIOGxx4VWXoCEeYYarFYeERTpWIC1V3y-BPZgKE");
|
||||
console.log(" ", "Height ".bgGrey, 749180);
|
||||
|
||||
|
||||
const Table = require('cli-table');
|
||||
|
||||
// instantiate
|
||||
const table = new Table({
|
||||
head: ['# Test:'.green, 'Gateway communication:'.green, 'State evaluation:'.green, 'Total:'.green]
|
||||
, colWidths: [10, 30, 20, 20]
|
||||
});
|
||||
|
||||
const results: BenchmarkStats[] = [];
|
||||
|
||||
for (let i = 1; i <= 10; i++) {
|
||||
for (let i = 1; i <= 1; i++) {
|
||||
|
||||
const smartweaveR = SmartWeaveWebFactory
|
||||
.memCachedBased(arweave, 1)
|
||||
.setInteractionsLoader(
|
||||
new RedstoneGatewayInteractionsLoader("https://gateway.redstone.finance", {confirmed: true}))
|
||||
.setDefinitionLoader(
|
||||
new RedstoneGatewayContractDefinitionLoader("https://gateway.redstone.finance", arweave, new MemCache()))
|
||||
.build();
|
||||
|
||||
const contract = smartweaveR.contract(contractTxId);
|
||||
await contract.readState(844916);
|
||||
const contract = smartweaveR.contract("Daj-MNSnH55TDfxqC7v4eq0lKzVIwh98srUaWqyuZtY");
|
||||
const readResult = await contract.readState();
|
||||
|
||||
const result = contract.lastReadStateStats();
|
||||
|
||||
results.push(result);
|
||||
fs.writeFileSync(path.join(__dirname, 'data', 'state.json'), stringify(readResult.state).trim());
|
||||
|
||||
table.push(
|
||||
[`${i}`.magenta, result.gatewayCommunication + "ms", result.stateEvaluation + "ms", result.total + "ms"]
|
||||
);
|
||||
console.log("total evaluation: " + result.total + "ms")
|
||||
}
|
||||
|
||||
console.log(table.toString());
|
||||
|
||||
const tableStats = new Table({
|
||||
head: ['Statistics:'.green, 'Gateway communication:'.green, 'State evaluation:'.green, 'Total:'.green]
|
||||
, colWidths: [20, 30, 20, 20]
|
||||
});
|
||||
|
||||
tableStats.push(
|
||||
["Mean".cyan, mean(results.map(r => r.gatewayCommunication)) + "ms", mean(results.map(r => r.stateEvaluation)) + "ms", mean(results.map(r => r.total)) + "ms"],
|
||||
["Median".cyan, median(results.map(r => r.gatewayCommunication)) + "ms", median(results.map(r => r.stateEvaluation)) + "ms", median(results.map(r => r.total)) + "ms"],
|
||||
["Min".cyan, min(results.map(r => r.gatewayCommunication)) + "ms", min(results.map(r => r.stateEvaluation)) + "ms", min(results.map(r => r.total)) + "ms"],
|
||||
["Max".cyan, max(results.map(r => r.gatewayCommunication)) + "ms", max(results.map(r => r.stateEvaluation)) + "ms", max(results.map(r => r.total)) + "ms"],
|
||||
["Std. Dev.".cyan, standardDeviation(results.map(r => r.gatewayCommunication)).toFixed(2) + "ms", standardDeviation(results.map(r => r.stateEvaluation)).toFixed(2) + "ms", standardDeviation(results.map(r => r.total)).toFixed(2) + "ms"],
|
||||
);
|
||||
|
||||
console.log(tableStats.toString());
|
||||
|
||||
console.log(results);
|
||||
|
||||
//const result2 = await readContract(arweave, "t9T7DIOGxx4VWXoCEeYYarFYeERTpWIC1V3y-BPZgKE")
|
||||
|
||||
@@ -149,7 +88,7 @@ async function main() {
|
||||
//fs.writeFileSync(path.join(__dirname, 'data', 'validity.json'), JSON.stringify(validity));
|
||||
|
||||
//fs.writeFileSync(path.join(__dirname, 'data', 'validity_old.json'), JSON.stringify(result.validity));
|
||||
//fs.writeFileSync(path.join(__dirname, 'data', 'state_new.json'), stringify(result.state).trim());
|
||||
|
||||
//fs.writeFileSync(path.join(__dirname, 'data', 'state_old.json'), stringify(result2).trim());
|
||||
//fs.writeFileSync(path.join(__dirname, 'data', 'state_arweave.json'), JSON.stringify(result.state));
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -9,8 +9,10 @@ import {
|
||||
import Arweave from 'arweave';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { TsLogFactory } from '../src/logging/node/TsLogFactory';
|
||||
import {TsLogFactory} from '../src/logging/node/TsLogFactory';
|
||||
import Transaction from 'arweave/node/lib/transaction';
|
||||
import ArweaveWrapper from "../src/utils/ArweaveWrapper";
|
||||
import knex from "knex";
|
||||
|
||||
// max number of results returned from single query.
|
||||
// If set more, arweave.net/graphql will still limit to 100 (not sure if that's a bug or feature).
|
||||
@@ -35,22 +37,36 @@ query Transactions($tags: [TagFilter!]!, $after: String) {
|
||||
}
|
||||
}`;
|
||||
|
||||
const toSkip = [
|
||||
'C_1uo08qRuQAeDi9Y1I8fkaWYUC9IWkOrKDNe9EphJo',
|
||||
'B1SRLyFzWJjeA0ywW41Qu1j7ZpBLHsXSSrWLrT3ebd8',
|
||||
'LkfzZvdl_vfjRXZOPjnov18cGnnK3aDKj0qSQCgkCX8',
|
||||
'l6S4oMyzw_rggjt4yt4LrnRmggHQ2CdM1hna2MK4o_c',
|
||||
'aMPlul_sA2TjcBOGpJndgZAcApZLMvFhUGYAPkZ3uLA'
|
||||
];
|
||||
|
||||
const sourcesBlacklist = [
|
||||
'MjrjR6qCFcld0VO83tt3NcpZs2FIuLscvo7ya64afbY',
|
||||
'C_1uo08qRuQAeDi9Y1I8fkaWYUC9IWkOrKDNe9EphJo',
|
||||
'Z3Arb_sfuLpFxyLfolLClLfe89BFgrbbgJM2rKsebEY',
|
||||
'slRfB7WKAEQb5SiO7e-G_FWoAZ4LkoyAYE31ToPXTV8'
|
||||
];
|
||||
|
||||
async function main() {
|
||||
const db = knex({
|
||||
client: 'pg',
|
||||
connection: 'postgresql://postgres:@localhost:5432/stats',
|
||||
useNullAsDefault: true,
|
||||
pool: {
|
||||
"min": 5,
|
||||
"max": 30,
|
||||
"createTimeoutMillis": 3000,
|
||||
"acquireTimeoutMillis": 30000,
|
||||
"idleTimeoutMillis": 30000,
|
||||
"reapIntervalMillis": 1000,
|
||||
"createRetryIntervalMillis": 100,
|
||||
"propagateCreateError": false
|
||||
},
|
||||
});
|
||||
|
||||
if (!(await db.schema.hasTable('transactions'))) {
|
||||
await db.schema.createTable('transactions', (table) => {
|
||||
table.string('id', 64).notNullable().index();
|
||||
});
|
||||
|
||||
await db.schema.createTable('tags', (table) => {
|
||||
table.string('transaction_id', 64).notNullable().index();
|
||||
table.string('name').notNullable().index();
|
||||
table.text('value').notNullable().index();
|
||||
});
|
||||
}
|
||||
|
||||
const arweave = Arweave.init({
|
||||
host: 'arweave.net', // Hostname or IP address for a Arweave host
|
||||
port: 443, // Port
|
||||
@@ -59,86 +75,49 @@ async function main() {
|
||||
logging: false // Enable network request logging
|
||||
});
|
||||
|
||||
const contractTxs = await sendQuery(
|
||||
/*const contractTxs = await sendQuery(
|
||||
arweave,
|
||||
{
|
||||
tags: [
|
||||
{
|
||||
name: 'App-Name',
|
||||
values: ['SmartWeaveContract']
|
||||
},
|
||||
{
|
||||
name: 'Content-Type',
|
||||
values: ['application/json']
|
||||
}
|
||||
],
|
||||
after: undefined
|
||||
},
|
||||
transactionsQuery
|
||||
);
|
||||
);*/
|
||||
|
||||
console.log(`Checking ${contractTxs.length} contracts`);
|
||||
/**
|
||||
select ts.value as "Content-Type", count(ts.value) as Amount
|
||||
from transactions t
|
||||
join tags ts on ts.transaction_id = t.id
|
||||
where ts.name = 'Content-Type'
|
||||
group by ts.value
|
||||
order by count(ts.value) desc;
|
||||
*/
|
||||
|
||||
const result = {};
|
||||
|
||||
LoggerFactory.use(new TsLogFactory());
|
||||
LoggerFactory.INST.logLevel('info');
|
||||
LoggerFactory.INST.logLevel('debug', 'ArweaveGatewayInteractionsLoader');
|
||||
|
||||
const transactionsLoader = new ArweaveGatewayInteractionsLoader(arweave);
|
||||
const file = JSON.parse(fs.readFileSync(path.join(__dirname, 'data', `swc-stats.json`), 'utf-8'));
|
||||
console.log(`Checking ${file.length} contracts`);
|
||||
|
||||
let totalInteractions = 0;
|
||||
// loading
|
||||
for (const contractTx of contractTxs) {
|
||||
const contractTxId = contractTx.node.id;
|
||||
if (toSkip.indexOf(contractTxId) !== -1) {
|
||||
continue;
|
||||
for (let row of file) {
|
||||
console.log('inserting', row.node.id);
|
||||
await db('transactions').insert({
|
||||
id: row.node.id,
|
||||
});
|
||||
for (let tag of row.node.tags) {
|
||||
await db('tags').insert({
|
||||
transaction_id: row.node.id,
|
||||
name: tag.name,
|
||||
value: tag.value
|
||||
});
|
||||
}
|
||||
|
||||
const tags = contractTx.node.tags;
|
||||
if (
|
||||
tags.some((tag) => {
|
||||
const key = tag.name;
|
||||
const value = tag.value;
|
||||
return key.localeCompare('Contract-Src') === 0 && sourcesBlacklist.includes(value);
|
||||
})
|
||||
) {
|
||||
console.log("Skipping blacklisted contract's source");
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(
|
||||
`\n[${contractTxs.indexOf(contractTx) + 1} / ${contractTxs.length}] loading interactions of the ${contractTxId}`
|
||||
);
|
||||
const evaluationOptions =new DefaultEvaluationOptions();
|
||||
const interactions = await transactionsLoader.load(contractTxId, 0, 779826, evaluationOptions);
|
||||
console.log(`${contractTxId}: ${interactions.length}`);
|
||||
|
||||
result[contractTxId] = interactions.length;
|
||||
totalInteractions += interactions.length;
|
||||
console.log('Total:', totalInteractions);
|
||||
fs.writeFileSync(path.join(__dirname, 'data', `swc-stats.json`), JSON.stringify(result));
|
||||
}
|
||||
|
||||
// fs.writeFileSync(path.join(__dirname, 'data', `swc-stats.json`), JSON.stringify(result));
|
||||
|
||||
// sorting
|
||||
console.log('Sorting...');
|
||||
|
||||
const contracts = JSON.parse(fs.readFileSync(path.join(__dirname, 'data', `swc-stats.json`), 'utf-8'));
|
||||
|
||||
const sortable = [];
|
||||
// tslint:disable-next-line:forin
|
||||
for (const contract in contracts) {
|
||||
sortable.push([contract, contracts[contract]]);
|
||||
}
|
||||
sortable.sort((a, b) => b[1] - a[1]);
|
||||
const sortedContracts = {};
|
||||
sortable.forEach((item) => (sortedContracts[item[0]] = item[1]));
|
||||
|
||||
console.log(sortedContracts);
|
||||
|
||||
fs.writeFileSync(path.join(__dirname, 'data', `swc-sorted-stats.json`), JSON.stringify(sortedContracts));
|
||||
}
|
||||
|
||||
main().then(() => {
|
||||
@@ -166,10 +145,15 @@ async function sendQuery(arweave: Arweave, variables: any, query: string) {
|
||||
}
|
||||
|
||||
async function getNextPage(arweave, variables, query: string): Promise<GQLTransactionsResultInterface | null> {
|
||||
const response = await arweave.api.post('graphql', {
|
||||
|
||||
console.log("loading page after", variables.after);
|
||||
|
||||
|
||||
const wrapper = new ArweaveWrapper(arweave);
|
||||
const response = await wrapper.gql(query, variables);/*await arweave.api.post('graphql', {
|
||||
query,
|
||||
variables
|
||||
});
|
||||
});*/
|
||||
|
||||
if (response.status !== 200) {
|
||||
console.error(response);
|
||||
|
||||
55
tools/undici.ts
Normal file
55
tools/undici.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
/* eslint-disable */
|
||||
import Arweave from 'arweave';
|
||||
import { LoggerFactory, mapReplacer } from '../src';
|
||||
import { TsLogFactory } from '../src/logging/node/TsLogFactory';
|
||||
import Undici from "undici";
|
||||
import request = Undici.request;
|
||||
import {Benchmark} from "../src/logging/Benchmark";
|
||||
import axios from "axios";
|
||||
|
||||
|
||||
async function main() {
|
||||
LoggerFactory.use(new TsLogFactory());
|
||||
LoggerFactory.INST.logLevel('debug');
|
||||
|
||||
const arweave = Arweave.init({
|
||||
host: 'arweave.net', // Hostname or IP address for a Arweave host
|
||||
port: 443, // Port
|
||||
protocol: 'https', // Network protocol http or https
|
||||
timeout: 60000, // Network request timeouts in milliseconds
|
||||
logging: false // Enable network request logging
|
||||
});
|
||||
|
||||
|
||||
const benchmark = Benchmark.measure();
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const {
|
||||
statusCode,
|
||||
headers,
|
||||
trailers,
|
||||
body
|
||||
} = await request('https://arweave.net:443/info');
|
||||
await body.json();
|
||||
}
|
||||
|
||||
console.log(`undici: ${benchmark.elapsed()}`);
|
||||
|
||||
|
||||
benchmark.reset();
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const result = await axios.get('https://arweave.net:443/info');
|
||||
}
|
||||
|
||||
console.log(`axios: ${benchmark.elapsed()}`);
|
||||
|
||||
benchmark.reset();
|
||||
|
||||
|
||||
console.log(`got: ${benchmark.elapsed()}`);
|
||||
|
||||
|
||||
}
|
||||
|
||||
main().catch((e) => console.error(e));
|
||||
291
yarn.lock
291
yarn.lock
@@ -677,11 +677,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
|
||||
integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
|
||||
|
||||
"@sindresorhus/is@^4.0.0":
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca"
|
||||
integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==
|
||||
|
||||
"@sinonjs/commons@^1.7.0":
|
||||
version "1.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"
|
||||
@@ -696,13 +691,6 @@
|
||||
dependencies:
|
||||
"@sinonjs/commons" "^1.7.0"
|
||||
|
||||
"@szmarczak/http-timer@^4.0.5":
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
|
||||
integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
|
||||
dependencies:
|
||||
defer-to-connect "^2.0.0"
|
||||
|
||||
"@tootallnate/once@1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
|
||||
@@ -800,16 +788,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/browser-or-node/-/browser-or-node-1.3.0.tgz#896ec59bcb8109fc858d8e68d3c056c176a19622"
|
||||
integrity sha512-MVetr65IR7RdJbUxVHsaPFaXAO8fi89zv1g8L/mHygh1Q7xnnK02XZLwfMh57FOpTO6gtnagoPMQ/UOFfctXRQ==
|
||||
|
||||
"@types/cacheable-request@^6.0.1":
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9"
|
||||
integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==
|
||||
dependencies:
|
||||
"@types/http-cache-semantics" "*"
|
||||
"@types/keyv" "*"
|
||||
"@types/node" "*"
|
||||
"@types/responselike" "*"
|
||||
|
||||
"@types/cheerio@^0.22.30":
|
||||
version "0.22.30"
|
||||
resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.30.tgz#6c1ded70d20d890337f0f5144be2c5e9ce0936e6"
|
||||
@@ -896,11 +874,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.3.tgz#ef8e3d1a8d46c387f04ab0f2e8ab8cb0c5078661"
|
||||
integrity sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==
|
||||
|
||||
"@types/http-cache-semantics@*":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
|
||||
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
|
||||
|
||||
"@types/http-errors@*":
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.1.tgz#e81ad28a60bee0328c6d2384e029aec626f1ae67"
|
||||
@@ -956,13 +929,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.2.tgz#513abfd256d7ad0bf1ee1873606317b33b1b2a72"
|
||||
integrity sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==
|
||||
|
||||
"@types/keyv@*":
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41"
|
||||
integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/koa-bodyparser@^4.2.1":
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/koa-bodyparser/-/koa-bodyparser-4.3.4.tgz#86aca8ba2ac5896f84386f52cf02eb06563e2539"
|
||||
@@ -1045,13 +1011,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
|
||||
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
|
||||
|
||||
"@types/responselike@*", "@types/responselike@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
|
||||
integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/serve-static@*":
|
||||
version "1.13.10"
|
||||
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9"
|
||||
@@ -1908,6 +1867,11 @@ buffer-from@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
||||
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
|
||||
|
||||
buffer-writer@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
|
||||
integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
|
||||
|
||||
buffer-xor@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
|
||||
@@ -1946,24 +1910,6 @@ cache-content-type@^1.0.0:
|
||||
mime-types "^2.1.18"
|
||||
ylru "^1.2.0"
|
||||
|
||||
cacheable-lookup@^5.0.3:
|
||||
version "5.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
|
||||
integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
|
||||
|
||||
cacheable-request@^7.0.2:
|
||||
version "7.0.2"
|
||||
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27"
|
||||
integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
|
||||
dependencies:
|
||||
clone-response "^1.0.2"
|
||||
get-stream "^5.1.0"
|
||||
http-cache-semantics "^4.0.0"
|
||||
keyv "^4.0.0"
|
||||
lowercase-keys "^2.0.0"
|
||||
normalize-url "^6.0.1"
|
||||
responselike "^2.0.0"
|
||||
|
||||
call-bind@^1.0.0, call-bind@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
|
||||
@@ -2129,13 +2075,6 @@ cliui@^7.0.2:
|
||||
strip-ansi "^6.0.0"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
clone-response@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
|
||||
integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
|
||||
dependencies:
|
||||
mimic-response "^1.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
|
||||
@@ -2492,13 +2431,6 @@ decimal.js@^10.2.1:
|
||||
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
|
||||
integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
|
||||
|
||||
decompress-response@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
|
||||
integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
|
||||
dependencies:
|
||||
mimic-response "^3.1.0"
|
||||
|
||||
dedent@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
|
||||
@@ -2531,11 +2463,6 @@ defaults@^1.0.3:
|
||||
dependencies:
|
||||
clone "^1.0.2"
|
||||
|
||||
defer-to-connect@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
|
||||
integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
|
||||
|
||||
define-properties@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||
@@ -2716,13 +2643,6 @@ encodeurl@^1.0.2, encodeurl@~1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||
|
||||
end-of-stream@^1.1.0:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enquirer@^2.3.5:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
|
||||
@@ -3416,13 +3336,6 @@ get-package-type@^0.1.0:
|
||||
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
|
||||
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
|
||||
|
||||
get-stream@^5.1.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
|
||||
integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
get-stream@^6.0.0:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
|
||||
@@ -3511,23 +3424,6 @@ globby@^11.0.2, globby@^11.0.3:
|
||||
merge2 "^1.3.0"
|
||||
slash "^3.0.0"
|
||||
|
||||
got@^11.8.2:
|
||||
version "11.8.3"
|
||||
resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770"
|
||||
integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==
|
||||
dependencies:
|
||||
"@sindresorhus/is" "^4.0.0"
|
||||
"@szmarczak/http-timer" "^4.0.5"
|
||||
"@types/cacheable-request" "^6.0.1"
|
||||
"@types/responselike" "^1.0.0"
|
||||
cacheable-lookup "^5.0.3"
|
||||
cacheable-request "^7.0.2"
|
||||
decompress-response "^6.0.0"
|
||||
http2-wrapper "^1.0.0-beta.5.2"
|
||||
lowercase-keys "^2.0.0"
|
||||
p-cancelable "^2.0.0"
|
||||
responselike "^2.0.0"
|
||||
|
||||
graceful-fs@^4.1.2, graceful-fs@^4.2.4:
|
||||
version "4.2.8"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
|
||||
@@ -3692,11 +3588,6 @@ http-assert@^1.3.0:
|
||||
deep-equal "~1.0.1"
|
||||
http-errors "~1.8.0"
|
||||
|
||||
http-cache-semantics@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
||||
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
|
||||
|
||||
http-errors@1.7.2:
|
||||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
|
||||
@@ -3748,14 +3639,6 @@ http-signature@~1.2.0:
|
||||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
http2-wrapper@^1.0.0-beta.5.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
|
||||
integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
|
||||
dependencies:
|
||||
quick-lru "^5.1.1"
|
||||
resolve-alpn "^1.0.0"
|
||||
|
||||
https-proxy-agent@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
|
||||
@@ -4059,14 +3942,6 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
isomorphic-fetch@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4"
|
||||
integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==
|
||||
dependencies:
|
||||
node-fetch "^2.6.1"
|
||||
whatwg-fetch "^3.4.1"
|
||||
|
||||
isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
@@ -4606,11 +4481,6 @@ json-beautify@^1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/json-beautify/-/json-beautify-1.1.1.tgz#8a1ed511ad5d52ca63ed29f7c61896c6a6ebbb9f"
|
||||
integrity sha512-17j+Hk2lado0xqKtUcyAjK0AtoHnPSIgktWRsEXgdFQFG9UnaGw6CHa0J7xsvulxRpFl6CrkDFHght1p5ZJc4A==
|
||||
|
||||
json-buffer@3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
|
||||
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
|
||||
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
@@ -4667,13 +4537,6 @@ keygrip@~1.1.0:
|
||||
dependencies:
|
||||
tsscmp "1.0.6"
|
||||
|
||||
keyv@^4.0.0:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376"
|
||||
integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==
|
||||
dependencies:
|
||||
json-buffer "3.0.1"
|
||||
|
||||
kleur@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
|
||||
@@ -4906,11 +4769,6 @@ long@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
|
||||
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
|
||||
|
||||
lowercase-keys@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
|
||||
integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
@@ -5031,16 +4889,6 @@ mimic-fn@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||
|
||||
mimic-response@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
|
||||
integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
|
||||
|
||||
mimic-response@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
||||
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
|
||||
|
||||
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
||||
@@ -5252,11 +5100,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
normalize-url@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
|
||||
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
|
||||
|
||||
npm-bundled@^1.0.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
|
||||
@@ -5363,7 +5206,7 @@ on-finished@^2.3.0, on-finished@~2.3.0:
|
||||
dependencies:
|
||||
ee-first "1.1.1"
|
||||
|
||||
once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
||||
once@^1.3.0, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
@@ -5439,11 +5282,6 @@ osenv@0, osenv@^0.1.4:
|
||||
os-homedir "^1.0.0"
|
||||
os-tmpdir "^1.0.0"
|
||||
|
||||
p-cancelable@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
|
||||
integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
|
||||
|
||||
p-limit@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
|
||||
@@ -5463,6 +5301,11 @@ p-try@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
||||
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
|
||||
|
||||
packet-reader@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
|
||||
integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||
@@ -5544,11 +5387,57 @@ performance-now@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
pg-connection-string@2.5.0:
|
||||
pg-connection-string@2.5.0, pg-connection-string@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34"
|
||||
integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==
|
||||
|
||||
pg-int8@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
|
||||
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
|
||||
|
||||
pg-pool@^3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.4.1.tgz#0e71ce2c67b442a5e862a9c182172c37eda71e9c"
|
||||
integrity sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==
|
||||
|
||||
pg-protocol@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0"
|
||||
integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==
|
||||
|
||||
pg-types@^2.1.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
|
||||
integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
|
||||
dependencies:
|
||||
pg-int8 "1.0.1"
|
||||
postgres-array "~2.0.0"
|
||||
postgres-bytea "~1.0.0"
|
||||
postgres-date "~1.0.4"
|
||||
postgres-interval "^1.1.0"
|
||||
|
||||
pg@^8.7.1:
|
||||
version "8.7.1"
|
||||
resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471"
|
||||
integrity sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==
|
||||
dependencies:
|
||||
buffer-writer "2.0.0"
|
||||
packet-reader "1.0.0"
|
||||
pg-connection-string "^2.5.0"
|
||||
pg-pool "^3.4.1"
|
||||
pg-protocol "^1.5.0"
|
||||
pg-types "^2.1.0"
|
||||
pgpass "1.x"
|
||||
|
||||
pgpass@1.x:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
|
||||
integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
|
||||
dependencies:
|
||||
split2 "^4.1.0"
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
@@ -5571,6 +5460,28 @@ pkg-dir@^4.2.0:
|
||||
dependencies:
|
||||
find-up "^4.0.0"
|
||||
|
||||
postgres-array@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
|
||||
integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
|
||||
|
||||
postgres-bytea@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
|
||||
integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=
|
||||
|
||||
postgres-date@~1.0.4:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
|
||||
integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
|
||||
|
||||
postgres-interval@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
|
||||
integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -5646,14 +5557,6 @@ psl@^1.1.28, psl@^1.1.33:
|
||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
||||
|
||||
pump@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
|
||||
dependencies:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
punycode@^2.1.0, punycode@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
@@ -5681,11 +5584,6 @@ queue-microtask@^1.2.2:
|
||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
||||
|
||||
quick-lru@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
|
||||
integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
|
||||
|
||||
randy@~1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/randy/-/randy-1.5.1.tgz#e7dc086a0ecb8bef7d67356642cd2a33f962465c"
|
||||
@@ -5815,11 +5713,6 @@ require-from-string@^2.0.2:
|
||||
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
|
||||
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
|
||||
|
||||
resolve-alpn@^1.0.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
|
||||
integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
|
||||
|
||||
resolve-cwd@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
|
||||
@@ -5858,13 +5751,6 @@ resolve@^1.20.0, resolve@^1.9.0:
|
||||
is-core-module "^2.2.0"
|
||||
path-parse "^1.0.6"
|
||||
|
||||
responselike@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723"
|
||||
integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==
|
||||
dependencies:
|
||||
lowercase-keys "^2.0.0"
|
||||
|
||||
restore-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
||||
@@ -6177,6 +6063,11 @@ source-map@^0.7.3:
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
|
||||
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
|
||||
|
||||
split2@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809"
|
||||
integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==
|
||||
|
||||
split@0.3:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
|
||||
@@ -6784,6 +6675,11 @@ underscore@>=1.3.1:
|
||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.2.tgz#276cea1e8b9722a8dbed0100a407dda572125881"
|
||||
integrity sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==
|
||||
|
||||
undici@^4.12.1:
|
||||
version "4.12.1"
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-4.12.1.tgz#3a7b5fb12f835a96a65397dd94578464b08d1c27"
|
||||
integrity sha512-MSfap7YiQJqTPP12C11PFRs9raZuVicDbwsZHTjB0a8+SsCqt7KdUis54f373yf7ZFhJzAkGJLaKm0202OIxHg==
|
||||
|
||||
universalify@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
|
||||
@@ -6910,11 +6806,6 @@ whatwg-encoding@^1.0.5:
|
||||
dependencies:
|
||||
iconv-lite "0.4.24"
|
||||
|
||||
whatwg-fetch@^3.4.1:
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
|
||||
integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
|
||||
|
||||
whatwg-mimetype@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
||||
@@ -7021,7 +6912,7 @@ xss@^1.0.8:
|
||||
commander "^2.20.3"
|
||||
cssfilter "0.0.10"
|
||||
|
||||
xtend@~4.0.1:
|
||||
xtend@^4.0.0, xtend@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||
|
||||
Reference in New Issue
Block a user