@liberfi.io/react-launchpad 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/index.d.mts +529 -0
- package/dist/index.d.ts +529 -0
- package/dist/index.js +797 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +779 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/curve/BaseCurve.ts","../src/curve/ConstantProductCurve.ts","../src/types.ts","../src/curve/FixedPriceCurve.ts","../src/curve/LinearPriceCurve.ts","../src/curve/Curve.ts","../src/create-token-runtime.ts","../src/in-memory-launchpad-adapter.ts","../src/index.ts"],"names":["LaunchPadPlatform","CurveType","BigNumber","amountLessFeeB"],"mappings":"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","file":"index.mjs","sourcesContent":["import type BigNumber from \"bignumber.js\";\nimport { LaunchPadPoolInfo, PoolBaseAmount } from \"../types\";\n\nfunction unimplemented(args: unknown): never {\n void args;\n throw new Error(\"not implemented\");\n}\n\nexport class BaseCurve {\n static getPoolInitPriceByPool(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static getPoolInitPriceByInit(args: {\n a: BigNumber.Value;\n b: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static getPoolPrice(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static getPoolEndPrice(args: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static getPoolEndPriceReal(args: {\n poolInfo: LaunchPadPoolInfo;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static getInitParam(args: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n }): { a: BigNumber.Value; b: BigNumber.Value; c: BigNumber.Value } {\n return unimplemented(args);\n }\n\n static buyExactIn(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static buyExactOut(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static sellExactIn(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n\n static sellExactOut(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return unimplemented(args);\n }\n}\n","import { BigNumber } from \"bignumber.js\";\nimport { LaunchPadPoolInfo, PoolBaseAmount } from \"../types\";\nimport { BaseCurve } from \"./BaseCurve\";\n\nexport class ConstantProductCurve extends BaseCurve {\n static getPoolInitPriceByPool({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return new BigNumber(poolInfo.virtualB)\n .div(poolInfo.virtualA)\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolInitPriceByInit({\n a,\n b,\n decimalA,\n decimalB,\n }: {\n a: BigNumber.Value;\n b: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return new BigNumber(b).div(a).times(10 ** (decimalA - decimalB));\n }\n\n static getPoolPrice({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return new BigNumber(new BigNumber(poolInfo.virtualB).plus(poolInfo.realB))\n .div(new BigNumber(poolInfo.virtualA).minus(poolInfo.realA))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolEndPrice({\n supply,\n totalSell,\n totalLockedAmount,\n totalFundRaising,\n migrateFee,\n decimalA,\n decimalB,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return new BigNumber(new BigNumber(totalFundRaising).minus(migrateFee))\n .div(new BigNumber(supply).minus(totalSell).minus(totalLockedAmount))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolEndPriceReal({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n const allSellToken = new BigNumber(poolInfo.totalSellA).minus(poolInfo.realA);\n const buyAllTokenUseB = new BigNumber(poolInfo.totalFundRaisingB).minus(poolInfo.realB);\n\n return new BigNumber(\n new BigNumber(poolInfo.virtualB).plus(poolInfo.realB).plus(buyAllTokenUseB),\n )\n .div(new BigNumber(poolInfo.virtualA).minus(new BigNumber(poolInfo.realA).plus(allSellToken)))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getInitParam({\n supply,\n totalFundRaising,\n totalSell,\n totalLockedAmount,\n migrateFee,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n }): { a: BigNumber.Value; b: BigNumber.Value; c: BigNumber.Value } {\n if (new BigNumber(supply).lte(totalSell)) throw Error(\"supply need gt total sell\");\n\n const supplyMinusSellLocked = new BigNumber(supply).minus(totalSell).minus(totalLockedAmount);\n if (supplyMinusSellLocked.lte(new BigNumber(0))) throw Error(\"supplyMinusSellLocked <= 0\");\n\n const tfMinusMf = new BigNumber(totalFundRaising).minus(migrateFee);\n if (tfMinusMf.lte(0)) throw Error(\"tfMinusMf <= 0\");\n\n const numerator = tfMinusMf.times(totalSell).times(totalSell).div(supplyMinusSellLocked);\n const denominator = tfMinusMf\n .times(totalSell)\n .div(supplyMinusSellLocked)\n .minus(totalFundRaising);\n\n if (denominator.lt(0)) throw Error(\"supply/totalSell/totalLockedAmount diff too high\");\n\n const x0 = numerator.div(denominator);\n const y0 = new BigNumber(totalFundRaising).times(totalFundRaising).div(denominator);\n\n if (x0.lt(0) || y0.lt(0)) throw Error(\"invalid input 0\");\n\n return {\n a: x0,\n b: y0,\n c: totalSell,\n };\n }\n\n static buyExactIn({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountOut({\n amountIn: amount,\n inputReserve: new BigNumber(poolInfo.virtualB).plus(poolInfo.realB),\n outputReserve: new BigNumber(poolInfo.virtualA).minus(poolInfo.realA),\n });\n }\n\n static buyExactOut({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountIn({\n amountOut: amount,\n inputReserve: new BigNumber(poolInfo.virtualB).plus(poolInfo.realB),\n outputReserve: new BigNumber(poolInfo.virtualA).minus(poolInfo.realA),\n });\n }\n\n static sellExactIn({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountOut({\n amountIn: amount,\n inputReserve: new BigNumber(poolInfo.virtualA).minus(poolInfo.realA),\n outputReserve: new BigNumber(poolInfo.virtualB).plus(poolInfo.realB),\n });\n }\n\n static sellExactOut({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountIn({\n amountOut: amount,\n inputReserve: new BigNumber(poolInfo.virtualA).minus(poolInfo.realA),\n outputReserve: new BigNumber(poolInfo.virtualB).plus(poolInfo.realB),\n });\n }\n\n static getAmountOut({\n amountIn,\n inputReserve,\n outputReserve,\n }: {\n amountIn: BigNumber.Value;\n inputReserve: BigNumber.Value;\n outputReserve: BigNumber.Value;\n }): BigNumber.Value {\n const numerator = new BigNumber(amountIn).times(outputReserve);\n const denominator = new BigNumber(inputReserve).plus(amountIn);\n const amountOut = numerator.div(denominator);\n return amountOut;\n }\n\n static getAmountIn({\n amountOut,\n inputReserve,\n outputReserve,\n }: {\n amountOut: BigNumber.Value;\n inputReserve: BigNumber.Value;\n outputReserve: BigNumber.Value;\n }): BigNumber.Value {\n const numerator = new BigNumber(inputReserve).times(amountOut);\n const denominator = new BigNumber(outputReserve).minus(amountOut);\n const amountIn = numerator.div(denominator);\n return amountIn;\n }\n}\n","import type BigNumber from \"bignumber.js\";\nimport type { Chain } from \"@liberfi.io/types\";\n\nexport enum LaunchPadPlatform {\n PUMPFUN = \"pumpfun\",\n RAYDIUM = \"raydium\",\n}\n\nexport enum CurveType {\n CONSTANT_PRODUCT = \"constant_product\",\n FIXED_PRICE = \"fixed_price\",\n LINEAR_PRICE = \"linear_price\",\n}\n\nexport interface LaunchpadVestingSchedule {\n totalLockedAmount: BigNumber.Value;\n totalAllocatedShare: BigNumber.Value;\n cliffPeriod: number;\n unlockPeriod: number;\n startTime: number;\n}\n\nexport interface LaunchPadPoolInfo {\n platform: LaunchPadPlatform;\n creator: string;\n mintA: string;\n mintB: string;\n mintDecimalsA: number;\n mintDecimalsB: number;\n vaultA: string;\n vaultB: string;\n supply: BigNumber.Value;\n totalSellA: BigNumber.Value;\n totalFundRaisingB: BigNumber.Value;\n virtualA: BigNumber.Value;\n virtualB: BigNumber.Value;\n realA: BigNumber.Value;\n realB: BigNumber.Value;\n protocolFee: BigNumber.Value;\n platformFee: BigNumber.Value;\n migrateFee: BigNumber.Value;\n vestingSchedule: LaunchpadVestingSchedule;\n}\n\nexport interface PoolBaseAmount {\n virtualA: BigNumber.Value;\n virtualB: BigNumber.Value;\n realA: BigNumber.Value;\n realB: BigNumber.Value;\n}\n\nexport interface PoolCurvePoint {\n price: BigNumber.Value;\n totalSellSupply: BigNumber.Value;\n}\n\nexport interface LaunchPadConfigInfo {\n decimals: number;\n minSupplyA: number;\n minSellRateA: number;\n minFundRaisingB: number;\n minMigrateRateA: number;\n maxLockRate: number;\n}\n\nexport interface CreateTokenIntent {\n chain: Chain;\n name: string;\n symbol: string;\n platform: LaunchPadPlatform;\n imageUri?: string;\n description?: string;\n website?: string;\n twitter?: string;\n telegram?: string;\n metadataUri?: string;\n}\n\nexport type LaunchpadCreateStatus =\n | \"idle\"\n | \"validating\"\n | \"uploading\"\n | \"signing\"\n | \"submitting\"\n | \"succeeded\"\n | \"failed\"\n | \"rejected\";\n","import BigNumber from \"bignumber.js\";\nimport { LaunchPadPoolInfo, PoolBaseAmount } from \"../types\";\nimport { BaseCurve } from \"./BaseCurve\";\n\nexport class FixedPriceCurve extends BaseCurve {\n static getPoolInitPriceByPool({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return BigNumber(poolInfo.virtualB)\n .div(poolInfo.virtualA)\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolInitPriceByInit({\n a,\n b,\n decimalA,\n decimalB,\n }: {\n a: BigNumber.Value;\n b: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return BigNumber(b)\n .div(a)\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolPrice({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return BigNumber(poolInfo.virtualB)\n .div(poolInfo.virtualA)\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolEndPrice({\n supply,\n totalSell,\n totalLockedAmount,\n totalFundRaising,\n migrateFee,\n decimalA,\n decimalB,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return BigNumber(totalFundRaising)\n .minus(migrateFee)\n .div(BigNumber(supply).minus(totalSell).minus(totalLockedAmount))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolEndPriceReal({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n const allSellToken = BigNumber(poolInfo.totalSellA).minus(poolInfo.realA);\n const buyAllTokenUseB = BigNumber(poolInfo.totalFundRaisingB).minus(poolInfo.realB);\n\n return BigNumber(poolInfo.virtualB)\n .plus(poolInfo.realB)\n .plus(buyAllTokenUseB)\n .div(BigNumber(poolInfo.virtualA).minus(poolInfo.realA).plus(allSellToken))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getInitParam({\n supply,\n totalFundRaising,\n totalLockedAmount,\n migrateFee,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n migrateFee: BigNumber.Value;\n }): { a: BigNumber.Value; b: BigNumber.Value; c: BigNumber.Value } {\n const supplyMinusLocked = BigNumber(supply).minus(totalLockedAmount);\n\n if (supplyMinusLocked.lte(0)) throw Error(\"invalid input 1\");\n\n const denominator = BigNumber(2).times(totalFundRaising).minus(migrateFee);\n const numerator = BigNumber(totalFundRaising).times(supplyMinusLocked);\n const totalSellExpect = numerator.div(denominator);\n\n return { a: totalSellExpect, b: totalFundRaising, c: totalSellExpect };\n }\n\n static buyExactIn({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountOut({\n amountIn: amount,\n initInput: poolInfo.virtualB,\n initOutput: poolInfo.virtualA,\n });\n }\n\n static buyExactOut({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountIn({\n amountOut: amount,\n initInput: poolInfo.virtualB,\n initOutput: poolInfo.virtualA,\n });\n }\n\n static sellExactIn({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountOut({\n amountIn: amount,\n initInput: poolInfo.virtualA,\n initOutput: poolInfo.virtualB,\n });\n }\n\n static sellExactOut({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n return this.getAmountIn({\n amountOut: amount,\n initInput: poolInfo.virtualA,\n initOutput: poolInfo.virtualB,\n });\n }\n\n static getAmountOut({\n amountIn,\n initInput,\n initOutput,\n }: {\n amountIn: BigNumber.Value;\n initInput: BigNumber.Value;\n initOutput: BigNumber.Value;\n }): BigNumber.Value {\n const numerator = new BigNumber(initOutput).times(amountIn);\n const amountOut = numerator.div(initInput);\n return amountOut;\n }\n\n static getAmountIn({\n amountOut,\n initInput,\n initOutput,\n }: {\n amountOut: BigNumber.Value;\n initInput: BigNumber.Value;\n initOutput: BigNumber.Value;\n }): BigNumber.Value {\n const numerator = new BigNumber(initInput).times(amountOut);\n const amountIn = numerator.div(initOutput);\n return amountIn;\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport { LaunchPadPoolInfo, PoolBaseAmount } from \"../types\";\nimport { BaseCurve } from \"./BaseCurve\";\n\nexport class LinearPriceCurve extends BaseCurve {\n static getPoolInitPriceByPool(args: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n void args;\n return 0;\n }\n\n static getPoolInitPriceByInit(args: {\n a: BigNumber.Value;\n b: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n void args;\n return 0;\n }\n\n static getPoolPrice({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return new BigNumber(poolInfo.virtualA)\n .times(poolInfo.realA)\n .div(new BigNumber(1).shiftedBy(-64))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolEndPrice({\n supply,\n totalSell,\n totalLockedAmount,\n totalFundRaising,\n migrateFee,\n decimalA,\n decimalB,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n return new BigNumber(totalFundRaising)\n .minus(migrateFee)\n .div(new BigNumber(supply).minus(totalSell).minus(totalLockedAmount))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getPoolEndPriceReal({\n poolInfo,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n const allSellToken = new BigNumber(poolInfo.totalSellA).minus(poolInfo.realA);\n const buyAllTokenUseB = new BigNumber(poolInfo.totalFundRaisingB).minus(poolInfo.realB);\n\n return new BigNumber(poolInfo.virtualB)\n .plus(poolInfo.realB)\n .plus(buyAllTokenUseB)\n .div(new BigNumber(poolInfo.virtualA).minus(poolInfo.realA).minus(allSellToken))\n .times(10 ** (decimalA - decimalB));\n }\n\n static getInitParam({\n supply,\n totalFundRaising,\n totalLockedAmount,\n migrateFee,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n }): { a: BigNumber.Value; b: BigNumber.Value; c: BigNumber.Value } {\n const supplyMinusLocked = new BigNumber(supply).minus(totalLockedAmount);\n if (supplyMinusLocked.lte(0)) throw Error(\"supplyMinusLocked need gt 0\");\n\n const denominator = new BigNumber(totalFundRaising).times(3).minus(migrateFee);\n const numerator = new BigNumber(totalFundRaising).times(2).minus(supplyMinusLocked);\n\n const totalSellExpect = numerator.div(denominator);\n\n const totalSellSquared = totalSellExpect.times(totalSellExpect);\n const a = new BigNumber(totalFundRaising)\n .times(2)\n .times(new BigNumber(1).shiftedBy(-64))\n .div(totalSellSquared);\n\n if (!a.gt(0)) throw Error(\"a need gt 0\");\n\n const MaxU64 = new BigNumber(1).shiftedBy(-64).minus(1);\n if (!MaxU64.gt(a)) throw Error(\"a need lt u64 max\");\n\n return { a, b: 0, c: totalSellExpect };\n }\n\n static buyExactIn({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n const newQuote = new BigNumber(poolInfo.realB).plus(amount);\n const termInsideSqrt = new BigNumber(2)\n .times(newQuote)\n .times(new BigNumber(1).shiftedBy(-64))\n .div(poolInfo.virtualA);\n const sqrtTerm = new BigNumber(new BigNumber(termInsideSqrt).sqrt().toFixed(0));\n const amountOut = sqrtTerm.minus(poolInfo.realA);\n return amountOut;\n }\n\n static buyExactOut({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n const newBase = new BigNumber(poolInfo.realA).plus(amount);\n const newBaseSquared = newBase.times(newBase);\n const newQuote = new BigNumber(poolInfo.virtualA)\n .times(newBaseSquared)\n .div(new BigNumber(2).times(new BigNumber(1).shiftedBy(-64)));\n return newQuote.minus(poolInfo.realB);\n }\n\n static sellExactIn({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n const newBase = new BigNumber(poolInfo.realA).minus(amount);\n const newBaseSquared = newBase.times(newBase);\n\n const newQuote = new BigNumber(poolInfo.virtualA)\n .times(newBaseSquared)\n .div(new BigNumber(2).times(new BigNumber(1).shiftedBy(-64)));\n\n return new BigNumber(poolInfo.realB).minus(newQuote);\n }\n\n static sellExactOut({\n poolInfo,\n amount,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amount: BigNumber.Value;\n }): BigNumber.Value {\n const newB = new BigNumber(poolInfo.realB).minus(amount);\n const termInsideSqrt = new BigNumber(2)\n .times(newB)\n .times(new BigNumber(1).shiftedBy(-64))\n .div(poolInfo.virtualA);\n\n const sqrtTerm = new BigNumber(new BigNumber(termInsideSqrt).sqrt().toFixed(0));\n\n const amountIn = new BigNumber(poolInfo.realA).minus(sqrtTerm);\n\n return amountIn;\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport {\n CurveType,\n LaunchPadConfigInfo,\n LaunchPadPoolInfo,\n PoolBaseAmount,\n PoolCurvePoint,\n} from \"../types\";\nimport { BaseCurve } from \"./BaseCurve\";\nimport { ConstantProductCurve } from \"./ConstantProductCurve\";\nimport { FixedPriceCurve } from \"./FixedPriceCurve\";\nimport { LinearPriceCurve } from \"./LinearPriceCurve\";\n\nexport class Curve {\n static getCurvePreviewPoints({\n curveType,\n pointCount,\n poolInfo,\n }: {\n curveType: CurveType;\n poolInfo: LaunchPadPoolInfo;\n pointCount: number;\n }): PoolCurvePoint[] {\n return this.getPoolCurvePointByInit({\n curveType,\n pointCount,\n supply: poolInfo.supply,\n totalFundRaising: poolInfo.totalFundRaisingB,\n totalSell: poolInfo.totalSellA,\n totalLockedAmount: poolInfo.vestingSchedule.totalLockedAmount,\n migrateFee: poolInfo.migrateFee,\n decimalA: poolInfo.mintDecimalsA,\n decimalB: poolInfo.mintDecimalsB,\n });\n }\n\n static getPoolCurvePointByInit({\n curveType,\n pointCount,\n supply,\n totalFundRaising,\n totalSell,\n totalLockedAmount,\n migrateFee,\n decimalA,\n decimalB,\n }: {\n curveType: CurveType;\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n migrateFee: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n pointCount: number;\n }): PoolCurvePoint[] {\n if (pointCount < 3) throw Error(\"point count < 3\");\n\n const curve = this.getCurve(curveType);\n\n const { a, b } = curve.getInitParam({\n supply,\n totalFundRaising,\n totalSell,\n totalLockedAmount,\n migrateFee,\n });\n\n const initPrice = curve.getPoolInitPriceByInit({ a, b, decimalA, decimalB });\n\n const stepBuy = new BigNumber(totalFundRaising).div(pointCount - 1);\n\n const zero = new BigNumber(0);\n\n const returnPoints: PoolCurvePoint[] = [{ price: initPrice, totalSellSupply: 0 }];\n\n let realA = zero;\n let realB = zero;\n\n for (let i = 1; i < pointCount; i++) {\n const amountB = i !== pointCount - 1 ? stepBuy : new BigNumber(totalFundRaising).minus(realB);\n\n const itemBuy = this.buyExactIn({\n poolInfo: {\n virtualA: a,\n virtualB: b,\n realA,\n realB,\n totalFundRaisingB: totalFundRaising,\n totalSellA: totalSell,\n },\n amountB,\n protocolFeeRate: zero,\n platformFeeRate: zero,\n curveType,\n shareFeeRate: zero,\n });\n\n realA = realA.plus(itemBuy.amountA);\n realB = realB.plus(itemBuy.amountB);\n\n const nowPoolPrice = this.getPrice({\n poolInfo: { virtualA: a, virtualB: b, realA, realB },\n decimalA,\n decimalB,\n curveType,\n });\n\n returnPoints.push({\n price: nowPoolPrice,\n totalSellSupply: new BigNumber(realA).div(10 ** decimalA).toNumber(),\n });\n }\n\n return returnPoints;\n }\n\n static getPoolInitPriceByPool({\n poolInfo,\n decimalA,\n decimalB,\n curveType,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n decimalA: number;\n decimalB: number;\n curveType: CurveType;\n }): BigNumber.Value {\n const curve = this.getCurve(curveType);\n return curve.getPoolInitPriceByPool({ poolInfo, decimalA, decimalB });\n }\n\n static getPoolInitPriceByInit({\n a,\n b,\n decimalA,\n decimalB,\n curveType,\n }: {\n a: BigNumber.Value;\n b: BigNumber.Value;\n decimalA: number;\n decimalB: number;\n curveType: CurveType;\n }): BigNumber.Value {\n const curve = this.getCurve(curveType);\n return curve.getPoolInitPriceByInit({ a, b, decimalA, decimalB });\n }\n\n static getPrice({\n poolInfo,\n curveType,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n curveType: CurveType;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n const curve = this.getCurve(curveType);\n return curve.getPoolPrice({ poolInfo, decimalA, decimalB });\n }\n\n static getEndPrice({\n poolInfo,\n curveType,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo;\n curveType: CurveType;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n const curve = this.getCurve(curveType);\n return curve.getPoolPrice({ poolInfo, decimalA, decimalB });\n }\n\n static getPoolEndPriceReal({\n poolInfo,\n curveType,\n decimalA,\n decimalB,\n }: {\n poolInfo: LaunchPadPoolInfo;\n curveType: CurveType;\n decimalA: number;\n decimalB: number;\n }): BigNumber.Value {\n const curve = this.getCurve(curveType);\n return curve.getPoolEndPriceReal({ poolInfo, decimalA, decimalB });\n }\n\n static checkParam({\n supply,\n totalFundRaising,\n totalSell,\n totalLockedAmount,\n decimalsA,\n decimalsB,\n config,\n migrateType,\n }: {\n supply: BigNumber.Value;\n totalSell: BigNumber.Value;\n totalLockedAmount: BigNumber.Value;\n totalFundRaising: BigNumber.Value;\n decimalsA: number;\n decimalsB: number;\n config: LaunchPadConfigInfo;\n migrateType: \"amm\" | \"cpmm\";\n }) {\n const supplyBn = new BigNumber(supply);\n\n if (decimalsA !== config.decimals) throw Error(`decimals should be ${config.decimals}`);\n\n if (supplyBn.times(config.maxLockRate).lt(totalLockedAmount))\n throw Error(\"totalLockedAmount exceeds max lock amount\");\n\n if (new BigNumber(config.minSupplyA).shiftedBy(decimalsA).gte(supply))\n throw Error(\"supply less than min supply\");\n\n if (supplyBn.times(config.minSellRateA).gte(totalSell))\n throw Error(\"totalSell less than min sell\");\n\n if (new BigNumber(config.minFundRaisingB).shiftedBy(decimalsB).gte(totalFundRaising))\n throw Error(\"totalFundRaising less than min fund raising\");\n\n const migrateAmountBn = supplyBn.minus(totalSell).minus(totalLockedAmount);\n\n if (migrateAmountBn.lt(supplyBn.times(config.minMigrateRateA)))\n throw Error(\"migrateAmount less than min migrate amount\");\n\n const liquidity = migrateAmountBn.times(totalFundRaising).sqrt();\n\n if (migrateType === \"amm\") {\n if (liquidity.shiftedBy(-decimalsA).lte(1)) throw Error(\"insufficient liquidity\");\n } else if (migrateType === \"cpmm\") {\n if (liquidity.lte(100)) throw Error(\"insufficient liquidity\");\n } else {\n throw Error(\"invalid migrateType\");\n }\n }\n\n static buyExactIn({\n poolInfo,\n amountB,\n protocolFeeRate,\n platformFeeRate,\n curveType,\n shareFeeRate,\n }: {\n poolInfo:\n | LaunchPadPoolInfo\n | (PoolBaseAmount & { totalSellA: BigNumber.Value; totalFundRaisingB: BigNumber.Value });\n amountB: BigNumber.Value;\n protocolFeeRate: BigNumber.Value;\n platformFeeRate: BigNumber.Value;\n curveType: CurveType;\n shareFeeRate: BigNumber.Value;\n }): {\n amountA: BigNumber.Value;\n amountB: BigNumber.Value;\n splitFee: {\n platformFee: BigNumber.Value;\n shareFee: BigNumber.Value;\n protocolFee: BigNumber.Value;\n };\n } {\n const feeRate = new BigNumber(protocolFeeRate).plus(shareFeeRate).plus(platformFeeRate);\n const _totalFee = this.calculateFee({ amount: amountB, feeRate });\n\n const amountLessFeeB = new BigNumber(amountB).minus(_totalFee);\n\n const curve = this.getCurve(curveType);\n\n const _amountA = curve.buyExactIn({ poolInfo, amount: amountLessFeeB });\n\n const remainingAmountA = new BigNumber(poolInfo.totalSellA).minus(poolInfo.realA);\n\n let amountA: BigNumber.Value;\n let realAmountB: BigNumber.Value;\n let totalFee: BigNumber.Value;\n\n if (remainingAmountA.lte(_amountA)) {\n amountA = remainingAmountA;\n const amountLessFeeB = curve.buyExactOut({\n poolInfo,\n amount: amountA,\n });\n\n realAmountB = this.calculatePreFee({ postFeeAmount: amountLessFeeB, feeRate });\n totalFee = new BigNumber(realAmountB).minus(amountLessFeeB);\n } else {\n amountA = _amountA;\n realAmountB = amountB;\n totalFee = _totalFee;\n }\n\n const splitFee = this.splitFee({ totalFee, protocolFeeRate, platformFeeRate, shareFeeRate });\n\n return { amountA, amountB: realAmountB, splitFee };\n }\n\n static buyExactOut({\n poolInfo,\n amountA,\n protocolFeeRate,\n platformFeeRate,\n curveType,\n shareFeeRate,\n }: {\n poolInfo:\n | LaunchPadPoolInfo\n | (PoolBaseAmount & { totalSellA: BigNumber.Value; totalFundRaisingB: BigNumber.Value });\n amountA: BigNumber.Value;\n protocolFeeRate: BigNumber.Value;\n platformFeeRate: BigNumber.Value;\n curveType: CurveType;\n shareFeeRate: BigNumber.Value;\n }): {\n amountA: BigNumber.Value;\n amountB: BigNumber.Value;\n splitFee: {\n platformFee: BigNumber.Value;\n shareFee: BigNumber.Value;\n protocolFee: BigNumber.Value;\n };\n } {\n const remainingAmountA = new BigNumber(poolInfo.totalSellA).minus(poolInfo.realA);\n\n let realAmountA = amountA;\n if (remainingAmountA.lte(amountA)) {\n realAmountA = remainingAmountA;\n }\n\n const curve = this.getCurve(curveType);\n const amountInLessFeeB = curve.buyExactOut({ poolInfo, amount: amountA });\n\n const totalFeeRate = new BigNumber(protocolFeeRate).plus(shareFeeRate).plus(platformFeeRate);\n const amountB = this.calculatePreFee({\n postFeeAmount: amountInLessFeeB,\n feeRate: totalFeeRate,\n });\n const totalFee = new BigNumber(amountB).minus(amountInLessFeeB);\n\n const splitFee = this.splitFee({ totalFee, protocolFeeRate, platformFeeRate, shareFeeRate });\n\n return { amountA: realAmountA, amountB, splitFee };\n }\n\n static sellExactIn({\n poolInfo,\n amountA,\n protocolFeeRate,\n platformFeeRate,\n curveType,\n shareFeeRate,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amountA: BigNumber.Value;\n protocolFeeRate: BigNumber.Value;\n platformFeeRate: BigNumber.Value;\n curveType: CurveType;\n shareFeeRate: BigNumber.Value;\n }): {\n amountA: BigNumber.Value;\n amountB: BigNumber.Value;\n splitFee: {\n platformFee: BigNumber.Value;\n shareFee: BigNumber.Value;\n protocolFee: BigNumber.Value;\n };\n } {\n const curve = this.getCurve(curveType);\n\n const amountB = curve.sellExactIn({ poolInfo, amount: amountA });\n\n const totalFee = this.calculateFee({\n amount: amountB,\n feeRate: new BigNumber(protocolFeeRate).plus(shareFeeRate).plus(platformFeeRate),\n });\n const splitFee = this.splitFee({ totalFee, protocolFeeRate, platformFeeRate, shareFeeRate });\n\n return { amountA, amountB: new BigNumber(amountB).minus(totalFee), splitFee };\n }\n\n static sellExactOut({\n poolInfo,\n amountB,\n protocolFeeRate,\n platformFeeRate,\n curveType,\n shareFeeRate,\n }: {\n poolInfo: LaunchPadPoolInfo | PoolBaseAmount;\n amountB: BigNumber.Value;\n protocolFeeRate: BigNumber.Value;\n platformFeeRate: BigNumber.Value;\n curveType: CurveType;\n shareFeeRate: BigNumber.Value;\n }): {\n amountA: BigNumber.Value;\n amountB: BigNumber.Value;\n splitFee: {\n platformFee: BigNumber.Value;\n shareFee: BigNumber.Value;\n protocolFee: BigNumber.Value;\n };\n } {\n const totalFeeRate = new BigNumber(protocolFeeRate).plus(shareFeeRate).plus(platformFeeRate);\n\n const amountOutWithFeeB = this.calculatePreFee({\n postFeeAmount: amountB,\n feeRate: totalFeeRate,\n });\n\n if (new BigNumber(poolInfo.realB).lt(amountOutWithFeeB)) throw Error(\"Insufficient liquidity\");\n\n const totalFee = new BigNumber(amountOutWithFeeB).minus(amountB);\n\n const curve = Curve.getCurve(curveType);\n const amountA = curve.sellExactOut({ poolInfo, amount: amountOutWithFeeB });\n\n if (new BigNumber(amountA).gt(poolInfo.realA)) throw Error(\"Insufficient liquidity\");\n\n const splitFee = this.splitFee({ totalFee, protocolFeeRate, platformFeeRate, shareFeeRate });\n\n return { amountA, amountB, splitFee };\n }\n\n static splitFee({\n totalFee,\n protocolFeeRate,\n platformFeeRate,\n shareFeeRate,\n }: {\n totalFee: BigNumber.Value;\n protocolFeeRate: BigNumber.Value;\n platformFeeRate: BigNumber.Value;\n shareFeeRate: BigNumber.Value;\n }): { platformFee: BigNumber.Value; shareFee: BigNumber.Value; protocolFee: BigNumber.Value } {\n const totalFeeBn = new BigNumber(totalFee);\n const totalFeeRate = new BigNumber(protocolFeeRate).plus(platformFeeRate).plus(shareFeeRate);\n const platformFee = totalFeeRate.isZero()\n ? new BigNumber(0)\n : totalFeeBn.times(platformFeeRate).div(totalFeeRate);\n const shareFee = totalFeeRate.isZero()\n ? new BigNumber(0)\n : totalFeeBn.times(shareFeeRate).div(totalFeeRate);\n const protocolFee = totalFeeBn.minus(platformFee).minus(shareFee);\n return { platformFee, shareFee, protocolFee };\n }\n\n static calculateFee({\n amount,\n feeRate,\n }: {\n amount: BigNumber.Value;\n feeRate: BigNumber.Value;\n }): BigNumber.Value {\n return new BigNumber(amount).times(feeRate);\n }\n\n static calculatePreFee({\n postFeeAmount,\n feeRate,\n }: {\n postFeeAmount: BigNumber.Value;\n feeRate: BigNumber.Value;\n }): BigNumber.Value {\n if (new BigNumber(feeRate).isZero()) return postFeeAmount;\n return new BigNumber(postFeeAmount).div(new BigNumber(feeRate).plus(1));\n }\n\n static getCurve(curveType: CurveType): typeof BaseCurve {\n switch (curveType) {\n case CurveType.CONSTANT_PRODUCT:\n return ConstantProductCurve;\n case CurveType.FIXED_PRICE:\n return FixedPriceCurve;\n case CurveType.LINEAR_PRICE:\n return LinearPriceCurve;\n }\n }\n}\n","import type { CreateTokenIntent, LaunchpadCreateStatus } from \"./types\";\n\nexport interface LaunchpadCreateSnapshot {\n status: LaunchpadCreateStatus;\n intent?: CreateTokenIntent;\n txHash?: string;\n error?: Error;\n}\n\nexport interface LaunchpadUploadPort {\n upload(intent: CreateTokenIntent): Promise<string>;\n}\n\nexport interface LaunchpadSignerPort {\n sign(payload: string): Promise<string>;\n}\n\nexport interface LaunchpadExecutionPort {\n submit(signed: string, intent: CreateTokenIntent): Promise<{ txHash: string }>;\n}\n\nexport interface LaunchpadCreateRuntime {\n snapshot(): LaunchpadCreateSnapshot;\n submit(intent: CreateTokenIntent): Promise<LaunchpadCreateSnapshot>;\n}\n\nexport function validateCreateTokenIntent(intent: CreateTokenIntent): void {\n if (!intent.name.trim()) throw new Error(\"name required\");\n if (!intent.symbol.trim()) throw new Error(\"symbol required\");\n if (intent.symbol.length > 12) throw new Error(\"symbol too long\");\n}\n\nexport function createLaunchpadCreateRuntime(options: {\n upload?: LaunchpadUploadPort;\n signer?: LaunchpadSignerPort;\n execution: LaunchpadExecutionPort;\n onChange?: (snapshot: LaunchpadCreateSnapshot) => void;\n}): LaunchpadCreateRuntime {\n let current: LaunchpadCreateSnapshot = { status: \"idle\" };\n const set = (next: LaunchpadCreateSnapshot) => {\n current = next;\n options.onChange?.(next);\n return next;\n };\n\n return {\n snapshot() {\n return current;\n },\n async submit(intent) {\n set({ status: \"validating\", intent });\n try {\n validateCreateTokenIntent(intent);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n return set({ status: \"failed\", intent, error: err });\n }\n\n let imageUri = intent.imageUri ?? \"\";\n if (options.upload) {\n set({ status: \"uploading\", intent });\n try {\n imageUri = await options.upload.upload(intent);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n return set({ status: \"failed\", intent, error: err });\n }\n }\n\n if (!options.signer) {\n return set({\n status: \"rejected\",\n intent,\n error: new Error(\"missing signer\"),\n });\n }\n\n set({ status: \"signing\", intent: { ...intent, imageUri } });\n let signed: string;\n try {\n signed = await options.signer.sign(imageUri || intent.symbol);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n return set({ status: \"rejected\", intent, error: err });\n }\n\n set({ status: \"submitting\", intent });\n try {\n const result = await options.execution.submit(signed, intent);\n return set({ status: \"succeeded\", intent, txHash: result.txHash });\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n return set({ status: \"failed\", intent, error: err });\n }\n },\n };\n}\n","import type {\n LaunchpadExecutionPort,\n LaunchpadSignerPort,\n LaunchpadUploadPort,\n} from \"./create-token-runtime\";\n\nexport function createInMemoryLaunchpadPorts(options: {\n uploadError?: Error;\n signError?: Error;\n submitError?: Error;\n timeout?: boolean;\n} = {}): {\n upload: LaunchpadUploadPort;\n signer: LaunchpadSignerPort;\n execution: LaunchpadExecutionPort;\n} {\n return {\n upload: {\n async upload() {\n if (options.uploadError) throw options.uploadError;\n return \"ipfs://memory\";\n },\n },\n signer: {\n async sign(payload) {\n if (options.signError) throw options.signError;\n return `signed:${payload}`;\n },\n },\n execution: {\n async submit() {\n if (options.timeout) throw new Error(\"submit timeout\");\n if (options.submitError) throw options.submitError;\n return { txHash: \"tx-memory\" };\n },\n },\n };\n}\n","import {\n createContext,\n createElement,\n useContext,\n type PropsWithChildren,\n} from \"react\";\n\nexport const PACKAGE_NAME = \"@liberfi.io/react-launchpad\" as const;\n\nexport { Curve } from \"./curve\";\nexport {\n BaseCurve,\n ConstantProductCurve,\n FixedPriceCurve,\n LinearPriceCurve,\n} from \"./curve\";\nexport {\n CurveType,\n LaunchPadPlatform,\n type CreateTokenIntent,\n type LaunchPadConfigInfo,\n type LaunchPadPoolInfo,\n type LaunchpadCreateStatus,\n type PoolCurvePoint,\n} from \"./types\";\nexport {\n createLaunchpadCreateRuntime,\n validateCreateTokenIntent,\n} from \"./create-token-runtime\";\nexport type {\n LaunchpadCreateRuntime,\n LaunchpadCreateSnapshot,\n LaunchpadExecutionPort,\n LaunchpadSignerPort,\n LaunchpadUploadPort,\n} from \"./create-token-runtime\";\nexport { createInMemoryLaunchpadPorts } from \"./in-memory-launchpad-adapter\";\n\nconst ReadyContext = createContext(true);\n\nexport function LaunchpadProvider({ children }: PropsWithChildren) {\n return createElement(ReadyContext.Provider, { value: true }, children);\n}\n\nexport function useLaunchpadReady(): boolean {\n return useContext(ReadyContext);\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@liberfi.io/react-launchpad",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Launchpad domain runtime and React bindings",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/index.d.mts",
|
|
12
|
+
"default": "./dist/index.mjs"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@tanstack/react-query": ">=5",
|
|
26
|
+
"react": ">=18",
|
|
27
|
+
"react-dom": ">=18"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"bignumber.js": "^9.1.2",
|
|
31
|
+
"@liberfi.io/types": "0.4.74",
|
|
32
|
+
"@liberfi.io/utils": "0.2.73"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@tanstack/react-query": "^5.90.2",
|
|
36
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
37
|
+
"@testing-library/react": "^16.3.0",
|
|
38
|
+
"@types/jest": "^30.0.0",
|
|
39
|
+
"@types/react": "^19.1.13",
|
|
40
|
+
"@types/react-dom": "^19.1.9",
|
|
41
|
+
"jest": "^30.2.0",
|
|
42
|
+
"jest-environment-jsdom": "^30.2.0",
|
|
43
|
+
"react": "^19.1.1",
|
|
44
|
+
"react-dom": "^19.1.1",
|
|
45
|
+
"rimraf": "^5.0.5",
|
|
46
|
+
"ts-jest": "^29.4.5",
|
|
47
|
+
"tsup": "^8.5.0",
|
|
48
|
+
"typescript": "^5.9.2",
|
|
49
|
+
"tsconfig": "0.1.257"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"dev": "tsup --watch",
|
|
56
|
+
"build": "rimraf -rf dist && tsup",
|
|
57
|
+
"test": "jest --config jest.config.cjs --runInBand --detectOpenHandles",
|
|
58
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
59
|
+
"lint": "eslint src"
|
|
60
|
+
}
|
|
61
|
+
}
|