integrate initial pass of orcas devnet swap

This commit is contained in:
tjs 2022-06-10 09:02:03 -04:00
parent 4a257cd694
commit 07ad602133
11 changed files with 367 additions and 156 deletions

View File

@ -2,28 +2,32 @@
"name": "@blockworks-foundation/mango-v4",
"version": "0.0.1",
"description": "Typescript Client for mango-v4 program.",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"repository": "https://github.com/blockworks-foundation/mango-v4",
"author": {
"name": "Blockworks Foundation",
"email": "hello@blockworks.foundation",
"url": "https://blockworks.foundation"
},
"main": "dist/cjs/index.js",
"types": "dist/types/index.d.ts",
"sideEffects": false,
"files": [
"dist"
],
"scripts": {
"build": "tsc",
"build": "npm run build:cjs",
"build:cjs": "tsc -p tsconfig.cjs.json",
"clean": "rm -rf dist",
"example1-user": "ts-node ts/client/src/scripts/example1-user.ts",
"example1-admin": "ts-node ts/client/src/scripts/example1-admin.ts",
"scratch": "ts-node ts/client/src/scripts/scratch/scratch.ts",
"format": "prettier --check .",
"lint": "eslint . --ext ts --ext tsx --ext js --quiet",
"type-check": "tsc --pretty --noEmit",
"prepare": "yarn build"
"typecheck": "tsc --noEmit --pretty",
"prebuild": "npm run clean",
"prepublishOnly": "npm run validate && npm run build",
"validate": "npm run typecheck && npm run test && npm run lint && npm run format-check"
},
"author": {
"name": "Blockworks Foundation",
"email": "hello@blockworks.foundation",
"url": "https://blockworks.foundation"
},
"files": [
"dist"
],
"devDependencies": {
"@tsconfig/recommended": "^1.0.1",
"@types/bs58": "^4.0.1",
@ -57,5 +61,8 @@
"big.js": "^6.1.1",
"bs58": "^5.0.0"
},
"peerDependencies": {
"@solana/spl-token-swap": "^0.2.0"
},
"license": "MIT"
}

View File

