Files
js/scripts/hotlink/changes.mjs
T

164 lines
4.9 KiB
JavaScript

// @ts-check
import fs from "fs";
import path from "path";
export const _legacyChanges = [
// react
{
path: "./legacy_packages/react/package.json",
entry: "./src/index.ts",
exports: {
".": "./src/index.ts",
"./evm": "./src/evm/index.ts",
},
},
// react-core
{
path: "./legacy_packages/react-core/package.json",
entry: "./src/index.ts",
exports: {
".": "./src/index.ts",
"./evm": "./src/evm/index.ts",
},
},
// wallets
{
path: "./legacy_packages/wallets/package.json",
entry: "./src/index.ts",
exports: {
".": "./src/index.ts",
"./evm": "./src/evm/index.ts",
"./evm/wallets/base": "./src/evm/wallets/base.ts",
"./evm/wallets/ethers": "./src/evm/wallets/ethers.ts",
"./evm/wallets/aws-kms": "./src/evm/wallets/awa-kms.ts",
"./evm/wallets/abstract": "./src/evm/wallets/abstract.ts",
"./evm/wallets/injected": "./src/evm/wallets/injected.ts",
"./evm/wallets/metamask": "./src/evm/wallets/metamask.ts",
"./evm/wallets/private-key": "./src/evm/wallets/private-key.ts",
"./evm/wallets/local-wallet": "./src/evm/wallets/local-wallet.ts",
"./evm/wallets/wallet-connect":
"./src/evm/connectors/wallet-connect/index.ts",
"./evm/wallets/coinbase-wallet": "./src/evm/wallets/coinbase-wallet.ts",
"./evm/connectors/injected": "./src/evm/connectors/injected/index.ts",
"./evm/connectors/metamask": "./src/evm/connectors/metamask/index.ts",
"./evm/wallets/aws-secrets-manager":
"./src/evm/wallets/aws-secrets-manager.ts",
"./evm/connectors/local-wallet":
"./src/evm/connectors/local-wallet/index.ts",
"./evm/connectors/wallet-connect":
"./src/evm/connectors/wallet-connect/index.ts",
"./evm/connectors/coinbase-wallet":
"./src/evm/connectors/coinbase-wallet/index.ts",
"./evm/wallets/paper-wallet": "./src/evm/wallets/paper-wallet.ts",
"./evm/connectors/wallet-connect-v1":
"./src/evm/connectors/wallet-connect-v1/index.ts",
"./evm/connectors/paper": "./src/evm/connectors/paper/index.ts",
"./evm/wallets/wallet-connect-v1":
"./src/evm/wallets/wallet-connect-v1.ts",
"./evm/wallets/smart-wallet": "./src/evm/wallets/smart-wallet.ts",
},
},
];
export const _changes = [
// thirdweb v5 sdk
{
path: "./packages/thirdweb/package.json",
entry: "./src/exports/thirdweb.ts",
exports: {
".": "./src/exports/thirdweb.ts",
"./chains": "./src/exports/chains.ts",
"./contract": "./src/exports/contract.ts",
"./event": "./src/exports/event.ts",
"./pay": "./src/exports/pay.ts",
"./react": "./src/exports/react.ts",
"./storage": "./src/exports/storage.ts",
"./utils": "./src/exports/utils.ts",
"./rpc": "./src/exports/rpc.ts",
"./transaction": "./src/exports/transaction.ts",
"./wallets": "./src/exports/wallets.ts",
"./adapters/*": "./src/exports/adapters/*.ts",
"./wallets/*": "./src/exports/wallets/*.ts",
"./extensions/*": "./src/exports/extensions/*.ts",
},
},
];
/**
* get absolute path from relative path
* @param {string} relativePath
* @returns {string}
*/
const absPath = (relativePath) => path.join(process.cwd(), relativePath);
/**
*
* @param {"original" | 'hotlink'} changeKey
* @param {boolean} isLegacy
*/
export function updatePackages(changeKey, isLegacy) {
const changes = isLegacy ? _legacyChanges : _changes;
changes.forEach((change) => {
// read the package json file
const pkg = JSON.parse(fs.readFileSync(absPath(change.path), "utf8"));
// apply changes
if (changeKey === "hotlink") {
pkg._main = pkg.main;
pkg.main = change.entry;
pkg._module = pkg.module;
pkg.module = change.entry;
} else {
pkg.main = pkg._main;
delete pkg._main;
pkg.module = pkg._module;
delete pkg._module;
}
if (changeKey === "hotlink") {
// save entire pkg.exports deep copy
pkg._exports = JSON.parse(JSON.stringify(pkg.exports));
for (const key in change.exports) {
try {
pkg.exports[key] = {};
pkg.exports[key].module = change.exports[key];
delete pkg.exports[key].default;
} catch (e) {
console.log("key :", key);
throw e;
}
}
} else {
// revert pkg.exports
pkg.exports = pkg._exports;
delete pkg._exports;
}
if (changeKey === "hotlink") {
pkg._types = pkg.types;
pkg.types = "";
if (pkg.typings) {
pkg._typings = pkg.typings;
pkg.typings = "";
}
} else {
pkg.types = pkg._types;
delete pkg._types;
if (pkg._typings) {
pkg.typings = pkg._typings;
delete pkg._typings;
}
}
// save file
fs.writeFileSync(
absPath(change.path),
JSON.stringify(pkg, null, 2) + "\n",
"utf8",
);
});
}