Skip to content

Commit 0c6f507

Browse files
chore: use latest TS module resolution (#8419)
**Motivation** Use latest `module` and `moduleResolution` for TS. **Description** - To use [subpath imports](https://nodejs.org/api/packages.html#subpath-imports) in the PR #8320 we need to update the module solution strategy for TS. - That requires to change the `module` for the TS as well. - Earlier tried to stay with `node18` or `node20`, but the `ts-node` does not work with that. - Maintaining different tsconfig for ts-node is more of hassle on wrong run. - So decided to stick with `nodenext` strategy for `moduleResolution` **Steps to test or reproduce** Run all tests --------- Co-authored-by: Cayman <[email protected]>
1 parent 955e9f8 commit 0c6f507

File tree

32 files changed

+125
-129
lines changed

32 files changed

+125
-129
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"supertest": "^6.3.3",
6969
"ts-node": "^10.9.2",
7070
"typescript": "^5.9.2",
71-
"typescript-docs-verifier": "^2.5.3",
71+
"typescript-docs-verifier": "^3.0.1",
7272
"vite": "^6.0.11",
7373
"vite-plugin-dts": "^4.5.0",
7474
"vite-plugin-node-polyfills": "^0.23.0",

packages/api/test/utils/checkAgainstSpec.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
import Ajv, {ErrorObject} from "ajv";
1+
import ajvPkg, {ErrorObject} from "ajv";
22
import {beforeAll, describe, expect, it} from "vitest";
33
import {Endpoint, RequestWithBodyCodec, RouteDefinitions, isRequestWithoutBody} from "../../src/utils/types.js";
44
import {WireFormat} from "../../src/utils/wireFormat.js";
55
import {GenericServerTestCases} from "./genericServerTest.js";
66
import {JsonSchema, OpenApiJson, applyRecursively, parseOpenApiSpec} from "./parseOpenApiSpec.js";
77

8+
// Current Ajv package is a commonjs package which cause problem
9+
// when we have moduleResolution set to node16
10+
// This syntax works and tested with Node and Bun both
11+
const Ajv = ajvPkg.default;
12+
813
const ajv = new Ajv({
914
strict: true,
1015
});

packages/beacon-node/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
"@chainsafe/prometheus-gc-stats": "^1.0.0",
103103
"@chainsafe/pubkey-index-map": "^3.0.0",
104104
"@chainsafe/ssz": "^1.2.2",
105-
"@chainsafe/threads": "^1.11.2",
105+
"@chainsafe/threads": "^1.11.3",
106106
"@crate-crypto/node-eth-kzg": "0.8.0",
107107
"@ethersproject/abi": "^5.7.0",
108108
"@fastify/bearer-auth": "^10.0.1",

packages/beacon-node/src/api/rest/swaggerUI.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ export async function registerSwaggerUIRoutes(
66
opts: BeaconRestApiServerOpts,
77
version = ""
88
): Promise<void> {
9-
await server.register(await import("@fastify/swagger"), {
9+
const {fastifySwagger} = await import("@fastify/swagger");
10+
await server.register(fastifySwagger, {
1011
openapi: {
1112
info: {
1213
title: "Lodestar API",
@@ -24,7 +25,8 @@ export async function registerSwaggerUIRoutes(
2425
tags: opts.api.map((namespace) => ({name: namespace})),
2526
},
2627
});
27-
await server.register(await import("@fastify/swagger-ui"), {
28+
const {fastifySwaggerUi} = await import("@fastify/swagger-ui");
29+
await server.register(fastifySwaggerUi, {
2830
theme: {
2931
title: "Lodestar API",
3032
favicon: await getFavicon(),

packages/beacon-node/src/network/core/networkCore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js";
1+
import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/score";
22
import {PublishOpts} from "@chainsafe/libp2p-gossipsub/types";
33
import {Connection, PrivateKey} from "@libp2p/interface";
44
import {peerIdFromPrivateKey} from "@libp2p/peer-id";

packages/beacon-node/src/network/core/networkCoreWorkerHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from "node:path";
22
import workerThreads from "node:worker_threads";
3-
import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/dist/src/score/peer-score.js";
3+
import {PeerScoreStatsDump} from "@chainsafe/libp2p-gossipsub/score";
44
import {PublishOpts} from "@chainsafe/libp2p-gossipsub/types";
55
import {ModuleThread, Thread, Worker, spawn} from "@chainsafe/threads";
66
import {privateKeyToProtobuf} from "@libp2p/crypto/keys";

packages/beacon-node/src/network/discv5/worker.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from "node:fs";
22
import path from "node:path";
33
import worker from "node:worker_threads";
4-
import {Discv5} from "@chainsafe/discv5";
4+
import {Discv5, Discv5EventEmitter} from "@chainsafe/discv5";
55
import {ENR, ENRData, SignableENR, SignableENRData} from "@chainsafe/enr";
66
import {Observable, Subject} from "@chainsafe/threads/observable";
77
import {expose} from "@chainsafe/threads/worker";
@@ -59,7 +59,7 @@ const discv5 = Discv5.create({
5959
},
6060
config: workerData.config,
6161
metricsRegistry,
62-
});
62+
}) as Discv5 & Discv5EventEmitter;
6363

6464
// Load boot enrs
6565
for (const bootEnr of workerData.bootEnrs) {
@@ -93,13 +93,13 @@ const module: Discv5WorkerApi = {
9393
discv5.enr.set(key, value);
9494
},
9595
async kadValues(): Promise<ENRData[]> {
96-
return discv5.kadValues().map((enr) => enr.toObject());
96+
return discv5.kadValues().map((enr: ENR) => enr.toObject());
9797
},
9898
async discoverKadValues(): Promise<void> {
9999
discv5.kadValues().map(onDiscovered);
100100
},
101101
async findRandomNode(): Promise<ENRData[]> {
102-
return (await discv5.findRandomNode()).map((enr) => enr.toObject());
102+
return (await discv5.findRandomNode()).map((enr: ENR) => enr.toObject());
103103
},
104104
discovered() {
105105
return Observable.from(subject);

packages/beacon-node/test/e2e/doppelganger/doppelganger.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {ChainConfig} from "@lodestar/config";
44
import {SLOTS_PER_EPOCH} from "@lodestar/params";
55
import {BLSPubkey, Epoch, Slot, phase0, ssz} from "@lodestar/types";
66
import {Validator} from "@lodestar/validator";
7-
import {PubkeyHex} from "@lodestar/validator/src/types";
87
import {afterEach, describe, expect, it} from "vitest";
98
import {BeaconNode} from "../../../src/node/index.js";
109
import {ClockEvent} from "../../../src/util/clock.js";
@@ -14,6 +13,8 @@ import {connect} from "../../utils/network.js";
1413
import {getDevBeaconNode} from "../../utils/node/beacon.js";
1514
import {getAndInitDevValidators} from "../../utils/node/validator.js";
1615

16+
type PubkeyHex = string;
17+
1718
// TODO: Reconsider this tests latter.
1819
// Doppelganger testing can be split in two items:
1920
// 1. Can a running beacon node detect liveness of the validator?

packages/beacon-node/test/e2e/sync/finalizedSync.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {fromHexString} from "@chainsafe/ssz";
22
import {routes} from "@lodestar/api";
3-
import {EventData, EventType} from "@lodestar/api/lib/beacon/routes/events.js";
43
import {ChainConfig} from "@lodestar/config";
54
import {TimestampFormatCode} from "@lodestar/logger";
65
import {SLOTS_PER_EPOCH} from "@lodestar/params";
@@ -99,7 +98,7 @@ describe("sync / finalized sync for fulu", () => {
9998
240000,
10099
(finalized) => finalized.epoch >= FULU_FORK_EPOCH
101100
),
102-
waitForEvent<EventData[EventType.head]>(
101+
waitForEvent<routes.events.EventData[routes.events.EventType.head]>(
103102
bn.chain.emitter,
104103
routes.events.EventType.head,
105104
100000,
@@ -128,7 +127,7 @@ describe("sync / finalized sync for fulu", () => {
128127
const headSummary = bn.chain.forkChoice.getHead();
129128
const head = await bn.db.block.get(fromHexString(headSummary.blockRoot));
130129
if (!head) throw Error("First beacon node has no head block");
131-
const waitForSynced = waitForEvent<EventData[EventType.head]>(
130+
const waitForSynced = waitForEvent<routes.events.EventData[routes.events.EventType.head]>(
132131
bn2.chain.emitter,
133132
routes.events.EventType.head,
134133
100000,

packages/beacon-node/test/e2e/sync/unknownBlockSync.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {fromHexString} from "@chainsafe/ssz";
22
import {routes} from "@lodestar/api";
3-
import {EventData, EventType} from "@lodestar/api/lib/beacon/routes/events.js";
43
import {ChainConfig} from "@lodestar/config";
54
import {TimestampFormatCode} from "@lodestar/logger";
65
import {SLOTS_PER_EPOCH} from "@lodestar/params";
@@ -107,7 +106,7 @@ describe("sync / unknown block sync for fulu", () => {
107106
afterEachCallbacks.push(() => bn.close().catch(() => {}));
108107

109108
// wait until the 2nd slot of fulu
110-
await waitForEvent<EventData[EventType.head]>(
109+
await waitForEvent<routes.events.EventData[routes.events.EventType.head]>(
111110
bn.chain.emitter,
112111
routes.events.EventType.head,
113112
240000,
@@ -133,7 +132,7 @@ describe("sync / unknown block sync for fulu", () => {
133132
const headSummary = bn.chain.forkChoice.getHead();
134133
const head = await bn.db.block.get(fromHexString(headSummary.blockRoot));
135134
if (!head) throw Error("First beacon node has no head block");
136-
const waitForSynced = waitForEvent<EventData[EventType.head]>(
135+
const waitForSynced = waitForEvent<routes.events.EventData[routes.events.EventType.head]>(
137136
bn2.chain.emitter,
138137
routes.events.EventType.head,
139138
100000,

0 commit comments

Comments
 (0)