mirror of
https://github.com/wharfkit/signing-request.git
synced 2026-07-21 08:02:07 +00:00
Fix lint options and run formatter+linter
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
arrowParens: "always"
|
||||
bracketSpacing: false
|
||||
endOfLine: "lf"
|
||||
printWidth: 100
|
||||
semi: false
|
||||
singleQuote: true
|
||||
tabWidth: 4
|
||||
trailingComma: "es5"
|
||||
@@ -19,8 +19,11 @@
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "^12.0.8",
|
||||
"mocha": "^6.1.4",
|
||||
"prettier": "^1.19.1",
|
||||
"ts-node": "^8.2.0",
|
||||
"tslint": "^5.12.0",
|
||||
"tslint-config-prettier": "^1.18.0",
|
||||
"tslint-plugin-prettier": "^2.0.1",
|
||||
"typescript": "^3.2.2"
|
||||
}
|
||||
}
|
||||
|
||||
+6
-3
@@ -6,8 +6,11 @@ export type PermissionName = string /*name*/
|
||||
export type ChainAlias = number /*uint8*/
|
||||
export type ChainId = string /*checksum256*/
|
||||
export type VariantId = ['chain_alias', ChainAlias] | ['chain_id', ChainId]
|
||||
export type VariantReq = ['action', Action] | ['action[]', Action[]] |
|
||||
['transaction', Transaction] | ['identity', Identity]
|
||||
export type VariantReq =
|
||||
| ['action', Action]
|
||||
| ['action[]', Action[]]
|
||||
| ['transaction', Transaction]
|
||||
| ['identity', Identity]
|
||||
|
||||
export interface PermissionLevel {
|
||||
actor: AccountName
|
||||
@@ -18,7 +21,7 @@ export interface Action {
|
||||
account: AccountName
|
||||
name: ActionName
|
||||
authorization: PermissionLevel[]
|
||||
data: string | { [key: string]: any }
|
||||
data: string | {[key: string]: any}
|
||||
}
|
||||
|
||||
export interface Extension {
|
||||
|
||||
+4
-4
@@ -29,9 +29,9 @@ export function encode(data: Uint8Array): string {
|
||||
|
||||
// Use bitmasks to extract 6-bit segments from the triplet
|
||||
a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18
|
||||
b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12
|
||||
c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6
|
||||
d = chunk & 63 // 63 = 2^6 - 1
|
||||
b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12
|
||||
c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6
|
||||
d = chunk & 63 // 63 = 2^6 - 1
|
||||
|
||||
// Convert the raw binary segments to the appropriate ASCII encoding
|
||||
parts.push(charset[a] + charset[b] + charset[c] + charset[d])
|
||||
@@ -51,7 +51,7 @@ export function encode(data: Uint8Array): string {
|
||||
chunk = (data[mainLength] << 8) | data[mainLength + 1]
|
||||
|
||||
a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10
|
||||
b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4
|
||||
b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4
|
||||
|
||||
// Set the 2 least significant bits to zero
|
||||
c = (chunk & 15) << 2 // 15 = 2^4 - 1
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
export * from './signing-request'
|
||||
import * as abi from './abi'
|
||||
export { abi }
|
||||
export {abi}
|
||||
|
||||
+119
-77
@@ -2,7 +2,7 @@
|
||||
* EOSIO URI Signing Request.
|
||||
*/
|
||||
|
||||
import { Serialize } from 'eosjs'
|
||||
import {Serialize} from 'eosjs'
|
||||
import sha256 from 'fast-sha256'
|
||||
|
||||
import * as abi from './abi'
|
||||
@@ -30,7 +30,7 @@ export interface ZlibProvider {
|
||||
/** Interface that should be implemented by signature providers. */
|
||||
export interface SignatureProvider {
|
||||
/** Sign 32-byte hex-encoded message and return signer name and signature string. */
|
||||
sign: (message: string) => {signer: string, signature: string}
|
||||
sign: (message: string) => {signer: string; signature: string}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,7 +44,7 @@ export interface CallbackContext {
|
||||
/** The block id where transaction was included. */
|
||||
id: string // 32-byte hex-encoded checksum
|
||||
/** The block number where transaction was included. */
|
||||
block_num: number,
|
||||
block_num: number
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ export interface ResolvedCallback {
|
||||
* The resolved context, for a https POST this should be included in
|
||||
* the request body as JSON.
|
||||
*/
|
||||
ctx: { [key: string]: string }
|
||||
ctx: {[key: string]: string}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,7 +146,7 @@ const ChainIdLookup = new Map<abi.ChainAlias, abi.ChainId>([
|
||||
*/
|
||||
export const PlaceholderName = '............1' // aka uint64(1)
|
||||
|
||||
export type CallbackType = string | { url: string, background: boolean }
|
||||
export type CallbackType = string | {url: string; background: boolean}
|
||||
|
||||
export interface SigningRequestCreateArguments {
|
||||
/** Single action to create request with. */
|
||||
@@ -157,7 +157,7 @@ export interface SigningRequestCreateArguments {
|
||||
* Full or partial transaction to create request with.
|
||||
* If TAPoS info is omitted it will be filled in when resolving the request.
|
||||
*/
|
||||
transaction?: { actions: abi.Action[], [key: string]: any }
|
||||
transaction?: {actions: abi.Action[]; [key: string]: any}
|
||||
/** Create an identity request. */
|
||||
identity?: abi.Identity
|
||||
/** Chain to use, defaults to EOS main-net if omitted. */
|
||||
@@ -211,7 +211,10 @@ export class SigningRequest {
|
||||
public static type = AbiTypes.get('signing_request')!
|
||||
|
||||
/** Create a new signing request. */
|
||||
public static async create(args: SigningRequestCreateArguments, options: SigningRequestEncodingOptions = {}) {
|
||||
public static async create(
|
||||
args: SigningRequestCreateArguments,
|
||||
options: SigningRequestEncodingOptions = {}
|
||||
) {
|
||||
const textEncoder = options.textEncoder || new TextEncoder()
|
||||
const textDecoder = options.textDecoder || new TextDecoder()
|
||||
const data: any = {}
|
||||
@@ -230,19 +233,37 @@ export class SigningRequest {
|
||||
} else if (args.transaction && !args.action && !args.actions) {
|
||||
const tx = args.transaction
|
||||
// set default values if missing
|
||||
if (tx.expiration === undefined) { tx.expiration = '1970-01-01T00:00:00.000' }
|
||||
if (tx.ref_block_num === undefined) { tx.ref_block_num = 0 }
|
||||
if (tx.ref_block_prefix === undefined) { tx.ref_block_prefix = 0 }
|
||||
if (tx.context_free_actions === undefined) { tx.context_free_actions = [] }
|
||||
if (tx.transaction_extensions === undefined) { tx.transaction_extensions = [] }
|
||||
if (tx.delay_sec === undefined) { tx.delay_sec = 0 }
|
||||
if (tx.max_cpu_usage_ms === undefined) { tx.max_cpu_usage_ms = 0 }
|
||||
if (tx.max_net_usage_words === undefined) { tx.max_net_usage_words = 0 }
|
||||
if (tx.expiration === undefined) {
|
||||
tx.expiration = '1970-01-01T00:00:00.000'
|
||||
}
|
||||
if (tx.ref_block_num === undefined) {
|
||||
tx.ref_block_num = 0
|
||||
}
|
||||
if (tx.ref_block_prefix === undefined) {
|
||||
tx.ref_block_prefix = 0
|
||||
}
|
||||
if (tx.context_free_actions === undefined) {
|
||||
tx.context_free_actions = []
|
||||
}
|
||||
if (tx.transaction_extensions === undefined) {
|
||||
tx.transaction_extensions = []
|
||||
}
|
||||
if (tx.delay_sec === undefined) {
|
||||
tx.delay_sec = 0
|
||||
}
|
||||
if (tx.max_cpu_usage_ms === undefined) {
|
||||
tx.max_cpu_usage_ms = 0
|
||||
}
|
||||
if (tx.max_net_usage_words === undefined) {
|
||||
tx.max_net_usage_words = 0
|
||||
}
|
||||
// encode actions if needed
|
||||
tx.actions = await Promise.all(tx.actions.map(serialize))
|
||||
data.req = ['transaction', tx]
|
||||
} else {
|
||||
throw new TypeError('Invalid arguments: Must have exactly one of action, actions or transaction')
|
||||
throw new TypeError(
|
||||
'Invalid arguments: Must have exactly one of action, actions or transaction'
|
||||
)
|
||||
}
|
||||
|
||||
// set the chain id
|
||||
@@ -253,7 +274,12 @@ export class SigningRequest {
|
||||
data.callback = callbackValue(args.callback)
|
||||
|
||||
const req = new SigningRequest(
|
||||
1, data, textEncoder, textDecoder, options.zlib, options.abiProvider,
|
||||
1,
|
||||
data,
|
||||
textEncoder,
|
||||
textDecoder,
|
||||
options.zlib,
|
||||
options.abiProvider
|
||||
)
|
||||
|
||||
// sign the request if given a signature provider
|
||||
@@ -267,16 +293,19 @@ export class SigningRequest {
|
||||
/** Creates an identity request. */
|
||||
public static identity(
|
||||
args: SigningRequestCreateIdentityArguments,
|
||||
options: SigningRequestEncodingOptions = {},
|
||||
options: SigningRequestEncodingOptions = {}
|
||||
) {
|
||||
return this.create({
|
||||
identity: {
|
||||
account: args.account || PlaceholderName,
|
||||
request_key: args.request_key || null,
|
||||
return this.create(
|
||||
{
|
||||
identity: {
|
||||
account: args.account || PlaceholderName,
|
||||
request_key: args.request_key || null,
|
||||
},
|
||||
broadcast: false,
|
||||
callback: args.callback,
|
||||
},
|
||||
broadcast: false,
|
||||
callback: args.callback,
|
||||
}, options)
|
||||
options
|
||||
)
|
||||
}
|
||||
|
||||
/** Creates a signing request from encoded `eosio:` uri string. */
|
||||
@@ -292,7 +321,7 @@ export class SigningRequest {
|
||||
throw new Error('Invalid protocol version')
|
||||
}
|
||||
let array = data.slice(1)
|
||||
if ((header & 1 << 7) !== 0) {
|
||||
if ((header & (1 << 7)) !== 0) {
|
||||
if (!options.zlib) {
|
||||
throw new Error('Compressed URI needs zlib')
|
||||
}
|
||||
@@ -301,7 +330,9 @@ export class SigningRequest {
|
||||
const textEncoder = options.textEncoder || new TextEncoder()
|
||||
const textDecoder = options.textDecoder || new TextDecoder()
|
||||
const buffer = new Serialize.SerialBuffer({
|
||||
textEncoder, textDecoder, array,
|
||||
textEncoder,
|
||||
textDecoder,
|
||||
array,
|
||||
})
|
||||
const req = SigningRequest.type.deserialize(buffer)
|
||||
let signature: abi.RequestSignature | undefined
|
||||
@@ -310,7 +341,13 @@ export class SigningRequest {
|
||||
signature = type.deserialize(buffer)
|
||||
}
|
||||
return new SigningRequest(
|
||||
version, req, textEncoder, textDecoder, options.zlib, options.abiProvider, signature,
|
||||
version,
|
||||
req,
|
||||
textEncoder,
|
||||
textDecoder,
|
||||
options.zlib,
|
||||
options.abiProvider,
|
||||
signature
|
||||
)
|
||||
}
|
||||
|
||||
@@ -352,7 +389,7 @@ export class SigningRequest {
|
||||
textDecoder: TextDecoder,
|
||||
zlib?: ZlibProvider,
|
||||
abiProvider?: AbiProvider,
|
||||
signature?: abi.RequestSignature,
|
||||
signature?: abi.RequestSignature
|
||||
) {
|
||||
if (data.broadcast === true && data.req[0] === 'identity') {
|
||||
throw new Error('Invalid request (identity request cannot be broadcast)')
|
||||
@@ -447,7 +484,7 @@ export class SigningRequest {
|
||||
public async getTransaction(
|
||||
signer: string | abi.PermissionLevel,
|
||||
ctx: TransactionContext = {},
|
||||
abiProvider?: AbiProvider,
|
||||
abiProvider?: AbiProvider
|
||||
) {
|
||||
signer = parseSigner(signer)
|
||||
const req = this.data.req
|
||||
@@ -513,57 +550,62 @@ export class SigningRequest {
|
||||
ctx.ref_block_prefix !== undefined &&
|
||||
ctx.timestamp !== undefined
|
||||
) {
|
||||
const header = Serialize.transactionHeader(ctx as any,
|
||||
ctx.expire_seconds !== undefined ? ctx.expire_seconds : 60,
|
||||
const header = Serialize.transactionHeader(
|
||||
ctx as any,
|
||||
ctx.expire_seconds !== undefined ? ctx.expire_seconds : 60
|
||||
)
|
||||
tx.expiration = header.expiration
|
||||
tx.ref_block_num = header.ref_block_num
|
||||
tx.ref_block_prefix = header.ref_block_prefix
|
||||
} else {
|
||||
throw new Error('Invalid transaction context, need either a reference block or explicit TAPoS values')
|
||||
throw new Error(
|
||||
'Invalid transaction context, need either a reference block or explicit TAPoS values'
|
||||
)
|
||||
}
|
||||
}
|
||||
const provider = abiProvider || this.abiProvider
|
||||
if (!provider) {
|
||||
throw new Error('Missing ABI provider')
|
||||
}
|
||||
const actions = await Promise.all(tx.actions.map(async (rawAction) => {
|
||||
if (
|
||||
rawAction.account === '' &&
|
||||
rawAction.name === 'identity' &&
|
||||
typeof rawAction.data === 'object'
|
||||
) {
|
||||
if (rawAction.data.account === PlaceholderName) {
|
||||
rawAction.data.account = (signer as abi.PermissionLevel).actor
|
||||
const actions = await Promise.all(
|
||||
tx.actions.map(async (rawAction) => {
|
||||
if (
|
||||
rawAction.account === '' &&
|
||||
rawAction.name === 'identity' &&
|
||||
typeof rawAction.data === 'object'
|
||||
) {
|
||||
if (rawAction.data.account === PlaceholderName) {
|
||||
rawAction.data.account = (signer as abi.PermissionLevel).actor
|
||||
}
|
||||
return serializeAction(rawAction, this.textEncoder, this.textDecoder)
|
||||
}
|
||||
return serializeAction(rawAction, this.textEncoder, this.textDecoder)
|
||||
}
|
||||
const contractAbi = await provider.getAbi(rawAction.account)
|
||||
const contract = getContract(contractAbi)
|
||||
// hook into eosjs name decoder and return the signing account if we encounter the placeholder
|
||||
// this is fine because getContract re-creates the initial types each time
|
||||
contract.types.get('name')!.deserialize = (buffer: Serialize.SerialBuffer) => {
|
||||
const name = buffer.getName()
|
||||
if (name === PlaceholderName) {
|
||||
return (signer as abi.PermissionLevel).actor
|
||||
} else {
|
||||
return name
|
||||
const contractAbi = await provider.getAbi(rawAction.account)
|
||||
const contract = getContract(contractAbi)
|
||||
// hook into eosjs name decoder and return the signing account if we encounter the placeholder
|
||||
// this is fine because getContract re-creates the initial types each time
|
||||
contract.types.get('name')!.deserialize = (buffer: Serialize.SerialBuffer) => {
|
||||
const name = buffer.getName()
|
||||
if (name === PlaceholderName) {
|
||||
return (signer as abi.PermissionLevel).actor
|
||||
} else {
|
||||
return name
|
||||
}
|
||||
}
|
||||
}
|
||||
const action = this.deserializeAction(contract, rawAction)
|
||||
action.authorization = action.authorization.map((val) => {
|
||||
const auth = { ...val }
|
||||
if (auth.actor === PlaceholderName) {
|
||||
auth.actor = (signer as abi.PermissionLevel).actor
|
||||
}
|
||||
if (auth.permission === PlaceholderName) {
|
||||
auth.permission = (signer as abi.PermissionLevel).permission
|
||||
}
|
||||
return auth
|
||||
const action = this.deserializeAction(contract, rawAction)
|
||||
action.authorization = action.authorization.map((val) => {
|
||||
const auth = {...val}
|
||||
if (auth.actor === PlaceholderName) {
|
||||
auth.actor = (signer as abi.PermissionLevel).actor
|
||||
}
|
||||
if (auth.permission === PlaceholderName) {
|
||||
auth.permission = (signer as abi.PermissionLevel).permission
|
||||
}
|
||||
return auth
|
||||
})
|
||||
return action
|
||||
})
|
||||
return action
|
||||
}))
|
||||
return { ...tx, actions }
|
||||
)
|
||||
return {...tx, actions}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -576,7 +618,7 @@ export class SigningRequest {
|
||||
public getCallback(
|
||||
signatures: string | string[],
|
||||
context?: CallbackContext,
|
||||
signer?: string | abi.PermissionLevel,
|
||||
signer?: string | abi.PermissionLevel
|
||||
): ResolvedCallback | null {
|
||||
const callback = this.data.callback
|
||||
if (!callback) {
|
||||
@@ -597,7 +639,7 @@ export class SigningRequest {
|
||||
if (!signatures || signatures.length === 0) {
|
||||
throw new Error('Must have at least one signature to resolve callback')
|
||||
}
|
||||
const ctx: { [key: string]: string } = {
|
||||
const ctx: {[key: string]: string} = {
|
||||
sig: signatures[0],
|
||||
}
|
||||
for (const [n, sig] of signatures.entries()) {
|
||||
@@ -686,7 +728,7 @@ export class SigningRequest {
|
||||
*/
|
||||
public getIdentity(): string | null {
|
||||
if (this.data.req[0] === 'identity') {
|
||||
const { account } = this.data.req[1]
|
||||
const {account} = this.data.req[1]
|
||||
return account === PlaceholderName ? null : account
|
||||
}
|
||||
return null
|
||||
@@ -717,7 +759,7 @@ export class SigningRequest {
|
||||
action.authorization,
|
||||
action.data as any,
|
||||
this.textEncoder,
|
||||
this.textDecoder,
|
||||
this.textDecoder
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -726,17 +768,17 @@ export class SigningRequest {
|
||||
function getContract(contractAbi: any): Serialize.Contract {
|
||||
const types = Serialize.getTypesFromAbi(Serialize.createInitialTypes(), contractAbi)
|
||||
const actions = new Map<string, Serialize.Type>()
|
||||
for (const { name, type } of contractAbi.actions) {
|
||||
for (const {name, type} of contractAbi.actions) {
|
||||
actions.set(name, Serialize.getType(types, type))
|
||||
}
|
||||
return { types, actions }
|
||||
return {types, actions}
|
||||
}
|
||||
|
||||
async function serializeAction(
|
||||
action: abi.Action,
|
||||
textEncoder: TextEncoder,
|
||||
textDecoder: TextDecoder,
|
||||
abiProvider?: AbiProvider,
|
||||
abiProvider?: AbiProvider
|
||||
) {
|
||||
if (typeof action.data === 'string') {
|
||||
return action
|
||||
@@ -757,14 +799,14 @@ async function serializeAction(
|
||||
action.authorization,
|
||||
action.data,
|
||||
textEncoder,
|
||||
textDecoder,
|
||||
textDecoder
|
||||
)
|
||||
}
|
||||
|
||||
function parseSigner(signer: string | abi.PermissionLevel): abi.PermissionLevel {
|
||||
if (typeof signer === 'string') {
|
||||
const [actor, permission] = signer.split('@')
|
||||
signer = { actor, permission }
|
||||
signer = {actor, permission}
|
||||
}
|
||||
if (
|
||||
typeof signer !== 'object' ||
|
||||
@@ -778,7 +820,7 @@ function parseSigner(signer: string | abi.PermissionLevel): abi.PermissionLevel
|
||||
|
||||
function callbackValue(callback?: CallbackType): abi.Callback | null {
|
||||
if (typeof callback === 'string') {
|
||||
return { background: false, url: callback }
|
||||
return {background: false, url: callback}
|
||||
} else if (typeof callback === 'object') {
|
||||
return callback
|
||||
}
|
||||
|
||||
+10
-10
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"defaultSeverity": "error",
|
||||
"extends": ["tslint:recommended"],
|
||||
"extends": [
|
||||
"tslint-plugin-prettier",
|
||||
"tslint-config-prettier"
|
||||
],
|
||||
"rules": {
|
||||
"indent": [true, "spaces", 4],
|
||||
"interface-name": [true, "never-prefix"],
|
||||
"max-classes-per-file": false,
|
||||
"no-bitwise": false,
|
||||
"object-literal-sort-keys": false,
|
||||
"quotemark": [true, "single", "avoid-escape"],
|
||||
"semicolon": [true, "never"],
|
||||
"triple-equals": [true, "allow-null-check"]
|
||||
"prettier": true,
|
||||
"triple-equals": [
|
||||
true,
|
||||
"allow-null-check"
|
||||
],
|
||||
"ordered-imports": true
|
||||
}
|
||||
}
|
||||
@@ -359,6 +359,14 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
eslint-plugin-prettier@^2.2.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904"
|
||||
integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==
|
||||
dependencies:
|
||||
fast-diff "^1.1.1"
|
||||
jest-docblock "^21.0.0"
|
||||
|
||||
esprima@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||
@@ -390,6 +398,11 @@ execa@^1.0.0:
|
||||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
fast-diff@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
|
||||
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
|
||||
|
||||
fast-sha256@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/fast-sha256/-/fast-sha256-1.1.1.tgz#2a1fca6a7fd0943da478f17760d19cf52ba78dea"
|
||||
@@ -559,6 +572,11 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
jest-docblock@^21.0.0:
|
||||
version "21.2.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
|
||||
integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==
|
||||
|
||||
js-tokens@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||
@@ -587,6 +605,11 @@ lcid@^2.0.0:
|
||||
dependencies:
|
||||
invert-kv "^2.0.0"
|
||||
|
||||
lines-and-columns@^1.1.6:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
|
||||
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
|
||||
|
||||
locate-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||
@@ -823,6 +846,11 @@ path-parse@^1.0.6:
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||
|
||||
prettier@^1.19.1:
|
||||
version "1.19.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
|
||||
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
|
||||
|
||||
pump@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
@@ -1028,11 +1056,30 @@ ts-node@^8.2.0:
|
||||
source-map-support "^0.5.6"
|
||||
yn "^3.0.0"
|
||||
|
||||
tslib@^1.7.1:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
||||
|
||||
tslib@^1.8.0, tslib@^1.8.1:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
|
||||
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
|
||||
|
||||
tslint-config-prettier@^1.18.0:
|
||||
version "1.18.0"
|
||||
resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37"
|
||||
integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==
|
||||
|
||||
tslint-plugin-prettier@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz#95b6a3b766622ffc44375825d7760225c50c3680"
|
||||
integrity sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw==
|
||||
dependencies:
|
||||
eslint-plugin-prettier "^2.2.0"
|
||||
lines-and-columns "^1.1.6"
|
||||
tslib "^1.7.1"
|
||||
|
||||
tslint@^5.12.0:
|
||||
version "5.12.0"
|
||||
resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.0.tgz#47f2dba291ed3d580752d109866fb640768fca36"
|
||||
|
||||
Reference in New Issue
Block a user