sdk/js: esm and cjs builds

Change-Id: I9ddb372ac872675f5b906d523ff5237e4f65ecb1
This commit is contained in:
Evan Gray 2021-11-21 19:18:37 -05:00
parent 8ea4e9889e
commit f085e4e15c
17 changed files with 115 additions and 99 deletions

View File

@ -1,7 +1,7 @@
import { CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk"; import { CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk";
import migrateTokensTx from "@certusone/wormhole-sdk/lib/migration/migrateTokens"; import migrateTokensTx from "@certusone/wormhole-sdk/lib/esm/migration/migrateTokens";
import getPoolAddress from "@certusone/wormhole-sdk/lib/migration/poolAddress"; import getPoolAddress from "@certusone/wormhole-sdk/lib/esm/migration/poolAddress";
import getToCustodyAddress from "@certusone/wormhole-sdk/lib/migration/toCustodyAddress"; import getToCustodyAddress from "@certusone/wormhole-sdk/lib/esm/migration/toCustodyAddress";
import { makeStyles, Typography } from "@material-ui/core"; import { makeStyles, Typography } from "@material-ui/core";
import { import {
ASSOCIATED_TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID,

View File

@ -10,7 +10,7 @@ import {
getOriginalAssetEth, getOriginalAssetEth,
getOriginalAssetSol, getOriginalAssetSol,
WormholeWrappedNFTInfo, WormholeWrappedNFTInfo,
} from "@certusone/wormhole-sdk/lib/nft_bridge"; } from "@certusone/wormhole-sdk/lib/esm/nft_bridge";
import { import {
Button, Button,
Card, Card,

View File

@ -290,7 +290,7 @@ export default function Recovery() {
(async () => { (async () => {
try { try {
const { parse_vaa } = await import( const { parse_vaa } = await import(
"@certusone/wormhole-sdk/lib/solana/core/bridge" "@certusone/wormhole-sdk/lib/esm/solana/core/bridge"
); );
const parsedVAA = parse_vaa(hexToUint8Array(recoverySignedVAA)); const parsedVAA = parse_vaa(hexToUint8Array(recoverySignedVAA));
if (!cancelled) { if (!cancelled) {

View File

@ -4,7 +4,7 @@ import {
NFTImplementation, NFTImplementation,
TokenImplementation, TokenImplementation,
} from "@certusone/wormhole-sdk"; } from "@certusone/wormhole-sdk";
import { WormholeAbi__factory } from "@certusone/wormhole-sdk/lib/ethers-contracts/abi"; import { WormholeAbi__factory } from "@certusone/wormhole-sdk/lib/esm/ethers-contracts/abi";
import { getAddress as getEthAddress } from "@ethersproject/address"; import { getAddress as getEthAddress } from "@ethersproject/address";
import React, { useCallback } from "react"; import React, { useCallback } from "react";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";

View File

@ -11,7 +11,7 @@ import {
import { import {
getOriginalAssetEth as getOriginalAssetEthNFT, getOriginalAssetEth as getOriginalAssetEthNFT,
getOriginalAssetSol as getOriginalAssetSolNFT, getOriginalAssetSol as getOriginalAssetSolNFT,
} from "@certusone/wormhole-sdk/lib/nft_bridge"; } from "@certusone/wormhole-sdk/lib/esm/nft_bridge";
import { Connection } from "@solana/web3.js"; import { Connection } from "@solana/web3.js";
import { LCDClient } from "@terra-money/terra.js"; import { LCDClient } from "@terra-money/terra.js";
import { useEffect } from "react"; import { useEffect } from "react";

View File

@ -11,7 +11,7 @@ import {
import { import {
getForeignAssetEth as getForeignAssetEthNFT, getForeignAssetEth as getForeignAssetEthNFT,
getForeignAssetSol as getForeignAssetSolNFT, getForeignAssetSol as getForeignAssetSolNFT,
} from "@certusone/wormhole-sdk/lib/nft_bridge"; } from "@certusone/wormhole-sdk/lib/esm/nft_bridge";
import { BigNumber } from "@ethersproject/bignumber"; import { BigNumber } from "@ethersproject/bignumber";
import { arrayify } from "@ethersproject/bytes"; import { arrayify } from "@ethersproject/bytes";
import { Connection } from "@solana/web3.js"; import { Connection } from "@solana/web3.js";

View File

@ -12,7 +12,7 @@ import {
isNFTVAASolanaNative, isNFTVAASolanaNative,
redeemOnEth, redeemOnEth,
redeemOnSolana, redeemOnSolana,
} from "@certusone/wormhole-sdk/lib/nft_bridge"; } from "@certusone/wormhole-sdk/lib/esm/nft_bridge";
import { arrayify } from "@ethersproject/bytes"; import { arrayify } from "@ethersproject/bytes";
import { Alert } from "@material-ui/lab"; import { Alert } from "@material-ui/lab";
import { WalletContextState } from "@solana/wallet-adapter-react"; import { WalletContextState } from "@solana/wallet-adapter-react";
@ -106,7 +106,7 @@ async function solana(
const isNative = await isNFTVAASolanaNative(signedVAA); const isNative = await isNFTVAASolanaNative(signedVAA);
if (!isNative) { if (!isNative) {
const { parse_vaa } = await import( const { parse_vaa } = await import(
"@certusone/wormhole-sdk/lib/solana/core/bridge" "@certusone/wormhole-sdk/lib/esm/solana/core/bridge"
); );
const parsedVAA = parse_vaa(signedVAA); const parsedVAA = parse_vaa(signedVAA);
const { originChain, originAddress, tokenId } = parseNFTPayload( const { originChain, originAddress, tokenId } = parseNFTPayload(

View File

@ -11,7 +11,7 @@ import {
import { import {
transferFromEth, transferFromEth,
transferFromSolana, transferFromSolana,
} from "@certusone/wormhole-sdk/lib/nft_bridge"; } from "@certusone/wormhole-sdk/lib/esm/nft_bridge";
import { Alert } from "@material-ui/lab"; import { Alert } from "@material-ui/lab";
import { WalletContextState } from "@solana/wallet-adapter-react"; import { WalletContextState } from "@solana/wallet-adapter-react";
import { Connection } from "@solana/web3.js"; import { Connection } from "@solana/web3.js";

View File

@ -13,7 +13,7 @@ import {
getOriginalAssetEth as getOriginalAssetEthNFT, getOriginalAssetEth as getOriginalAssetEthNFT,
getOriginalAssetSol as getOriginalAssetSolNFT, getOriginalAssetSol as getOriginalAssetSolNFT,
WormholeWrappedNFTInfo, WormholeWrappedNFTInfo,
} from "@certusone/wormhole-sdk/lib/nft_bridge"; } from "@certusone/wormhole-sdk/lib/esm/nft_bridge";
import { Web3Provider } from "@certusone/wormhole-sdk/node_modules/@ethersproject/providers"; import { Web3Provider } from "@certusone/wormhole-sdk/node_modules/@ethersproject/providers";
import { ethers } from "@certusone/wormhole-sdk/node_modules/ethers"; import { ethers } from "@certusone/wormhole-sdk/node_modules/ethers";
import { Connection } from "@solana/web3.js"; import { Connection } from "@solana/web3.js";

View File

@ -1,11 +1,15 @@
# Changelog # Changelog
## 0.0.11 ## 0.1.0
### Added ### Added
separate cjs and esm builds
updateWrappedOnSolana updateWrappedOnSolana
top-level export getSignedVAAWithRetry
## 0.0.10 ## 0.0.10
### Added ### Added

View File

@ -1,19 +1,19 @@
{ {
"name": "@certusone/wormhole-sdk", "name": "@certusone/wormhole-sdk",
"version": "0.0.10", "version": "0.1.0",
"description": "SDK for interacting with Wormhole", "description": "SDK for interacting with Wormhole",
"homepage": "https://wormholenetwork.com", "homepage": "https://wormholenetwork.com",
"main": "lib/index.js", "main": "./lib/cjs/index.js",
"types": "lib/index.d.ts", "module": "./lib/esm/index.js",
"files": [ "files": [
"lib/**/*" "./lib/**/*"
], ],
"repository": "https://github.com/certusone/wormhole/tree/dev.v2/sdk/js", "repository": "https://github.com/certusone/wormhole/tree/dev.v2/sdk/js",
"scripts": { "scripts": {
"build-contracts": "npm run build --prefix ../../ethereum && node scripts/copyContracts.js && typechain --target=ethers-v5 --out-dir=src/ethers-contracts contracts/*.json", "build-contracts": "npm run build --prefix ../../ethereum && node scripts/copyContracts.js && typechain --target=ethers-v5 --out-dir=src/ethers-contracts contracts/*.json",
"build-abis": "typechain --target=ethers-v5 --out-dir=src/ethers-contracts/abi src/abi/Wormhole.abi.json", "build-abis": "typechain --target=ethers-v5 --out-dir=src/ethers-contracts/abi src/abi/Wormhole.abi.json",
"build-deps": "npm run build-abis && npm run build-contracts", "build-deps": "npm run build-abis && npm run build-contracts",
"build-lib": "tsc && node scripts/copyEthersTypes.js && node scripts/copyWasm.js", "build-lib": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && node scripts/copyEthersTypes.js && node scripts/copyWasm.js",
"build-all": "npm run build-deps && npm run build-lib", "build-all": "npm run build-deps && npm run build-lib",
"test": "jest --config jestconfig.json --verbose", "test": "jest --config jestconfig.json --verbose",
"build": "npm run build-all", "build": "npm run build-all",

View File

@ -1,9 +1,10 @@
const fs = require("fs"); const fs = require("fs");
["lib/esm", "lib/cjs"].forEach((buildPath) => {
fs.readdirSync("src/ethers-contracts").forEach((file) => { fs.readdirSync("src/ethers-contracts").forEach((file) => {
if (file.endsWith(".d.ts")) { if (file.endsWith(".d.ts")) {
fs.copyFileSync( fs.copyFileSync(
`src/ethers-contracts/${file}`, `src/ethers-contracts/${file}`,
`lib/ethers-contracts/${file}` `${buildPath}/ethers-contracts/${file}`
); );
} }
}); });
@ -12,7 +13,8 @@ fs.readdirSync("src/ethers-contracts/abi").forEach((file) => {
if (file.endsWith(".d.ts")) { if (file.endsWith(".d.ts")) {
fs.copyFileSync( fs.copyFileSync(
`src/ethers-contracts/abi/${file}`, `src/ethers-contracts/abi/${file}`,
`lib/ethers-contracts/abi/${file}` `${buildPath}/ethers-contracts/abi/${file}`
); );
} }
}); });
});

View File

@ -1,65 +1,67 @@
const fs = require("fs"); const fs = require("fs");
["lib/esm", "lib/cjs"].forEach((buildPath) => {
fs.copyFileSync( fs.copyFileSync(
"src/solana/core/bridge_bg.wasm", `src/solana/core/bridge_bg.wasm`,
"lib/solana/core/bridge_bg.wasm" `${buildPath}/solana/core/bridge_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/core-node/bridge_bg.wasm", `src/solana/core-node/bridge_bg.wasm`,
"lib/solana/core-node/bridge_bg.wasm" `${buildPath}/solana/core-node/bridge_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/core/bridge_bg.wasm.d.ts", `src/solana/core/bridge_bg.wasm.d.ts`,
"lib/solana/core/bridge_bg.wasm.d.ts" `${buildPath}/solana/core/bridge_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/core-node/bridge_bg.wasm.d.ts", `src/solana/core-node/bridge_bg.wasm.d.ts`,
"lib/solana/core-node/bridge_bg.wasm.d.ts" `${buildPath}/solana/core-node/bridge_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/nft/nft_bridge_bg.wasm", `src/solana/nft/nft_bridge_bg.wasm`,
"lib/solana/nft/nft_bridge_bg.wasm" `${buildPath}/solana/nft/nft_bridge_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/nft-node/nft_bridge_bg.wasm", `src/solana/nft-node/nft_bridge_bg.wasm`,
"lib/solana/nft-node/nft_bridge_bg.wasm" `${buildPath}/solana/nft-node/nft_bridge_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/nft/nft_bridge_bg.wasm.d.ts", `src/solana/nft/nft_bridge_bg.wasm.d.ts`,
"lib/solana/nft/nft_bridge_bg.wasm.d.ts" `${buildPath}/solana/nft/nft_bridge_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/nft-node/nft_bridge_bg.wasm.d.ts", `src/solana/nft-node/nft_bridge_bg.wasm.d.ts`,
"lib/solana/nft-node/nft_bridge_bg.wasm.d.ts" `${buildPath}/solana/nft-node/nft_bridge_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/token/token_bridge_bg.wasm", `src/solana/token/token_bridge_bg.wasm`,
"lib/solana/token/token_bridge_bg.wasm" `${buildPath}/solana/token/token_bridge_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/token-node/token_bridge_bg.wasm", `src/solana/token-node/token_bridge_bg.wasm`,
"lib/solana/token-node/token_bridge_bg.wasm" `${buildPath}/solana/token-node/token_bridge_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/token/token_bridge_bg.wasm.d.ts", `src/solana/token/token_bridge_bg.wasm.d.ts`,
"lib/solana/token/token_bridge_bg.wasm.d.ts" `${buildPath}/solana/token/token_bridge_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/token-node/token_bridge_bg.wasm.d.ts", `src/solana/token-node/token_bridge_bg.wasm.d.ts`,
"lib/solana/token-node/token_bridge_bg.wasm.d.ts" `${buildPath}/solana/token-node/token_bridge_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/migration/wormhole_migration_bg.wasm", `src/solana/migration/wormhole_migration_bg.wasm`,
"lib/solana/migration/wormhole_migration_bg.wasm" `${buildPath}/solana/migration/wormhole_migration_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/migration-node/wormhole_migration_bg.wasm", `src/solana/migration-node/wormhole_migration_bg.wasm`,
"lib/solana/migration-node/wormhole_migration_bg.wasm" `${buildPath}/solana/migration-node/wormhole_migration_bg.wasm`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/migration/wormhole_migration_bg.wasm.d.ts", `src/solana/migration/wormhole_migration_bg.wasm.d.ts`,
"lib/solana/migration/wormhole_migration_bg.wasm.d.ts" `${buildPath}/solana/migration/wormhole_migration_bg.wasm.d.ts`
); );
fs.copyFileSync( fs.copyFileSync(
"src/solana/migration-node/wormhole_migration_bg.wasm.d.ts", `src/solana/migration-node/wormhole_migration_bg.wasm.d.ts`,
"lib/solana/migration-node/wormhole_migration_bg.wasm.d.ts" `${buildPath}/solana/migration-node/wormhole_migration_bg.wasm.d.ts`
); );
});

View File

@ -1 +1,2 @@
export * from "./getSignedVAA"; export * from "./getSignedVAA";
export * from "./getSignedVAAWithRetry";

View File

@ -383,7 +383,7 @@ describe("Integration Tests", () => {
} catch (e) { } catch (e) {
console.error(e); console.error(e);
done( done(
"An error occurred while trying to attest from Solana to Ethereum" "An error occurred while trying to send from Solana to Ethereum"
); );
} }
})(); })();

7
sdk/js/tsconfig-cjs.json Normal file
View File

@ -0,0 +1,7 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "CommonJS",
"outDir": "./lib/cjs"
}
}

View File

@ -4,7 +4,7 @@
"module": "esnext", "module": "esnext",
"moduleResolution": "node", "moduleResolution": "node",
"declaration": true, "declaration": true,
"outDir": "./lib", "outDir": "./lib/esm",
"strict": true, "strict": true,
"esModuleInterop": true, "esModuleInterop": true,
"downlevelIteration": true, "downlevelIteration": true,