@ -1,6 +1,5 @@
import { PublicKey, TransactionSignature } from '@solana/web3.js';
import BN from 'bn.js';
import { MangoClient } from '../client';
import { I80F48, I80F48Dto } from './I80F48';
export class StubOracle {

View File

@ -1,6 +1,3 @@
import { ORCA_TOKEN_SWAP_ID_DEVNET } from '@orca-so/sdk';
import { orcaDevnetPoolConfigs } from '@orca-so/sdk/dist/constants/devnet/pools';
import { OrcaPoolConfig as OrcaDevnetPoolConfig } from '@orca-so/sdk/dist/public/devnet/pools';
import { AnchorProvider, BN, Program, Provider } from '@project-serum/anchor';
import { getFeeRates, getFeeTier, Market } from '@project-serum/serum';
import { Order } from '@project-serum/serum/lib/market';
@ -10,7 +7,6 @@ import {
WRAPPED_SOL_MINT,
} from '@project-serum/serum/lib/token-instructions';
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
import { TokenSwap } from '@solana/spl-token-swap';
import {
AccountMeta,
Keypair,
@ -36,6 +32,10 @@ import {
Serum3SelfTradeBehavior,
Serum3Side,
} from './accounts/serum3';
import {
buildOrcaInstruction,
ORCA_TOKEN_SWAP_ID_DEVNET,
} from './integrations/orca/index';
import { IDL, MangoV4 } from './mango_v4';
import { MarginTradeWithdraw } from './types';
import {
@ -1120,7 +1120,7 @@ export class MangoClient {
const targetProgramId = ORCA_TOKEN_SWAP_ID_DEVNET;
const { instruction, signers } = await this.buildOrcaInstruction(
const { instruction, signers } = await buildOrcaInstruction(
targetProgramId,
inputBank,
outputBank,
@ -1224,46 +1224,4 @@ export class MangoClient {
return healthRemainingAccounts;
}
/*
Orca ix references:
swap fn: https://github.com/orca-so/typescript-sdk/blob/main/src/model/orca/pool/orca-pool.ts#L162
swap ix: https://github.com/orca-so/typescript-sdk/blob/main/src/public/utils/web3/instructions/pool-instructions.ts#L41
*/
private async buildOrcaInstruction(
orcaTokenSwapId: PublicKey,
inputBank: Bank,
outputBank: Bank,
amountInU64: BN,
minimumAmountOutU64: BN,
) {
const poolParams = orcaDevnetPoolConfigs[OrcaDevnetPoolConfig.ORCA_SOL];
const [authorityForPoolAddress] = await PublicKey.findProgramAddress(
[poolParams.address.toBuffer()],
orcaTokenSwapId,
);
const instruction = TokenSwap.swapInstruction(
poolParams.address,
authorityForPoolAddress,
inputBank.publicKey, // userTransferAuthority
inputBank.vault, // inputTokenUserAddress
poolParams.tokens[inputBank.mint.toString()].addr, // inputToken.addr
poolParams.tokens[outputBank.mint.toString()].addr, // outputToken.addr
outputBank.vault, // outputTokenUserAddress
poolParams.poolTokenMint,
poolParams.feeAccount,
null, // hostFeeAccount
orcaTokenSwapId,
TOKEN_PROGRAM_ID,
amountInU64,
minimumAmountOutU64,
);
instruction.keys[2].isSigner = false;
instruction.keys[2].isWritable = true;
return { instruction, signers: [] };
}
}

View File

@ -1,11 +1,28 @@
export { Group } from './accounts/group';
export * from './accounts/I80F48';
export {
import { Group } from './accounts/group';
import { StubOracle } from './accounts/oracle';
import {
MangoAccount,
TokenAccount,
TokenAccountDto,
} from './accounts/mangoAccount';
export { StubOracle } from './accounts/oracle';
export { Serum3Market } from './accounts/serum3';
export * from './client';
import { MANGO_V4_ID, MangoClient } from './client';
export * from './accounts/I80F48';
export {
Serum3Market,
Serum3OrderType,
Serum3SelfTradeBehavior,
Serum3Side,
} from './accounts/serum3';
export * from './constants';
export * from './integrations/orca/index';
export {
Group,
StubOracle,
MangoAccount,
TokenAccount,
TokenAccountDto,
MangoClient,
MANGO_V4_ID,
};

View File

@ -0,0 +1,197 @@
import { ORCA_TOKEN_SWAP_ID_DEVNET } from '@orca-so/sdk';
import { Connection, PublicKey } from '@solana/web3.js';
import { BN } from '@project-serum/anchor';
import {
AccountInfo,
AccountLayout,
u64,
TOKEN_PROGRAM_ID,
} from '@solana/spl-token';
import { OrcaPoolToken, PoolTokenCount } from '@orca-so/sdk';
import { orcaDevnetPoolConfigs } from '@orca-so/sdk/dist/constants/devnet/pools';
import { OrcaPoolConfig as OrcaDevnetPoolConfig } from '@orca-so/sdk/dist/public/devnet/pools';
import { OrcaPoolParams } from '@orca-so/sdk/dist/model/orca/pool/pool-types';
import { TokenSwap } from '@solana/spl-token-swap';
import * as Tokens from './tokens';
import { Bank } from '../../accounts/bank';
import { toNativeDecimals, toUiDecimals } from '../../utils';
export { ORCA_TOKEN_SWAP_ID_DEVNET };
/*
Orca ix references:
swap fn: https://github.com/orca-so/typescript-sdk/blob/main/src/model/orca/pool/orca-pool.ts#L162
swap ix: https://github.com/orca-so/typescript-sdk/blob/main/src/public/utils/web3/instructions/pool-instructions.ts#L41
*/
export const buildOrcaInstruction = async (
orcaTokenSwapId: PublicKey,
inputBank: Bank,
outputBank: Bank,
amountInU64: BN,
minimumAmountOutU64: BN,
) => {
// TODO: select the correct pool params based on passed in banks
const poolParams = orcaDevnetPoolConfigs[OrcaDevnetPoolConfig.ORCA_SOL];
const [authorityForPoolAddress] = await PublicKey.findProgramAddress(
[poolParams.address.toBuffer()],
orcaTokenSwapId,
);
const instruction = TokenSwap.swapInstruction(
poolParams.address,
authorityForPoolAddress,
inputBank.publicKey, // userTransferAuthority
inputBank.vault, // inputTokenUserAddress
poolParams.tokens[inputBank.mint.toString()].addr, // inputToken.addr
poolParams.tokens[outputBank.mint.toString()].addr, // outputToken.addr
outputBank.vault, // outputTokenUserAddress
poolParams.poolTokenMint,
poolParams.feeAccount,
null, // hostFeeAccount
orcaTokenSwapId,
TOKEN_PROGRAM_ID,
amountInU64,
minimumAmountOutU64,
);
instruction.keys[2].isSigner = false;
instruction.keys[2].isWritable = true;
return { instruction, signers: [] };
};
export const getOrcaOutputAmount = async (
connection: Connection,
inputToken: string,
outputToken: string,
amountIn: number,
): Promise<number> => {
// TODO: select the correct pool params based on passed in banks
const inputMint = Tokens.solToken;
const poolParams = getOrcaPoolParams(inputToken, outputToken);
const { inputPoolToken, outputPoolToken } = getTokens(
poolParams,
inputMint.mint.toString(),
);
const { inputTokenCount, outputTokenCount } = await getTokenCount(
connection,
poolParams,
inputPoolToken,
outputPoolToken,
);
const [poolInputAmount, poolOutputAmount] = [
inputTokenCount,
outputTokenCount,
];
const invariant = poolInputAmount.mul(poolOutputAmount);
const nativeAmountIn = toNativeDecimals(amountIn, 9);
const [newPoolOutputAmount] = ceilingDivision(
invariant,
poolInputAmount.add(nativeAmountIn),
);
const outputAmount = poolOutputAmount.sub(newPoolOutputAmount);
return toUiDecimals(outputAmount.toNumber(), 6);
};
function getTokens(poolParams: OrcaPoolParams, inputTokenId: string) {
if (poolParams.tokens[inputTokenId] == undefined) {
throw new Error('Input token not part of pool');
}
const tokenAId = poolParams.tokenIds[0];
const tokenBId = poolParams.tokenIds[1];
const forward = tokenAId == inputTokenId;
const inputOrcaToken = forward
? poolParams.tokens[tokenAId]
: poolParams.tokens[tokenBId];
const outputOrcaToken = forward
? poolParams.tokens[tokenBId]
: poolParams.tokens[tokenAId];
return { inputPoolToken: inputOrcaToken, outputPoolToken: outputOrcaToken };
}
const getOrcaPoolParams = (inputToken: string, outputToken: string) => {
return orcaDevnetPoolConfigs[OrcaDevnetPoolConfig.ORCA_SOL];
};
async function getTokenCount(
connection: Connection,
poolParams: OrcaPoolParams,
inputPoolToken: OrcaPoolToken,
outputPoolToken: OrcaPoolToken,
): Promise<PoolTokenCount> {
if (poolParams.tokens[inputPoolToken.mint.toString()] == undefined) {
throw new Error('Input token not part of pool');
}
if (poolParams.tokens[outputPoolToken.mint.toString()] == undefined) {
throw new Error('Output token not part of pool');
}
const accountInfos = await connection.getMultipleAccountsInfo([
inputPoolToken.addr,
outputPoolToken.addr,
]);
const tokens = accountInfos.map((info) =>
info != undefined ? deserializeAccount(info.data) : undefined,
);
const inputTokenAccount = tokens[0],
outputTokenAccount = tokens[1];
if (inputTokenAccount === undefined || outputTokenAccount === undefined) {
throw new Error('Unable to fetch accounts for specified tokens.');
}
return {
inputTokenCount: inputTokenAccount.amount,
outputTokenCount: outputTokenAccount.amount,
};
}
const deserializeAccount = (
data: Buffer | undefined,
): AccountInfo | undefined => {
if (data == undefined || data.length == 0) {
return undefined;
}
const accountInfo = AccountLayout.decode(data);
accountInfo.mint = new PublicKey(accountInfo.mint);
accountInfo.owner = new PublicKey(accountInfo.owner);
accountInfo.amount = u64.fromBuffer(accountInfo.amount);
return accountInfo;
};
const ZERO = new u64(0);
const ONE = new u64(1);
const ceilingDivision = (dividend: u64, divisor: u64): [u64, u64] => {
let quotient = dividend.div(divisor);
if (quotient.eq(ZERO)) {
return [ZERO, divisor];
}
let remainder = dividend.mod(divisor);
if (remainder.gt(ZERO)) {
quotient = quotient.add(ONE);
divisor = dividend.div(quotient);
remainder = dividend.mod(quotient);
if (remainder.gt(ZERO)) {
divisor = divisor.add(ONE);
}
}
return [quotient, divisor];
};

View File

@ -0,0 +1,41 @@
import { OrcaToken } from '@orca-so/sdk';
import { PublicKey } from '@solana/web3.js';
/**
* The following content is auto-generated.
*/
export const ethToken: OrcaToken = Object.freeze({
tag: 'ETH',
name: 'Ethereum',
mint: new PublicKey('Ff5JqsAYUD4vAfQUtfRprT4nXu9e28tTBZTDFMnJNdvd'),
scale: 9,
});
export const orcaToken: OrcaToken = Object.freeze({
tag: 'ORCA',
name: 'Orca',
mint: new PublicKey('orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L'),
scale: 6,
});
export const solToken: OrcaToken = Object.freeze({
tag: 'SOL',
name: 'Solana',
mint: new PublicKey('So11111111111111111111111111111111111111112'),
scale: 9,
});
export const usdcToken: OrcaToken = Object.freeze({
tag: 'USDC',
name: 'USD Coin',
mint: new PublicKey('EmXq3Ni9gfudTiyNKzzYvpnQqnJEMRw2ttnVXoJXjLo1'),
scale: 6,
});
export const usdtToken: OrcaToken = Object.freeze({
tag: 'USDT',
name: 'Tether USD',
mint: new PublicKey('6PE3Mwjzx9h8kCoBp5YPed9TFoG7du8L98yucBP5ps3x'),
scale: 6,
});

View File

@ -72,6 +72,10 @@ export function toNativeDecimals(amount: number, decimals: number): BN {
return new BN(Math.trunc(amount * Math.pow(10, decimals)));
}
export function toUiDecimals(amount: number, decimals: number): number {
return amount / Math.pow(10, decimals);
}
export function toU64(amount: number, decimals): BN {
const bn = toNativeDecimals(amount, decimals).toString();
console.log('bn', bn);

7
tsconfig.build.json Normal file
View File

@ -0,0 +1,7 @@
{
"extends": "./tsconfig",
"compilerOptions": {
"skipLibCheck": true,
"skipDefaultLibCheck": true
}
}

9
tsconfig.cjs.json Normal file
View File

@ -0,0 +1,9 @@
{
"extends": "./tsconfig.build",
"compilerOptions": {
"module": "commonjs",
"outDir": "dist/cjs",
"declaration": true,
"declarationDir": "dist/types"
}
}

View File

@ -1,18 +1,15 @@
{
"extends": "@tsconfig/recommended/tsconfig.json",
"compilerOptions": {
"outDir": "./dist",
"target": "es6",
"esModuleInterop": true,
"moduleResolution": "node",
"lib": ["es2019"],
"allowJs": true,
"checkJs": true,
"declaration": true,
"declarationMap": true,
"noImplicitAny": false,
"outDir": "./dist",
"resolveJsonModule": true,
"noImplicitAny": false,
"sourceMap": true,
"esModuleInterop": true
"skipLibCheck": true,
"target": "es2019"
},
"include": ["./ts/**/*"],
"include": ["ts/client/src"],
"exclude": ["./ts/**/*.test.js", "node_modules", "**/node_modules"]
}

133
yarn.lock
View File

@ -23,7 +23,7 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/runtime@^7.10.5", "@babel/runtime@^7.3.1":
"@babel/runtime@^7.10.5":
version "7.18.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.0.tgz#6d77142a19cb6088f0af662af1ada37a604d34ae"
integrity sha512-YMQvx/6nKEaucl0MY56mwIG483xk8SDNdlUwb2Ts6FUpr7fm85DxEmsY18LXBNhcTz6tO6JwZV8w1W06v8UKeg==
@ -37,6 +37,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.3.1":
version "7.18.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
dependencies:
regenerator-runtime "^0.13.4"
"@eslint/eslintrc@^0.4.3":
version "0.4.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
@ -206,16 +213,6 @@
bn.js "^5.1.2"
buffer-layout "^1.2.0"
"@solana/buffer-layout-utils@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca"
integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==
dependencies:
"@solana/buffer-layout" "^4.0.0"
"@solana/web3.js" "^1.32.0"
bigint-buffer "^1.1.5"
bignumber.js "^9.0.1"
"@solana/buffer-layout@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734"
@ -279,32 +276,10 @@
tweetnacl "^1.0.0"
ws "^7.0.0"
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0":
version "1.42.0"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.42.0.tgz#296e4bbab1fbfc198b3e9c3d94016c3876eb6a2c"
integrity sha512-QqGh5DWzrgsWRx4sCPDQIm3390b7buPR16tZI61slQaQwJ2ymrSXPQCe4PPTJEIlzGjCV3dkn2vpT2R32BfK2Q==
dependencies:
"@babel/runtime" "^7.12.5"
"@ethersproject/sha2" "^5.5.0"
"@solana/buffer-layout" "^4.0.0"
"@solana/buffer-layout-utils" "^0.2.0"
bn.js "^5.0.0"
borsh "^0.7.0"
bs58 "^4.0.1"
buffer "6.0.1"
cross-fetch "^3.1.4"
fast-stable-stringify "^1.0.0"
jayson "^3.4.4"
js-sha3 "^0.8.0"
rpc-websockets "^7.4.2"
secp256k1 "^4.0.2"
superstruct "^0.14.2"
tweetnacl "^1.0.0"
"@solana/web3.js@^1.20.0", "@solana/web3.js@^1.24.1", "@solana/web3.js@^1.42.0":
version "1.43.1"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.43.1.tgz#f0cfffe7feb798563440f9ca0b0e9ba099e13967"
integrity sha512-s6TRcWz3rYvxM8gg1eQmUAUJQeoXIFMG9MbSWb/uRrLU0q7Xd9Ic1PNbACp1n1O0wyCogTAyFWXXPK476aIVSg==
"@solana/web3.js@^1.17.0", "@solana/web3.js@^1.20.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.24.1", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.42.0":
version "1.43.6"
resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.43.6.tgz#f18eb7f6fc86562aeaa527a25560a25405318dd2"
integrity sha512-F1Q7EOnLi5X+Ap5bAEi5PTwwXPZR+GTfIyOuWpWJfgm3GoawdP/x5lxJolDzzV5S99bNEU/rSTdxcW9EFzIiEw==
dependencies:
"@babel/runtime" "^7.12.5"
"@ethersproject/sha2" "^5.5.0"
@ -314,10 +289,10 @@
borsh "^0.7.0"
bs58 "^4.0.1"
buffer "6.0.1"
cross-fetch "^3.1.4"
fast-stable-stringify "^1.0.0"
jayson "^3.4.4"
js-sha3 "^0.8.0"
node-fetch "2"
rpc-websockets "^7.4.2"
secp256k1 "^4.0.2"
superstruct "^0.14.2"
@ -636,11 +611,6 @@ bigint-buffer@^1.1.5:
dependencies:
bindings "^1.3.0"
bignumber.js@^9.0.1:
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"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@ -905,7 +875,7 @@ create-require@^1.1.0:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
cross-fetch@^3.1.4, cross-fetch@^3.1.5:
cross-fetch@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
@ -940,7 +910,7 @@ crypto-hash@^1.2.2, crypto-hash@^1.3.0:
css-select@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
integrity sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==
dependencies:
boolbase "~1.0.0"
css-what "2.1"
@ -1059,7 +1029,7 @@ domhandler@^2.3.0:
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
integrity sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==
dependencies:
dom-serializer "0"
domelementtype "1"
@ -1200,7 +1170,7 @@ escape-string-regexp@^1.0.5:
esdoc-inject-style-plugin@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/esdoc-inject-style-plugin/-/esdoc-inject-style-plugin-1.0.0.tgz#a13597368bb9fb89c365e066495caf97a4decbb1"
integrity sha1-oTWXNou5+4nDZeBmSVyvl6Tey7E=
integrity sha512-LqSGr3YKe+vY2u6TCp9K+EEt97S78KjdJUz5PXyitHkp4nGXRSZq2ftEQJioF/WtTeGYWeQLzNAM9LihIlisqg==
dependencies:
cheerio "0.22.0"
fs-extra "1.0.0"
@ -1434,7 +1404,7 @@ flatted@^3.1.0:
fs-extra@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=
integrity sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==
dependencies:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
@ -1486,13 +1456,13 @@ get-func-name@^2.0.0:
integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
version "1.1.2"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.1"
has-symbols "^1.0.3"
get-symbol-description@^1.0.0:
version "1.0.0"
@ -1683,7 +1653,7 @@ internal-slot@^1.0.3:
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
is-bigint@^1.0.1:
version "1.0.4"
@ -1907,7 +1877,7 @@ jsonc-parser@^3.0.0:
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==
optionalDependencies:
graceful-fs "^4.1.6"
@ -1933,7 +1903,7 @@ kind-of@^6.0.2:
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==
optionalDependencies:
graceful-fs "^4.1.9"
@ -1953,7 +1923,7 @@ levn@^0.4.1:
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
dependencies:
graceful-fs "^4.1.2"
parse-json "^4.0.0"
@ -1970,37 +1940,37 @@ locate-path@^6.0.0:
lodash.assignin@^4.0.9:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2"
integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI=
integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==
lodash.bind@^4.1.4:
version "4.2.1"
resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=
integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==
lodash.defaults@^4.0.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==
lodash.filter@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=
integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==
lodash.flatten@^4.2.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
lodash.foreach@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==
lodash.map@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=
integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==
lodash.merge@^4.4.0, lodash.merge@^4.6.2:
version "4.6.2"
@ -2010,22 +1980,22 @@ lodash.merge@^4.4.0, lodash.merge@^4.6.2:
lodash.pick@^4.2.1:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==
lodash.reduce@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=
integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==
lodash.reject@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415"
integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=
integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==
lodash.some@^4.4.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=
integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==
lodash.truncate@^4.4.2:
version "4.4.2"
@ -2084,7 +2054,7 @@ marked@^4.0.10:
memorystream@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==
merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
@ -2217,7 +2187,7 @@ node-addon-api@^2.0.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
node-fetch@2.6.7, node-fetch@^2.2.0:
node-fetch@2, node-fetch@2.6.7, node-fetch@^2.2.0:
version "2.6.7"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
@ -2272,9 +2242,9 @@ object-assign@^4.0.1:
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
object-inspect@^1.12.0, object-inspect@^1.9.0:
version "1.12.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.1.tgz#28a661153bad7e470e4b01479ef1cb91ce511191"
integrity sha512-Y/jF6vnvEtOPGiKD1+q+X0CiUYRQtEHp89MLLUJ7TUivtH8Ugn2+3A7Rynqk7BRsAoqeOQWnFnjpDrKSxDgIGA==
version "1.12.2"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
object-keys@^1.1.1:
version "1.1.1"
@ -2339,7 +2309,7 @@ parent-module@^1.0.0:
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
dependencies:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
@ -2357,7 +2327,7 @@ path-is-absolute@^1.0.0:
path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
path-key@^3.1.0:
version "3.1.1"
@ -2399,7 +2369,7 @@ pidtree@^0.3.0:
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
prelude-ls@^1.2.1:
version "1.2.1"
@ -2444,7 +2414,7 @@ randombytes@^2.1.0:
read-pkg@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
dependencies:
load-json-file "^4.0.0"
normalize-package-data "^2.3.2"
@ -2577,7 +2547,7 @@ serialize-javascript@6.0.0:
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
dependencies:
shebang-regex "^1.0.0"
@ -2591,7 +2561,7 @@ shebang-command@^2.0.0:
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
shebang-regex@^3.0.0:
version "3.0.0"
@ -3082,7 +3052,12 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
ws@^7.0.0, ws@^7.4.5:
ws@^7.0.0:
version "7.5.8"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a"
integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==
ws@^7.4.5:
version "7.5.7"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67"
integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==