This PR introduces the use of path aliases and sets up the project to support them.
While this change might seem like a simple refactor, it uncovered numerous issues with the overall configuration of the monorepo. Debugging and resolving these problems involved running our build scripts: yarn check:build and yarn build-plonky-2.
Here is a list of problems encountered and the fixes implemented:
refactor(relay): Use @ for paths within /relay
build(@dendreth/solidity): Install tsconfig-paths
config(@dendreth/solidity): Update hardhat.config.ts to use tsconfig-paths
Hardhat does not natively support TypeScript path aliases out of the box.
However, we can use tsconfig-paths package to achieve this.
With this we fix errors like this:
An unexpected error occurred:
Error: Your application tried to access @, but it isn't declared in your dependencies;
this makes the require call ambiguous and unsound.
Required package: @ (via "@/constants/network_config.json")
Required by: <path>/DendrETH/relay/utils/
build(check:build): Refactor script to run tsc with --build flag
The --build option can be seen as a build orchestrator that find referenced
projects, check if they are up-to-date, and build out-of-date projects in the
correct order.
The path aliases changes we want to introduce, forces the need of referenced
projects.
config(tsconfig.json): Streamline the configuration to work with path aliases
compilerOptions updates:
"composite": true
"rootDir": "./"
"declaration": true
"declarationMap": true
Add references to the relay workspace
Make sure all ts files are included
config(tsconfig.json): Make sure all json files are included
This change resolves problems like this:
error TS6307: File '<path>/DendrETH/beacon-light-client/plonky2/input_fetchers/balance_verification/abi/lido_accounting_oracle_abi.json' is not listed within the file list of project '<path>DendrETH/relay/tsconfig.json'. Projects must list all files or use an 'include' pattern.
7 import accountingOracleAbi from '../../abi/lido_accounting_oracle_abi.json';
build(yarn): Unplug @lodestar/types@1.17.0
config(relay): Add @lodestar/types in paths.
This change fixes following problems:
relay/implementations/beacon-api.ts:543:9 - error TS2742: The inferred type of 'getBeaconBlock' cannot be named without a reference to '../../.yarn/unplugged/@lodestar-types-npm-1.17.0-1607a25762/node_modules/@lodestar/types/lib/u tils/executionAddress'. This is likely not portable. A type annotation is necessary.
543 async getBeaconBlock(slot: bigint) {
~~~~~~~~~~~~~~
relay/implementations/beacon-api.ts:574:9 - error TS2742: The inferred type of 'getBeaconState' cannot be named without a reference to '../../.yarn/unplugged/@lodestar-types-npm-1.17.0-1607a25762/node_modules/@lodestar/types/lib/utils/executionAddress'. This is likely not portable. A type annotation is necessary.
574 async getBeaconState(slot: bigint) {
~~~~~~~~~~~~~~
Found 2 errors.
config(tsconfig.json): Exclude dist dir
This fixes problems like:
error TS5055: Cannot write file <file-path> because it would overwrite input file.
build(build-plonky-2): Refactor script to use --build flag
The @dendreth/balance-verification workspace rely on files from @dendreth/relay.
That is why we need to add this reference.
With this change following proble was resolved:
Running yarn build-plonky-2 ends in:
error TS2688: Cannot find type definition file for 'node'.
The file is in the program because:
Entry point of type library 'node' specified in compilerOptions
relay/implementations/beacon-api.ts:543:9 - error TS2742: The inferred type of 'getBeaconBlock' cannot be named without a reference to '../../.yarn/unplugged/@lodestar-types-npm-1.17.0-1607a25762/node_modules/@lodestar/types/lib/utils/executionAddress'. This is likely not portable. A type annotation is necessary.
543 async getBeaconBlock(slot: bigint) {
~~~~~~~~~~~~~~
relay/implementations/beacon-api.ts:574:9 - error TS2742: The inferred type of 'getBeaconState' cannot be named without a reference to '../../.yarn/unplugged/@lodestar-types-npm-1.17.0-1607a25762/node_modules/@lodestar/types/lib/utils/executionAddress'. This is likely not portable. A type annotation is necessary.
574 async getBeaconState(slot: bigint) {
~~~~~~~~~~~~~~
Found 3 errors in the same file, starting at: relay/implementations/beacon-api.ts:543
This PR introduces the use of path aliases and sets up the project to support them.
While this change might seem like a simple refactor, it uncovered numerous issues with the overall configuration of the monorepo. Debugging and resolving these problems involved running our build scripts:
yarn check:build
andyarn build-plonky-2
.Here is a list of problems encountered and the fixes implemented:
refactor(relay): Use @ for paths within /relay
build(@dendreth/solidity): Install
tsconfig-paths
config(@dendreth/solidity): Update
hardhat.config.ts
to usetsconfig-paths
Hardhat does not natively support TypeScript path aliases out of the box. However, we can use
tsconfig-paths
package to achieve this.With this we fix errors like this:
build(check:build): Refactor script to run
tsc
with--build
flagThe
--build
option can be seen as a build orchestrator that find referenced projects, check if they are up-to-date, and build out-of-date projects in the correct order.The path aliases changes we want to introduce, forces the need of referenced projects.
config(tsconfig.json): Streamline the configuration to work with path aliases
compilerOptions
updates:Add
references
to therelay
workspace Make sure all ts files are includedconfig(tsconfig.json): Make sure all
json
files are includedThis change resolves problems like this:
build(yarn): Unplug
@lodestar/types@1.17.0
config(relay): Add
@lodestar/types
in paths.This change fixes following problems:
config(tsconfig.json): Exclude
dist
dirThis fixes problems like:
build(build-plonky-2): Refactor script to use
--build
flagconfig(@dendreth/balance-verification): Add project references
The
@dendreth/balance-verification
workspace rely on files from@dendreth/relay
. That is why we need to add this reference.With this change following proble was resolved: Running
yarn build-plonky-2
ends in:build(@dendreth/balance-verification): Add
@types/node
refactor(relay): Remove unused imports