diff --git a/package.json b/package.json index 1d3a314ce..129c269f0 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "@auth0/nextjs-auth0", "version": "4.6.1", "description": "Auth0 Next.js SDK", + "type": "module", "scripts": { "build": "tsc", "build:watch": "tsc -w", @@ -63,19 +64,19 @@ }, "exports": { ".": { - "import": "./dist/client/index.js" + "default": "./dist/client/index.js" }, "./server": { - "import": "./dist/server/index.js" + "default": "./dist/server/index.js" }, "./errors": { - "import": "./dist/errors/index.js" + "default": "./dist/errors/index.js" }, "./types": { - "import": "./dist/types/index.d.ts" + "default": "./dist/types/index.d.ts" }, "./testing": { - "import": "./dist/testing/index.js" + "default": "./dist/testing/index.js" } }, "dependencies": { diff --git a/src/client/helpers/get-access-token.ts b/src/client/helpers/get-access-token.ts index dd363fda1..1f3a09cd1 100644 --- a/src/client/helpers/get-access-token.ts +++ b/src/client/helpers/get-access-token.ts @@ -1,5 +1,5 @@ -import { AccessTokenError } from "../../errors"; -import { normalizeWithBasePath } from "../../utils/pathUtils"; +import { normalizeWithBasePath } from "../../utils/pathUtils.js"; +import { AccessTokenError } from "../../errors/index.js"; type AccessTokenResponse = { token: string; diff --git a/src/client/hooks/use-user.ts b/src/client/hooks/use-user.ts index bfb844541..742b8db61 100644 --- a/src/client/hooks/use-user.ts +++ b/src/client/hooks/use-user.ts @@ -2,8 +2,8 @@ import useSWR from "swr"; -import type { User } from "../../types"; -import { normalizeWithBasePath } from "../../utils/pathUtils"; +import { normalizeWithBasePath } from "../../utils/pathUtils.js"; +import type { User } from "../../types/index.js"; export function useUser() { const { data, error, isLoading, mutate } = useSWR( diff --git a/src/client/index.ts b/src/client/index.ts index cd68ab812..76302aa46 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -1,3 +1,3 @@ -export { useUser } from "./hooks/use-user"; -export { getAccessToken } from "./helpers/get-access-token"; -export { Auth0Provider } from "./providers/auth0-provider"; +export { useUser } from "./hooks/use-user.js"; +export { getAccessToken } from "./helpers/get-access-token.js"; +export { Auth0Provider } from "./providers/auth0-provider.js"; diff --git a/src/client/providers/auth0-provider.tsx b/src/client/providers/auth0-provider.tsx index d0012faf2..ad5a629bd 100644 --- a/src/client/providers/auth0-provider.tsx +++ b/src/client/providers/auth0-provider.tsx @@ -3,7 +3,7 @@ import React from "react"; import { SWRConfig } from "swr"; -import { User } from "../../types"; +import { User } from "../../types/index.js"; export function Auth0Provider({ user, diff --git a/src/server/auth-client.test.ts b/src/server/auth-client.test.ts index 7d582f949..3b590ea0a 100644 --- a/src/server/auth-client.test.ts +++ b/src/server/auth-client.test.ts @@ -1,15 +1,15 @@ -import { NextRequest, NextResponse } from "next/server"; +import { NextRequest, NextResponse } from "next/server.js"; import * as jose from "jose"; import * as oauth from "oauth4webapi"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; -import { generateSecret } from "../test/utils"; -import { SessionData } from "../types"; -import { AuthClient } from "./auth-client"; -import { decrypt, encrypt } from "./cookies"; -import { StatefulSessionStore } from "./session/stateful-session-store"; -import { StatelessSessionStore } from "./session/stateless-session-store"; -import { TransactionState, TransactionStore } from "./transaction-store"; +import { generateSecret } from "../test/utils.js"; +import { SessionData } from "../types/index.js"; +import { AuthClient } from "./auth-client.js"; +import { decrypt, encrypt } from "./cookies.js"; +import { StatefulSessionStore } from "./session/stateful-session-store.js"; +import { StatelessSessionStore } from "./session/stateless-session-store.js"; +import { TransactionState, TransactionStore } from "./transaction-store.js"; describe("Authentication Client", async () => { const DEFAULT = { diff --git a/src/server/auth-client.ts b/src/server/auth-client.ts index 5a3964257..ede022d8d 100644 --- a/src/server/auth-client.ts +++ b/src/server/auth-client.ts @@ -1,8 +1,8 @@ -import { NextResponse, type NextRequest } from "next/server"; +import { NextResponse, type NextRequest } from "next/server.js"; import * as jose from "jose"; import * as oauth from "oauth4webapi"; -import packageJson from "../../package.json"; +import packageJson from "../../package.json" with { type: "json" }; import { AccessTokenError, AccessTokenErrorCode, @@ -16,7 +16,7 @@ import { MissingStateError, OAuth2Error, SdkError -} from "../errors"; +} from "../errors/index.js"; import { AccessTokenForConnectionOptions, AuthorizationParameters, @@ -25,18 +25,19 @@ import { SessionData, StartInteractiveLoginOptions, TokenSet -} from "../types"; +} from "../types/index.js"; import { ensureNoLeadingSlash, ensureTrailingSlash, normalizeWithBasePath, removeTrailingSlash -} from "../utils/pathUtils"; -import { toSafeRedirect } from "../utils/url-helpers"; -import { addCacheControlHeadersForSession } from "./cookies"; -import { AbstractSessionStore } from "./session/abstract-session-store"; -import { TransactionState, TransactionStore } from "./transaction-store"; -import { filterDefaultIdTokenClaims } from "./user"; +} from "../utils/pathUtils.js"; +import { toSafeRedirect } from "../utils/url-helpers.js"; +import { addCacheControlHeadersForSession } from "./cookies.js"; +import { AbstractSessionStore } from "./session/abstract-session-store.js"; +import { TransactionState, TransactionStore } from "./transaction-store.js"; +import { filterDefaultIdTokenClaims } from "./user.js"; + export type BeforeSessionSavedHook = ( session: SessionData, diff --git a/src/server/chunked-cookies.test.ts b/src/server/chunked-cookies.test.ts index 73d4e7b63..9ec12b531 100644 --- a/src/server/chunked-cookies.test.ts +++ b/src/server/chunked-cookies.test.ts @@ -7,7 +7,7 @@ import { RequestCookies, ResponseCookies, setChunkedCookie -} from "./cookies"; +} from "./cookies.js"; // Create mock implementation for RequestCookies and ResponseCookies const createMocks = () => { diff --git a/src/server/client.test.ts b/src/server/client.test.ts index c24b82d63..cc3a4aa74 100644 --- a/src/server/client.test.ts +++ b/src/server/client.test.ts @@ -1,9 +1,9 @@ -import { NextResponse, type NextRequest } from "next/server"; +import { NextResponse, type NextRequest } from "next/server.js"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { AccessTokenError, AccessTokenErrorCode } from "../errors"; -import { SessionData } from "../types"; -import { AuthClient } from "./auth-client"; // Import the actual class for spyOn +import { AccessTokenError, AccessTokenErrorCode } from "../errors/index.js"; +import { SessionData } from "../types/index.js"; +import { AuthClient } from "./auth-client.js"; // Import the actual class for spyOn import { Auth0Client } from "./client.js"; // Define ENV_VARS at the top level for broader scope diff --git a/src/server/client.ts b/src/server/client.ts index 2a692a4be..531af784e 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -1,39 +1,40 @@ import type { IncomingMessage, ServerResponse } from "node:http"; -import { cookies } from "next/headers"; -import { NextRequest, NextResponse } from "next/server"; -import { NextApiRequest, NextApiResponse } from "next/types"; +import { cookies } from "next/headers.js"; +import { NextRequest, NextResponse } from "next/server.js"; +import { NextApiRequest, NextApiResponse } from "next/types.js"; import { AccessTokenError, AccessTokenErrorCode, AccessTokenForConnectionError, - AccessTokenForConnectionErrorCode -} from "../errors"; + AccessTokenForConnectionErrorCode, +} from "../errors/index.js"; + import { AccessTokenForConnectionOptions, AuthorizationParameters, SessionData, SessionDataStore, StartInteractiveLoginOptions -} from "../types"; +} from "../types/index.js"; import { AuthClient, BeforeSessionSavedHook, OnCallbackHook, RoutesOptions -} from "./auth-client"; -import { RequestCookies, ResponseCookies } from "./cookies"; +} from "./auth-client.js"; +import { RequestCookies, ResponseCookies } from "./cookies.js"; import { AbstractSessionStore, SessionConfiguration, SessionCookieOptions -} from "./session/abstract-session-store"; -import { StatefulSessionStore } from "./session/stateful-session-store"; -import { StatelessSessionStore } from "./session/stateless-session-store"; +} from "./session/abstract-session-store.js"; +import { StatefulSessionStore } from "./session/stateful-session-store.js"; +import { StatelessSessionStore } from "./session/stateless-session-store.js"; import { TransactionCookieOptions, TransactionStore -} from "./transaction-store"; +} from "./transaction-store.js"; export interface Auth0ClientOptions { // authorization server configuration diff --git a/src/server/cookies.test.ts b/src/server/cookies.test.ts index 8716e1b0b..671a5f5db 100644 --- a/src/server/cookies.test.ts +++ b/src/server/cookies.test.ts @@ -1,8 +1,8 @@ -import { NextResponse } from "next/server"; +import { NextResponse } from "next/server.js"; import { describe, expect, it } from "vitest"; -import { generateSecret } from "../test/utils"; -import { addCacheControlHeadersForSession, decrypt, encrypt } from "./cookies"; +import { generateSecret } from "../test/utils.js"; +import { addCacheControlHeadersForSession, decrypt, encrypt } from "./cookies.js"; describe("encrypt/decrypt", async () => { const secret = await generateSecret(32); diff --git a/src/server/cookies.ts b/src/server/cookies.ts index 6b3ebfd5a..4581ed6bd 100644 --- a/src/server/cookies.ts +++ b/src/server/cookies.ts @@ -1,10 +1,10 @@ -import { NextResponse } from "next/server"; +import { NextResponse } from "next/server.js"; import { RequestCookie, RequestCookies, ResponseCookies } from "@edge-runtime/cookies"; -import hkdf from "@panva/hkdf"; +import { hkdf } from "@panva/hkdf"; import * as jose from "jose"; const ENC = "A256GCM"; diff --git a/src/server/get-access-token.test.ts b/src/server/get-access-token.test.ts index 44c996a93..1e7450e6a 100644 --- a/src/server/get-access-token.test.ts +++ b/src/server/get-access-token.test.ts @@ -1,4 +1,4 @@ -import { NextRequest, NextResponse } from "next/server"; +import { NextRequest, NextResponse } from "next/server.js"; import * as jose from "jose"; import { http, HttpResponse } from "msw"; import { setupServer } from "msw/node"; @@ -13,8 +13,8 @@ import { vi } from "vitest"; -import { SessionData, TokenSet } from "../types"; -import { Auth0Client } from "./client"; +import { SessionData, TokenSet } from "../types/index.js"; +import { Auth0Client } from "./client.js"; // Basic constants for testing const DEFAULT = { diff --git a/src/server/index.ts b/src/server/index.ts index 015709e16..234311a80 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,9 +1,9 @@ -export { Auth0Client } from "./client"; +export { Auth0Client } from "./client.js"; -export { AuthClient } from "./auth-client"; +export { AuthClient } from "./auth-client.js"; -export { TransactionStore } from "./transaction-store"; +export { TransactionStore } from "./transaction-store.js"; -export { AbstractSessionStore } from "./session/abstract-session-store"; +export { AbstractSessionStore } from "./session/abstract-session-store.js"; -export { filterDefaultIdTokenClaims, DEFAULT_ID_TOKEN_CLAIMS } from "./user"; +export { filterDefaultIdTokenClaims, DEFAULT_ID_TOKEN_CLAIMS } from "./user.js"; diff --git a/src/server/redundant-txn-cookie-deletion.test.ts b/src/server/redundant-txn-cookie-deletion.test.ts index 584735d27..b4a166d5f 100644 --- a/src/server/redundant-txn-cookie-deletion.test.ts +++ b/src/server/redundant-txn-cookie-deletion.test.ts @@ -1,21 +1,21 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { NextRequest } from "next/server"; +import { NextRequest } from "next/server.js"; import * as oauth from "oauth4webapi"; import { beforeEach, describe, expect, it, vi } from "vitest"; -import { InvalidStateError, MissingStateError } from "../errors"; -import { SessionData } from "../types"; -import { AuthClient, AuthClientOptions } from "./auth-client"; +import { InvalidStateError, MissingStateError } from "../errors/index.js"; +import { SessionData } from "../types/index.js"; +import { AuthClient, AuthClientOptions } from "./auth-client.js"; import { ReadonlyRequestCookies, RequestCookies, ResponseCookies -} from "./cookies"; +} from "./cookies.js"; import { AbstractSessionStore, SessionStoreOptions -} from "./session/abstract-session-store"; -import { TransactionStore } from "./transaction-store"; +} from "./session/abstract-session-store.js"; +import { TransactionStore } from "./transaction-store.js"; vi.mock("./transaction-store"); vi.mock("oauth4webapi"); diff --git a/src/server/session/abstract-session-store.ts b/src/server/session/abstract-session-store.ts index 9f530aa74..5b77521fe 100644 --- a/src/server/session/abstract-session-store.ts +++ b/src/server/session/abstract-session-store.ts @@ -1,10 +1,10 @@ -import type { SessionData, SessionDataStore } from "../../types"; +import type { SessionData, SessionDataStore } from "../../types/index.js"; import { CookieOptions, ReadonlyRequestCookies, RequestCookies, ResponseCookies -} from "../cookies"; +} from "../cookies.js"; export interface SessionCookieOptions { /** diff --git a/src/server/session/normalize-session.ts b/src/server/session/normalize-session.ts index 076e649ec..ff2ee1afc 100644 --- a/src/server/session/normalize-session.ts +++ b/src/server/session/normalize-session.ts @@ -1,6 +1,6 @@ import { JWTDecryptResult } from "jose"; -import { SessionData } from "../../types"; +import { SessionData } from "../../types/index.js"; export const LEGACY_COOKIE_NAME = "appSession"; diff --git a/src/server/session/stateful-session-store.test.ts b/src/server/session/stateful-session-store.test.ts index 7acbd47e7..3a78000c8 100644 --- a/src/server/session/stateful-session-store.test.ts +++ b/src/server/session/stateful-session-store.test.ts @@ -1,16 +1,17 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { generateSecret } from "../../test/utils"; -import { SessionData } from "../../types"; +import { generateSecret } from "../../test/utils.js"; +import { SessionData } from "../../types/index.js"; import { decrypt, encrypt, RequestCookies, ResponseCookies, sign -} from "../cookies"; -import { LEGACY_COOKIE_NAME, LegacySessionPayload } from "./normalize-session"; -import { StatefulSessionStore } from "./stateful-session-store"; +} from "../cookies.js"; +import { LEGACY_COOKIE_NAME, LegacySessionPayload } from "./normalize-session.js"; +import { StatefulSessionStore } from "./stateful-session-store.js"; + describe("Stateful Session Store", async () => { describe("get", async () => { diff --git a/src/server/session/stateful-session-store.ts b/src/server/session/stateful-session-store.ts index a602bae88..69bd7f45a 100644 --- a/src/server/session/stateful-session-store.ts +++ b/src/server/session/stateful-session-store.ts @@ -1,13 +1,13 @@ -import { SessionData, SessionDataStore } from "../../types"; -import * as cookies from "../cookies"; +import { SessionData, SessionDataStore } from "../../types/index.js"; +import * as cookies from "../cookies.js"; import { AbstractSessionStore, SessionCookieOptions -} from "./abstract-session-store"; +} from "./abstract-session-store.js"; import { LEGACY_COOKIE_NAME, normalizeStatefulSession -} from "./normalize-session"; +} from "./normalize-session.js"; // the value of the stateful session cookie containing a unique session ID to identify // the current session diff --git a/src/server/session/stateless-session-store.test.ts b/src/server/session/stateless-session-store.test.ts index 2a0fd6a2b..32fdeb5d1 100644 --- a/src/server/session/stateless-session-store.test.ts +++ b/src/server/session/stateless-session-store.test.ts @@ -1,11 +1,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { generateSecret } from "../../test/utils"; -import { CookieOptions, SessionData } from "../../types"; -import { decrypt, encrypt, RequestCookies, ResponseCookies } from "../cookies"; -import * as cookies from "../cookies"; -import { LEGACY_COOKIE_NAME, LegacySession } from "./normalize-session"; -import { StatelessSessionStore } from "./stateless-session-store"; +import { generateSecret } from "../../test/utils.js"; +import { CookieOptions, SessionData } from "../../types/index.js"; +import { decrypt, encrypt, RequestCookies, ResponseCookies } from "../cookies.js"; +import * as cookies from "../cookies.js"; +import { LEGACY_COOKIE_NAME, LegacySession } from "./normalize-session.js"; +import { StatelessSessionStore } from "./stateless-session-store.js"; describe("Stateless Session Store", async () => { const baseCookieOptions: CookieOptions = { diff --git a/src/server/session/stateless-session-store.ts b/src/server/session/stateless-session-store.ts index 06b197ce8..582895425 100644 --- a/src/server/session/stateless-session-store.ts +++ b/src/server/session/stateless-session-store.ts @@ -1,16 +1,18 @@ +import { ConnectionTokenSet, CookieOptions, SessionData } from "../../types/index.js"; + import type { JWTPayload } from "jose"; -import { ConnectionTokenSet, CookieOptions, SessionData } from "../../types"; -import * as cookies from "../cookies"; +import * as cookies from "../cookies.js"; + import { AbstractSessionStore, SessionCookieOptions -} from "./abstract-session-store"; +} from "./abstract-session-store.js"; import { LEGACY_COOKIE_NAME, LegacySessionPayload, normalizeStatelessSession -} from "./normalize-session"; +} from "./normalize-session.js"; interface StatelessSessionStoreOptions { secret: string; diff --git a/src/server/transaction-store.test.ts b/src/server/transaction-store.test.ts index 7207c7eef..155096e91 100644 --- a/src/server/transaction-store.test.ts +++ b/src/server/transaction-store.test.ts @@ -1,9 +1,9 @@ import * as oauth from "oauth4webapi"; import { describe, expect, it } from "vitest"; -import { generateSecret } from "../test/utils"; -import { decrypt, encrypt, RequestCookies, ResponseCookies } from "./cookies"; -import { TransactionState, TransactionStore } from "./transaction-store"; +import { generateSecret } from "../test/utils.js"; +import { decrypt, encrypt, RequestCookies, ResponseCookies } from "./cookies.js"; +import { TransactionState, TransactionStore } from "./transaction-store.js"; describe("Transaction Store", async () => { describe("get", async () => { diff --git a/src/server/transaction-store.ts b/src/server/transaction-store.ts index 877126572..662ba1f44 100644 --- a/src/server/transaction-store.ts +++ b/src/server/transaction-store.ts @@ -1,6 +1,6 @@ import type * as jose from "jose"; -import * as cookies from "./cookies"; +import * as cookies from "./cookies.js"; const TRANSACTION_COOKIE_PREFIX = "__txn_"; diff --git a/src/server/user.test.ts b/src/server/user.test.ts index ff0e7bbf6..b0a2beb90 100644 --- a/src/server/user.test.ts +++ b/src/server/user.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { filterDefaultIdTokenClaims } from "./user"; +import { filterDefaultIdTokenClaims } from "./user.js"; describe("filterDefaultIdTokenClaims", async () => { it("should return only the allowed claims", () => { diff --git a/src/server/user.ts b/src/server/user.ts index f3fe1fc09..2bfa1790a 100644 --- a/src/server/user.ts +++ b/src/server/user.ts @@ -1,4 +1,4 @@ -import type { User } from "../types"; +import type { User } from "../types/index.js"; /** * Default claims for the ID token. diff --git a/src/testing/generate-session-cookie.test.ts b/src/testing/generate-session-cookie.test.ts index ad4136210..cb853d4c6 100644 --- a/src/testing/generate-session-cookie.test.ts +++ b/src/testing/generate-session-cookie.test.ts @@ -1,12 +1,12 @@ import { describe, expect, it } from "vitest"; -import { decrypt } from "../server/cookies"; -import { generateSecret } from "../test/utils"; -import { SessionData } from "../types"; +import { decrypt } from "../server/cookies.js"; +import { generateSecret } from "../test/utils.js"; +import { SessionData } from "../types/index.js"; import { generateSessionCookie, GenerateSessionCookieConfig -} from "./generate-session-cookie"; +} from "./generate-session-cookie.js"; describe("generateSessionCookie", async () => { it("should use the session data provided", async () => { diff --git a/src/testing/generate-session-cookie.ts b/src/testing/generate-session-cookie.ts index 0e4ba05f8..91249afc0 100644 --- a/src/testing/generate-session-cookie.ts +++ b/src/testing/generate-session-cookie.ts @@ -1,5 +1,5 @@ -import { encrypt } from "../server/cookies"; -import { SessionData } from "../types"; +import { encrypt } from "../server/cookies.js"; +import { SessionData } from "../types/index.js"; export type GenerateSessionCookieConfig = { /** diff --git a/src/testing/index.ts b/src/testing/index.ts index a8227fe9d..33add7c8b 100644 --- a/src/testing/index.ts +++ b/src/testing/index.ts @@ -1,4 +1,4 @@ export { GenerateSessionCookieConfig, generateSessionCookie -} from "./generate-session-cookie"; +} from "./generate-session-cookie.js"; diff --git a/src/types/index.ts b/src/types/index.ts index b7fb9d8da..a52e3b430 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -69,7 +69,7 @@ export type { Auth0ClientOptions, PagesRouterRequest, PagesRouterResponse -} from "../server/client"; +} from "../server/client.js"; export type { BeforeSessionSavedHook, @@ -78,22 +78,22 @@ export type { AuthClientOptions, OnCallbackContext, Routes -} from "../server/auth-client"; +} from "../server/auth-client.js"; -export type { TransactionCookieOptions } from "../server/transaction-store"; +export type { TransactionCookieOptions } from "../server/transaction-store.js"; export type { SessionConfiguration, SessionCookieOptions, SessionStoreOptions -} from "../server/session/abstract-session-store"; +} from "../server/session/abstract-session-store.js"; -export type { CookieOptions, ReadonlyRequestCookies } from "../server/cookies"; +export type { CookieOptions, ReadonlyRequestCookies } from "../server/cookies.js"; export type { TransactionStoreOptions, TransactionState -} from "../server/transaction-store"; +} from "../server/transaction-store.js"; export interface StartInteractiveLoginOptions { /** diff --git a/src/utils/pathUtils.test.ts b/src/utils/pathUtils.test.ts index 94cd4d092..be9664e59 100644 --- a/src/utils/pathUtils.test.ts +++ b/src/utils/pathUtils.test.ts @@ -6,7 +6,7 @@ import { ensureTrailingSlash, normalizeWithBasePath, removeTrailingSlash -} from "./pathUtils"; +} from "./pathUtils.js"; describe("pathUtils", () => { describe("ensureTrailingSlash", () => { diff --git a/src/utils/url-helpers.test.ts b/src/utils/url-helpers.test.ts index d65313ff1..8561d09d1 100644 --- a/src/utils/url-helpers.test.ts +++ b/src/utils/url-helpers.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; -import payloads from "../test/fixtures/open-redirect-payloads.json"; -import { toSafeRedirect } from "./url-helpers"; +import payloads from "../test/fixtures/open-redirect-payloads.json" with { type: "json" }; +import { toSafeRedirect } from "./url-helpers.js"; describe("url-helpers", () => { const safeBaseUrl = new URL("http://www.example.com"); diff --git a/tsconfig.json b/tsconfig.json index 839d05ef2..0e99ccf74 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,16 @@ { "compilerOptions": { "target": "ES2021", - "moduleResolution": "Bundler", + "moduleResolution": "nodenext", + "module": "NodeNext", "rootDir": "./src", "outDir": "./dist", "esModuleInterop": true, "strict": true, "skipLibCheck": true, "jsx": "react", - "declaration": true + "declaration": true, + "resolveJsonModule": true }, "include": ["src/**/*"] }