mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-01-22 19:19:05 +00:00
Implement subgraph JSON host APIs fromBytes and try_fromBytes (#105)
* Implement JSON fromBytes host API * Implement json.try_fromBytes host API * Fill host API code for json number methods
This commit is contained in:
parent
6a2c99a0bb
commit
4867530da7
@ -22,7 +22,8 @@
|
||||
"ethers": "^5.2.0",
|
||||
"nodemon": "^2.0.7",
|
||||
"ts-node": "^10.0.0",
|
||||
"typescript": "^4.3.2"
|
||||
"typescript": "^4.3.2",
|
||||
"mocha": "^8.4.0"
|
||||
},
|
||||
"bin": {
|
||||
"compare-entity": "bin/compare-entity"
|
||||
@ -33,7 +34,7 @@
|
||||
"asbuild:debug": "asc assembly/index.ts --lib ./node_modules --exportRuntime --target debug --runPasses asyncify --runtime stub --maximumMemory 10",
|
||||
"asbuild:release": "asc assembly/index.ts --lib ./node_modules --exportRuntime --target release --runPasses asyncify",
|
||||
"asbuild": "yarn asbuild:debug && yarn asbuild:release",
|
||||
"test": "yarn asbuild:debug && DEBUG=vulcanize:* mocha src/**/*.test.ts",
|
||||
"test": "yarn asbuild:debug && DEBUG=vulcanize:* node --experimental-wasm-bigint node_modules/.bin/_mocha src/**/*.test.ts",
|
||||
"build:example": "cd test/subgraph/example1 && yarn && yarn build",
|
||||
"watch": "DEBUG=vulcanize:* nodemon --watch src src/watcher.ts",
|
||||
"compare-entity": "node bin/compare-entity"
|
||||
|
54
packages/graph-node/src/json.test.ts
Normal file
54
packages/graph-node/src/json.test.ts
Normal file
@ -0,0 +1,54 @@
|
||||
//
|
||||
// Copyright 2021 Vulcanize, Inc.
|
||||
//
|
||||
|
||||
import path from 'path';
|
||||
|
||||
import { BaseProvider } from '@ethersproject/providers';
|
||||
|
||||
import { instantiate } from './loader';
|
||||
import { getTestDatabase, getTestIndexer, getTestProvider } from '../test/utils';
|
||||
import { Database } from './database';
|
||||
import { Indexer } from '../test/utils/indexer';
|
||||
|
||||
describe('json host api', () => {
|
||||
let exports: any;
|
||||
let db: Database;
|
||||
let indexer: Indexer;
|
||||
let provider: BaseProvider;
|
||||
|
||||
before(async () => {
|
||||
db = getTestDatabase();
|
||||
indexer = getTestIndexer();
|
||||
provider = getTestProvider();
|
||||
});
|
||||
|
||||
it('should load the subgraph example wasm', async () => {
|
||||
const filePath = path.resolve(__dirname, '../test/subgraph/example1/build/Example1/Example1.wasm');
|
||||
const instance = await instantiate(
|
||||
db,
|
||||
indexer,
|
||||
provider,
|
||||
{},
|
||||
filePath
|
||||
);
|
||||
exports = instance.exports;
|
||||
const { _start } = exports;
|
||||
|
||||
// Important to call _start for built subgraphs on instantiation!
|
||||
// TODO: Check api version https://github.com/graphprotocol/graph-node/blob/6098daa8955bdfac597cec87080af5449807e874/runtime/wasm/src/module/mod.rs#L533
|
||||
_start();
|
||||
});
|
||||
|
||||
it('should get JSONValue from bytes', async () => {
|
||||
const { testJsonFromBytes } = exports;
|
||||
|
||||
await testJsonFromBytes();
|
||||
});
|
||||
|
||||
it('should parse JSON safely', async () => {
|
||||
const { testJsonTryFromBytes } = exports;
|
||||
|
||||
await testJsonTryFromBytes();
|
||||
});
|
||||
});
|
@ -24,7 +24,8 @@ import {
|
||||
fromEthereumValue,
|
||||
toEthereumValue,
|
||||
resolveEntityFieldConflicts,
|
||||
getEthereumTypes
|
||||
getEthereumTypes,
|
||||
jsonFromBytes
|
||||
} from './utils';
|
||||
import { Database } from './database';
|
||||
|
||||
@ -255,7 +256,7 @@ export const instantiate = async (
|
||||
return ptr;
|
||||
},
|
||||
'typeConversion.bigIntToHex': async (bigInt: number) => {
|
||||
const bigIntInstance = await BigInt.wrap(bigInt);
|
||||
const bigIntInstance = await ASBigInt.wrap(bigInt);
|
||||
const bigIntString = await bigIntInstance.toString();
|
||||
|
||||
const bigNumber = BigNumber.from(__getString(bigIntString));
|
||||
@ -310,10 +311,10 @@ export const instantiate = async (
|
||||
const bigDecimalInstance = BigDecimal.wrap(bigDecimal);
|
||||
|
||||
const digitsPtr = await bigDecimalInstance.digits;
|
||||
const digitsBigInt = BigInt.wrap(digitsPtr);
|
||||
const digitsBigInt = ASBigInt.wrap(digitsPtr);
|
||||
|
||||
const expPtr = await bigDecimalInstance.exp;
|
||||
const expBigInt = BigInt.wrap(expPtr);
|
||||
const expBigInt = ASBigInt.wrap(expPtr);
|
||||
|
||||
const digitsStringPtr = await digitsBigInt.toString();
|
||||
const digits = __getString(digitsStringPtr);
|
||||
@ -339,11 +340,11 @@ export const instantiate = async (
|
||||
const digitsBigNumber = BigNumber.from(digits);
|
||||
const signBigNumber = BigNumber.from(decimal.value.s);
|
||||
const digitsStringPtr = await __newString(digitsBigNumber.mul(signBigNumber).toString());
|
||||
const digitsBigInt = await BigInt.fromString(digitsStringPtr);
|
||||
const digitsBigInt = await ASBigInt.fromString(digitsStringPtr);
|
||||
|
||||
// Create an exp BigInt.
|
||||
const expStringPtr = await __newString(exp.toString());
|
||||
const expBigInt = await BigInt.fromString(expStringPtr);
|
||||
const expBigInt = await ASBigInt.fromString(expStringPtr);
|
||||
|
||||
// Create a BigDecimal using digits and exp BigInts.
|
||||
const bigDecimal = await BigDecimal.__new(digitsBigInt);
|
||||
@ -429,73 +430,73 @@ export const instantiate = async (
|
||||
|
||||
const uint8ArrayId = await getIdOfType(TypeId.Uint8Array);
|
||||
const ptr = await __newArray(uint8ArrayId, bytes);
|
||||
const bigInt = await BigInt.fromSignedBytes(ptr);
|
||||
const bigInt = await ASBigInt.fromSignedBytes(ptr);
|
||||
|
||||
return bigInt;
|
||||
},
|
||||
'bigInt.plus': async (x: number, y: number) => {
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
const sum = xBigNumber.add(yBigNumber);
|
||||
const ptr = await __newString(sum.toString());
|
||||
const sumBigInt = await BigInt.fromString(ptr);
|
||||
const sumBigInt = await ASBigInt.fromString(ptr);
|
||||
|
||||
return sumBigInt;
|
||||
},
|
||||
'bigInt.minus': async (x: number, y: number) => {
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
const diff = xBigNumber.sub(yBigNumber);
|
||||
const ptr = await __newString(diff.toString());
|
||||
const diffBigInt = BigInt.fromString(ptr);
|
||||
const diffBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return diffBigInt;
|
||||
},
|
||||
'bigInt.times': async (x: number, y: number) => {
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
const product = xBigNumber.mul(yBigNumber);
|
||||
const ptr = await __newString(product.toString());
|
||||
const productBigInt = BigInt.fromString(ptr);
|
||||
const productBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return productBigInt;
|
||||
},
|
||||
'bigInt.dividedBy': async (x: number, y: number) => {
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
const quotient = xBigNumber.div(yBigNumber);
|
||||
const ptr = await __newString(quotient.toString());
|
||||
const quotientBigInt = BigInt.fromString(ptr);
|
||||
const quotientBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return quotientBigInt;
|
||||
},
|
||||
'bigInt.dividedByDecimal': async (x: number, y: number) => {
|
||||
// Create a decimal out of bigInt x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xDecimal = new GraphDecimal(__getString(xStringPtr));
|
||||
|
||||
@ -513,94 +514,94 @@ export const instantiate = async (
|
||||
},
|
||||
'bigInt.mod': async (x: number, y: number) => {
|
||||
// Create a bigNumber x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
// Create a bigNumber y.
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
// Perform the bigNumber mod operation.
|
||||
const remainder = xBigNumber.mod(yBigNumber);
|
||||
const ptr = await __newString(remainder.toString());
|
||||
const remainderBigInt = BigInt.fromString(ptr);
|
||||
const remainderBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return remainderBigInt;
|
||||
},
|
||||
'bigInt.bitOr': async (x: number, y: number) => {
|
||||
// Create a bigNumber x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
// Create a bigNumber y.
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
// Perform the bigNumber bit or operation.
|
||||
const res = xBigNumber.or(yBigNumber);
|
||||
const ptr = await __newString(res.toString());
|
||||
const resBigInt = BigInt.fromString(ptr);
|
||||
const resBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return resBigInt;
|
||||
},
|
||||
'bigInt.bitAnd': async (x: number, y: number) => {
|
||||
// Create a bigNumber x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
// Create a bigNumber y.
|
||||
const yBigInt = await BigInt.wrap(y);
|
||||
const yBigInt = await ASBigInt.wrap(y);
|
||||
const yStringPtr = await yBigInt.toString();
|
||||
const yBigNumber = BigNumber.from(__getString(yStringPtr));
|
||||
|
||||
// Perform the bigNumber bit and operation.
|
||||
const res = xBigNumber.and(yBigNumber);
|
||||
const ptr = await __newString(res.toString());
|
||||
const resBigInt = BigInt.fromString(ptr);
|
||||
const resBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return resBigInt;
|
||||
},
|
||||
'bigInt.leftShift': async (x: number, y: number) => {
|
||||
// Create a bigNumber x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
// Perform the bigNumber left shift operation.
|
||||
const res = xBigNumber.shl(y);
|
||||
const ptr = await __newString(res.toString());
|
||||
const resBigInt = BigInt.fromString(ptr);
|
||||
const resBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return resBigInt;
|
||||
},
|
||||
'bigInt.rightShift': async (x: number, y: number) => {
|
||||
// Create a bigNumber x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
// Perform the bigNumber right shift operation.
|
||||
const res = xBigNumber.shr(y);
|
||||
const ptr = await __newString(res.toString());
|
||||
const resBigInt = BigInt.fromString(ptr);
|
||||
const resBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return resBigInt;
|
||||
},
|
||||
'bigInt.pow': async (x: number, y: number) => {
|
||||
// Create a bigNumber x.
|
||||
const xBigInt = await BigInt.wrap(x);
|
||||
const xBigInt = await ASBigInt.wrap(x);
|
||||
const xStringPtr = await xBigInt.toString();
|
||||
const xBigNumber = BigNumber.from(__getString(xStringPtr));
|
||||
|
||||
// Perform the bigNumber pow operation.
|
||||
const res = xBigNumber.pow(y);
|
||||
const ptr = await __newString(res.toString());
|
||||
const resBigInt = BigInt.fromString(ptr);
|
||||
const resBigInt = ASBigInt.fromString(ptr);
|
||||
|
||||
return resBigInt;
|
||||
}
|
||||
@ -621,6 +622,37 @@ export const instantiate = async (
|
||||
assert(dataSource);
|
||||
return __newString(dataSource.network);
|
||||
}
|
||||
},
|
||||
json: {
|
||||
'json.fromBytes': async (bytes: number) => {
|
||||
return jsonFromBytes(instanceExports, bytes);
|
||||
},
|
||||
'json.try_fromBytes': async (bytes: number) => {
|
||||
try {
|
||||
const jsonValue = await jsonFromBytes(instanceExports, bytes);
|
||||
|
||||
return JSONResult.__new(jsonValue);
|
||||
} catch (error) {
|
||||
log('json.try_fromBytes error', error);
|
||||
|
||||
return JSONResult.__new(null);
|
||||
}
|
||||
},
|
||||
// TODO: Number methods do not work as 64bit values are not supported in js.
|
||||
// Tried solution in https://github.com/AssemblyScript/assemblyscript/issues/117#issuecomment-531556954
|
||||
'json.toI64': async (decimal: number) => {
|
||||
return BigInt(__getString(decimal));
|
||||
},
|
||||
'json.toU64': async (decimal: number) => {
|
||||
return BigInt(__getString(decimal));
|
||||
},
|
||||
'json.toF64': async (decimal: number) => {
|
||||
return BigInt(__getString(decimal));
|
||||
},
|
||||
// TODO: Debug toBigInt not working.
|
||||
'json.toBigInt': async (decimal: number) => {
|
||||
return ASBigInt.fromString(decimal);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -632,11 +664,12 @@ export const instantiate = async (
|
||||
// TODO: Assign from types file generated by graph-cli
|
||||
const getIdOfType: idOfType = instanceExports.id_of_type as idOfType;
|
||||
const BigDecimal: any = instanceExports.BigDecimal as any;
|
||||
const BigInt: any = instanceExports.BigInt as any;
|
||||
const ASBigInt: any = instanceExports.BigInt as any;
|
||||
const Address: any = instanceExports.Address as any;
|
||||
const ethereum: any = instanceExports.ethereum as any;
|
||||
const Entity: any = instanceExports.Entity as any;
|
||||
const ByteArray: any = instanceExports.ByteArray as any;
|
||||
const JSONResult: any = instanceExports.JSONResult as any;
|
||||
|
||||
return instance;
|
||||
};
|
||||
|
@ -3,6 +3,7 @@
|
||||
//
|
||||
|
||||
// Enum types from @graphprotocol/graph-ts.
|
||||
|
||||
export enum TypeId {
|
||||
String = 0,
|
||||
ArrayBuffer = 1,
|
||||
@ -89,3 +90,12 @@ export enum Level {
|
||||
INFO = 3,
|
||||
DEBUG = 4,
|
||||
}
|
||||
|
||||
export enum JSONValueKind {
|
||||
NULL = 0,
|
||||
BOOL = 1,
|
||||
NUMBER = 2,
|
||||
STRING = 3,
|
||||
ARRAY = 4,
|
||||
OBJECT = 5,
|
||||
}
|
||||
|
@ -548,7 +548,7 @@ const parseEntityValue = async (instanceExports: any, valuePtr: number) => {
|
||||
const {
|
||||
__getString,
|
||||
__getArray,
|
||||
BigInt: ExportBigInt,
|
||||
BigInt: ASBigInt,
|
||||
Bytes,
|
||||
BigDecimal,
|
||||
Value
|
||||
@ -583,7 +583,7 @@ const parseEntityValue = async (instanceExports: any, valuePtr: number) => {
|
||||
|
||||
case ValueKind.BIGINT: {
|
||||
const bigIntPtr = await value.toBigInt();
|
||||
const bigInt = ExportBigInt.wrap(bigIntPtr);
|
||||
const bigInt = ASBigInt.wrap(bigIntPtr);
|
||||
const bigIntStringPtr = await bigInt.toString();
|
||||
const bigIntString = __getString(bigIntStringPtr);
|
||||
|
||||
@ -616,7 +616,7 @@ const parseEntityValue = async (instanceExports: any, valuePtr: number) => {
|
||||
};
|
||||
|
||||
const formatEntityValue = async (instanceExports: any, subgraphValue: any, type: string, value: any, isArray: boolean): Promise<any> => {
|
||||
const { __newString, __newArray, BigInt: ExportBigInt, Value, ByteArray, Bytes, BigDecimal, id_of_type: getIdOfType } = instanceExports;
|
||||
const { __newString, __newArray, BigInt: ASBigInt, Value, ByteArray, Bytes, BigDecimal, id_of_type: getIdOfType } = instanceExports;
|
||||
|
||||
if (isArray) {
|
||||
const dataArrayPromises = value.map((el: any) => formatEntityValue(instanceExports, subgraphValue, type, el, false));
|
||||
@ -645,7 +645,7 @@ const formatEntityValue = async (instanceExports: any, subgraphValue: any, type:
|
||||
|
||||
case 'BigInt': {
|
||||
const valueStringPtr = await __newString(value.toString());
|
||||
const bigInt = await ExportBigInt.fromString(valueStringPtr);
|
||||
const bigInt = await ASBigInt.fromString(valueStringPtr);
|
||||
|
||||
return Value.fromBigInt(bigInt);
|
||||
}
|
||||
@ -695,3 +695,61 @@ export const resolveEntityFieldConflicts = (entity: any): any => {
|
||||
|
||||
return entity;
|
||||
};
|
||||
|
||||
export const toJSONValue = async (instanceExports: any, value: any): Promise<any> => {
|
||||
const { CustomJSONValue, JSONValueTypedMap, __newString, __newArray, id_of_type: getIdOfType } = instanceExports;
|
||||
|
||||
if (!value) {
|
||||
return CustomJSONValue.fromNull();
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
const arrayPromise = value.map(async (el: any) => toJSONValue(instanceExports, el));
|
||||
const array = await Promise.all(arrayPromise);
|
||||
const arrayJsonValueId = await getIdOfType(TypeId.ArrayJsonValue);
|
||||
const arrayPtr = __newArray(arrayJsonValueId, array);
|
||||
|
||||
return CustomJSONValue.fromArray(arrayPtr);
|
||||
}
|
||||
|
||||
if (typeof value === 'object') {
|
||||
const map = await JSONValueTypedMap.__new();
|
||||
|
||||
const valuePromises = Object.entries(value).map(async ([key, value]) => {
|
||||
const valuePtr = await toJSONValue(instanceExports, value);
|
||||
const keyPtr = await __newString(key);
|
||||
await map.set(keyPtr, valuePtr);
|
||||
});
|
||||
|
||||
await Promise.all(valuePromises);
|
||||
|
||||
return CustomJSONValue.fromObject(map);
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
const stringPtr = await __newString(value);
|
||||
|
||||
return CustomJSONValue.fromString(stringPtr);
|
||||
}
|
||||
|
||||
if (typeof value === 'number') {
|
||||
const stringPtr = await __newString(value.toString());
|
||||
|
||||
return CustomJSONValue.fromNumber(stringPtr);
|
||||
}
|
||||
|
||||
if (typeof value === 'boolean') {
|
||||
return CustomJSONValue.fromBoolean(value);
|
||||
}
|
||||
};
|
||||
|
||||
export const jsonFromBytes = async (instanceExports: any, bytesPtr: number): Promise<any> => {
|
||||
const { ByteArray, __getString } = instanceExports;
|
||||
|
||||
const byteArray = await ByteArray.wrap(bytesPtr);
|
||||
const jsonStringPtr = await byteArray.toString();
|
||||
const json = JSON.parse(__getString(jsonStringPtr));
|
||||
const jsonValue = await toJSONValue(instanceExports, json);
|
||||
|
||||
return jsonValue;
|
||||
};
|
||||
|
@ -9,9 +9,83 @@ import {
|
||||
ByteArray,
|
||||
Bytes,
|
||||
Entity,
|
||||
Value
|
||||
Value,
|
||||
JSONValue,
|
||||
TypedMap,
|
||||
JSONValueKind,
|
||||
Result,
|
||||
Wrapped
|
||||
} from '@graphprotocol/graph-ts';
|
||||
|
||||
// All exports are used in JS host API implementations.
|
||||
|
||||
/**
|
||||
* Class used to create TypedMap<string, JSONValue> instance in json fromBytes host API.
|
||||
*/
|
||||
export class JSONValueTypedMap extends TypedMap<string, JSONValue> {}
|
||||
|
||||
/**
|
||||
* Class used to create JSONValue instances from different value types.
|
||||
* Implementation is based on Value class in graph-ts. https://github.com/graphprotocol/graph-ts/blob/master/common/value.ts#L188
|
||||
*/
|
||||
export class CustomJSONValue extends JSONValue {
|
||||
static fromArray(input: Array<JSONValue>): JSONValue {
|
||||
const jsonValue = new JSONValue();
|
||||
jsonValue.kind = JSONValueKind.ARRAY;
|
||||
jsonValue.data = changetype<u32>(input);
|
||||
return jsonValue;
|
||||
}
|
||||
|
||||
static fromObject(object: TypedMap<string, JSONValue>): JSONValue {
|
||||
const jsonValue = new JSONValue();
|
||||
jsonValue.kind = JSONValueKind.OBJECT;
|
||||
jsonValue.data = changetype<u32>(object);
|
||||
return jsonValue;
|
||||
}
|
||||
|
||||
static fromNumber(n: string): JSONValue {
|
||||
const jsonValue = new JSONValue();
|
||||
jsonValue.kind = JSONValueKind.NUMBER;
|
||||
jsonValue.data = changetype<u32>(n);
|
||||
return jsonValue;
|
||||
}
|
||||
|
||||
static fromBoolean(b: boolean): JSONValue {
|
||||
const jsonValue = new JSONValue();
|
||||
jsonValue.kind = JSONValueKind.BOOL;
|
||||
jsonValue.data = b ? 1 : 0;
|
||||
return jsonValue;
|
||||
}
|
||||
|
||||
static fromString(s: string): JSONValue {
|
||||
const jsonValue = new JSONValue();
|
||||
jsonValue.kind = JSONValueKind.STRING;
|
||||
jsonValue.data = changetype<u32>(s);
|
||||
return jsonValue;
|
||||
}
|
||||
|
||||
static fromNull(): JSONValue {
|
||||
const jsonValue = new JSONValue();
|
||||
jsonValue.kind = JSONValueKind.NULL;
|
||||
return jsonValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class used to create Result instance in json try_fromBytes host API.
|
||||
*/
|
||||
export class JSONResult extends Result<JSONValue, boolean> {
|
||||
constructor (value: JSONValue | null) {
|
||||
super();
|
||||
|
||||
if (value) {
|
||||
this._value = new Wrapped(value);
|
||||
} else {
|
||||
this._error = new Wrapped(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
BigDecimal,
|
||||
BigInt,
|
||||
@ -22,5 +96,6 @@ export {
|
||||
Address,
|
||||
ByteArray,
|
||||
Bytes,
|
||||
Value
|
||||
Value,
|
||||
JSONValue
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Address, log, BigInt, BigDecimal, ByteArray, dataSource, ethereum, Bytes, crypto } from '@graphprotocol/graph-ts';
|
||||
import { Address, log, BigInt, BigDecimal, ByteArray, dataSource, ethereum, Bytes, crypto, json, JSONValueKind } from '@graphprotocol/graph-ts';
|
||||
|
||||
import {
|
||||
Example1,
|
||||
@ -516,3 +516,78 @@ export function testCrypto (hexString: string): string {
|
||||
|
||||
return keccak256String;
|
||||
}
|
||||
|
||||
export function testJsonFromBytes (): void {
|
||||
const jsonString = `
|
||||
{
|
||||
"stringValue": "abc",
|
||||
"numberValue": 123,
|
||||
"arrayValue": [ 1, 2, 3 ],
|
||||
"boolValue": true,
|
||||
"nullValue": null
|
||||
}
|
||||
`;
|
||||
|
||||
const data = Bytes.fromByteArray(
|
||||
ByteArray.fromUTF8(jsonString)
|
||||
);
|
||||
|
||||
const jsonData = json.fromBytes(data);
|
||||
assert(jsonData.kind === JSONValueKind.OBJECT, 'JSON value is not an object');
|
||||
|
||||
const stringValue = jsonData.toObject().get('stringValue')!;
|
||||
assert(stringValue.kind === JSONValueKind.STRING, 'JSON value is not a string');
|
||||
|
||||
// https://www.assemblyscript.org/basics.html#triple-equals
|
||||
// eslint-disable-next-line eqeqeq
|
||||
assert(stringValue.toString() == 'abc', 'JSON object values are not equal');
|
||||
|
||||
const numberValue = jsonData.toObject().get('numberValue')!;
|
||||
assert(numberValue.kind === JSONValueKind.NUMBER, 'JSON value is not a number');
|
||||
|
||||
// TODO: Debug json toI64 failing test case.
|
||||
// const i64Value = numberValue.toI64();
|
||||
// assert(i64Value == 123, 'values are not equal');
|
||||
|
||||
// TODO: Debug json toBigInt failing test case.
|
||||
// const bigIntValue = numberValue.toBigInt();
|
||||
// assert(bigIntValue.toString() == '123', 'values are not equal');
|
||||
}
|
||||
|
||||
export function testJsonTryFromBytes (): void {
|
||||
const incorrectJsonString = `
|
||||
{
|
||||
stringValue: "abc"
|
||||
}
|
||||
`;
|
||||
|
||||
let data = Bytes.fromByteArray(
|
||||
ByteArray.fromUTF8(incorrectJsonString)
|
||||
);
|
||||
|
||||
let jsonResult = json.try_fromBytes(data);
|
||||
assert(jsonResult.isError, 'JSON parsing should fail');
|
||||
|
||||
const correctJsonString = `
|
||||
{
|
||||
"stringValue": "abc"
|
||||
}
|
||||
`;
|
||||
|
||||
data = Bytes.fromByteArray(
|
||||
ByteArray.fromUTF8(correctJsonString)
|
||||
);
|
||||
|
||||
jsonResult = json.try_fromBytes(data);
|
||||
assert(jsonResult.isOk, 'JSON parsing should be successful');
|
||||
const jsonData = jsonResult.value;
|
||||
|
||||
assert(jsonData.kind === JSONValueKind.OBJECT, 'JSON value is not an object');
|
||||
|
||||
const objectValue = jsonData.toObject().get('stringValue')!;
|
||||
assert(objectValue.kind === JSONValueKind.STRING, 'JSON value is not a string');
|
||||
|
||||
// https://www.assemblyscript.org/basics.html#triple-equals
|
||||
// eslint-disable-next-line eqeqeq
|
||||
assert(objectValue.toString() == 'abc', 'JSON object values are not equal');
|
||||
}
|
||||
|
@ -3,29 +3,29 @@
|
||||
|
||||
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
|
||||
integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
|
||||
integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.16.0"
|
||||
"@babel/highlight" "^7.16.7"
|
||||
|
||||
"@babel/helper-validator-identifier@^7.15.7":
|
||||
version "7.15.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
|
||||
integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
|
||||
"@babel/helper-validator-identifier@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
|
||||
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
|
||||
|
||||
"@babel/highlight@^7.16.0":
|
||||
version "7.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a"
|
||||
integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==
|
||||
"@babel/highlight@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b"
|
||||
integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.15.7"
|
||||
"@babel/helper-validator-identifier" "^7.16.7"
|
||||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@graphprotocol/graph-cli@ssh://git@github.com:vulcanize/graph-cli.git#graph-watcher":
|
||||
version "0.22.4"
|
||||
resolved "ssh://git@github.com:vulcanize/graph-cli.git#0f68b8901349493bff3e85072e8cb43fab7b9101"
|
||||
resolved "ssh://git@github.com:vulcanize/graph-cli.git#07003fccd88a8a335b019445df2588941445547c"
|
||||
dependencies:
|
||||
assemblyscript "0.19.10"
|
||||
binary-install-raw "0.0.13"
|
||||
@ -66,28 +66,28 @@
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/express-serve-static-core@^4.17.9":
|
||||
version "4.17.25"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz#e42f7046adc65ece2eb6059b77aecfbe9e9f82e0"
|
||||
integrity sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==
|
||||
version "4.17.27"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.27.tgz#7a776191e47295d2a05962ecbb3a4ce97e38b401"
|
||||
integrity sha512-e/sVallzUTPdyOTiqi8O8pMdBBphscvI6E4JYaKlja4Lm+zh7UFSSdW5VMkRbhDtmrONqOUHOXRguPsDckzxNA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/qs" "*"
|
||||
"@types/range-parser" "*"
|
||||
|
||||
"@types/lodash@^4.14.159":
|
||||
version "4.14.177"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578"
|
||||
integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw==
|
||||
version "4.14.178"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8"
|
||||
integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==
|
||||
|
||||
"@types/node@*":
|
||||
version "16.11.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.9.tgz#879be3ad7af29f4c1a5c433421bf99fab7047185"
|
||||
integrity sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==
|
||||
version "17.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.7.tgz#4a53d8332bb65a45470a2f9e2611f1ced637a5cb"
|
||||
integrity sha512-1QUk+WAUD4t8iR+Oj+UgI8oJa6yyxaB8a8pHaC8uqM6RrS1qbL7bf3Pwl5rHv0psm2CuDErgho6v5N+G+5fwtQ==
|
||||
|
||||
"@types/node@^12.12.54":
|
||||
version "12.20.37"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed"
|
||||
integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==
|
||||
version "12.20.40"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.40.tgz#5f4345ac29efe3ad490127f3b69884e7d22743ee"
|
||||
integrity sha512-RX6hFa0hxkFuktu5629zJEkWK5e0HreW4vpNSLn4nWkOui7CTGCjtKiKpvtZ4QwCZ2Am5uhrb5ULHKNyunYYqg==
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
@ -181,13 +181,12 @@ anymatch@~3.1.2:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
apisauce@^2.0.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.2.tgz#4cd988d5612a34f051523ef7b2b75338afd37a55"
|
||||
integrity sha512-2/9tz9uR/56UfZpzeMkGyX33tNjYpBNjhwvT/yyYIItulboxzTqZTD3F3Q7WJVXl8fvX6PZDMaxoFH4r/sXkEA==
|
||||
apisauce@^2.1.5:
|
||||
version "2.1.5"
|
||||
resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.5.tgz#546229f8f145711b3b022065afb0f43bd304ecb3"
|
||||
integrity sha512-bkMlz0ZUnyS8vDigej9UBYo5dne9/bQrkgIiIkGaiDHF6e5OxhYRLJDYu65V/Ox86tmWVwepIntAoTmk4Db0Hg==
|
||||
dependencies:
|
||||
axios "^0.21.4"
|
||||
ramda "^0.25.0"
|
||||
|
||||
app-module-path@^2.2.0:
|
||||
version "2.2.0"
|
||||
@ -295,9 +294,9 @@ bcrypt-pbkdf@^1.0.0:
|
||||
tweetnacl "^0.14.3"
|
||||
|
||||
bignumber.js@^9.0.0:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5"
|
||||
integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673"
|
||||
integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.2.0"
|
||||
@ -725,9 +724,9 @@ debug@^3.2.6:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.1.0, debug@^4.1.1:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
|
||||
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
|
||||
version "4.3.3"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
|
||||
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
@ -764,9 +763,9 @@ detect-node@^2.0.4:
|
||||
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
|
||||
|
||||
docker-compose@^0.23.2:
|
||||
version "0.23.13"
|
||||
resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.13.tgz#77d37bd05b6a966345f631e6d05e961c79514f06"
|
||||
integrity sha512-/9fYC4g3AO+qsqxIZhmbVnFvJJPcYEV2yJbAPPXH+6AytU3urIY8lUAXOlvY8sl4u25pdKu1JrOfAmWC7lJDJg==
|
||||
version "0.23.14"
|
||||
resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.14.tgz#caa991f05ea43ee4e1b8221064d0a9e0016ee1c7"
|
||||
integrity sha512-n4y10yvZEGtwW4EvpDpiWal2elr6D14Bt8oP3nvlLAxryblEVub689lYhpu8lr54OlTiW9X64BH9SLd9AqljNw==
|
||||
dependencies:
|
||||
yaml "^1.10.2"
|
||||
|
||||
@ -959,9 +958,9 @@ flatmap@0.0.3:
|
||||
integrity sha1-Hxik2TgVLUlZZfnJWNkjqy3WabQ=
|
||||
|
||||
follow-redirects@^1.14.0:
|
||||
version "1.14.5"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381"
|
||||
integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
|
||||
version "1.14.6"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd"
|
||||
integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==
|
||||
|
||||
forever-agent@~0.6.1:
|
||||
version "0.6.1"
|
||||
@ -1065,11 +1064,11 @@ glob@^7.1.2, glob@^7.1.3:
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
gluegun@^4.3.1:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-4.7.0.tgz#d1e88828ec6737d966619fff07c04f7e689dc59e"
|
||||
integrity sha512-St+J/rly0FoWLeISgBGDuymwF3/b8OdmxBCbSvK1hXEoRbaaATiRpPepJSJWuRYR7cGR7Hy9drgQwGFBAolhbQ==
|
||||
version "4.7.1"
|
||||
resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-4.7.1.tgz#89477f155b79c16e63e7386819b01943942a7993"
|
||||
integrity sha512-5iLbLCU+jCf34zHrl+AKC39mDIpVKn/Z5B2uIS8TjHVaPBaDPnRD/VspiHy9dyF5mjr7Ogg1/gOt8yeWo7MEug==
|
||||
dependencies:
|
||||
apisauce "^2.0.1"
|
||||
apisauce "^2.1.5"
|
||||
app-module-path "^2.2.0"
|
||||
cli-table3 "~0.5.0"
|
||||
colors "^1.3.3"
|
||||
@ -1096,7 +1095,6 @@ gluegun@^4.3.1:
|
||||
lodash.upperfirst "^4.3.1"
|
||||
ora "^4.0.0"
|
||||
pluralize "^8.0.0"
|
||||
ramdasauce "^2.1.0"
|
||||
semver "^7.0.0"
|
||||
which "^2.0.0"
|
||||
yargs-parser "^16.1.0"
|
||||
@ -1107,9 +1105,9 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0:
|
||||
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
|
||||
|
||||
graphql@^15.5.0:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.7.2.tgz#85ab0eeb83722977151b3feb4d631b5f2ab287ef"
|
||||
integrity sha512-AnnKk7hFQFmU/2I9YSQf3xw44ctnSFCfp3zE0N6W174gqe9fWG/2rKaKxROK7CcI3XtERpjEKFqts8o319Kf7A==
|
||||
version "15.8.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38"
|
||||
integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==
|
||||
|
||||
har-schema@^2.0.0:
|
||||
version "2.0.0"
|
||||
@ -1503,9 +1501,9 @@ iterable-ndjson@^1.1.0:
|
||||
string_decoder "^1.2.0"
|
||||
|
||||
jayson@^3.0.2:
|
||||
version "3.6.5"
|
||||
resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.5.tgz#e560bcad4daf098c7391f46ba8efc9d6f34a4102"
|
||||
integrity sha512-wmOjX+eQcnCDyPF4KORomaIj9wj3h0B5VEbeD0+2VHfTfErB+h1zpR7oBkgCZp36AFjp3+a4CLz6U72BYpFHAw==
|
||||
version "3.6.6"
|
||||
resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.6.tgz#189984f624e398f831bd2be8e8c80eb3abf764a1"
|
||||
integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ==
|
||||
dependencies:
|
||||
"@types/connect" "^3.4.33"
|
||||
"@types/express-serve-static-core" "^4.17.9"
|
||||
@ -1520,7 +1518,7 @@ jayson@^3.0.2:
|
||||
isomorphic-ws "^4.0.1"
|
||||
json-stringify-safe "^5.0.1"
|
||||
lodash "^4.17.20"
|
||||
uuid "^3.4.0"
|
||||
uuid "^8.3.2"
|
||||
ws "^7.4.5"
|
||||
|
||||
js-sha3@^0.8.0, js-sha3@~0.8.0:
|
||||
@ -1556,10 +1554,10 @@ json-schema-traverse@^0.4.1:
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
|
||||
|
||||
json-schema@0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
||||
json-schema@0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
|
||||
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
|
||||
|
||||
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
||||
version "5.0.1"
|
||||
@ -1588,13 +1586,13 @@ jsonparse@^1.2.0:
|
||||
integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
|
||||
|
||||
jsprim@^1.2.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
||||
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
|
||||
integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
|
||||
dependencies:
|
||||
assert-plus "1.0.0"
|
||||
extsprintf "1.3.0"
|
||||
json-schema "0.2.3"
|
||||
json-schema "0.4.0"
|
||||
verror "1.10.0"
|
||||
|
||||
just-kebab-case@^1.1.0:
|
||||
@ -1848,9 +1846,9 @@ minimist@^1.2.0, minimist@^1.2.5:
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
|
||||
minipass@^3.0.0:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732"
|
||||
integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==
|
||||
version "3.1.6"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee"
|
||||
integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
@ -2088,9 +2086,9 @@ object-assign@^4.1.0:
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
||||
object-inspect@^1.9.0:
|
||||
version "1.11.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
|
||||
integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
|
||||
integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
|
||||
|
||||
once@^1.3.0, once@^1.3.1, once@^1.4.0:
|
||||
version "1.4.0"
|
||||
@ -2197,9 +2195,9 @@ performance-now@^2.1.0:
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
|
||||
integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
pkginfo@^0.4.1:
|
||||
version "0.4.1"
|
||||
@ -2297,9 +2295,9 @@ punycode@^2.1.0, punycode@^2.1.1:
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
qs@^6.5.2:
|
||||
version "6.10.1"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
|
||||
integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
|
||||
version "6.10.2"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe"
|
||||
integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==
|
||||
dependencies:
|
||||
side-channel "^1.0.4"
|
||||
|
||||
@ -2308,23 +2306,6 @@ qs@~6.5.2:
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||
|
||||
ramda@^0.24.1:
|
||||
version "0.24.1"
|
||||
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857"
|
||||
integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc=
|
||||
|
||||
ramda@^0.25.0:
|
||||
version "0.25.0"
|
||||
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9"
|
||||
integrity sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==
|
||||
|
||||
ramdasauce@^2.1.0:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ramdasauce/-/ramdasauce-2.1.3.tgz#acb45ecc7e4fc4d6f39e19989b4a16dff383e9c2"
|
||||
integrity sha512-Ml3CPim4SKwmg5g9UI77lnRSeKr/kQw7YhQ6rfdMcBYy6DMlwmkEwQqjygJ3OhxPR+NfFfpjKl3Tf8GXckaqqg==
|
||||
dependencies:
|
||||
ramda "^0.24.1"
|
||||
|
||||
"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||
@ -2772,11 +2753,16 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
uuid@^3.3.2, uuid@^3.4.0:
|
||||
uuid@^3.3.2:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
||||
uuid@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||
|
||||
varint@^5.0.0, varint@~5.0.0:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4"
|
||||
@ -2829,9 +2815,9 @@ wrappy@1:
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
ws@^7.4.5:
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
|
||||
integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
|
||||
version "7.5.6"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b"
|
||||
integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==
|
||||
|
||||
xtend@^4.0.0:
|
||||
version "4.0.2"
|
||||
|
Loading…
Reference in New Issue
Block a user