From 526532717697c053738bd65a561c48113b224447 Mon Sep 17 00:00:00 2001 From: Zai Shi Date: Thu, 15 May 2025 23:55:59 +0200 Subject: [PATCH] Fix package build with explicit index.js imports (#677) ---- > [!IMPORTANT] > Fixes ESM import issue by adding a plugin for implicit `index.js` and renames interface files for consistency. > > - **Behavior**: > - Adds `fixImportExtensions` plugin in `configs/tsup/js-library.ts` to handle ESM imports with implicit `index.js`. > - **Renames**: > - Renames `adminInterface.ts` to `admin-interface.ts` and updates imports in `index.ts` and `admin-app-impl.ts`. > - Renames `clientInterface.ts` to `client-interface.ts` and updates imports in `server-interface.ts`. > - Renames `serverInterface.ts` to `server-interface.ts` and updates imports in `adminInterface.ts`. > > This description was created by [Ellipsis](https://www.ellipsis.dev?ref=stack-auth%2Fstack-auth&utm_source=github&utm_medium=referral) for 1fcd668be44639d89931d3e93dabd150aee41878. You can [customize](https://app.ellipsis.dev/stack-auth/settings/summaries) this summary. It will automatically update as commits are pushed. --------- Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> Co-authored-by: Konsti Wohlwend --- configs/tsup/js-library.ts | 26 +++++++++++++++++++ packages/stack-shared/src/index.ts | 6 ++--- .../{adminInterface.ts => admin-interface.ts} | 2 +- ...clientInterface.ts => client-interface.ts} | 0 ...serverInterface.ts => server-interface.ts} | 2 +- .../apps/implementations/admin-app-impl.ts | 2 +- .../lib/stack-app/internal-api-keys/index.ts | 3 ++- 7 files changed, 34 insertions(+), 7 deletions(-) rename packages/stack-shared/src/interface/{adminInterface.ts => admin-interface.ts} (99%) rename packages/stack-shared/src/interface/{clientInterface.ts => client-interface.ts} (100%) rename packages/stack-shared/src/interface/{serverInterface.ts => server-interface.ts} (99%) diff --git a/configs/tsup/js-library.ts b/configs/tsup/js-library.ts index 193a5344c..21ed93c67 100644 --- a/configs/tsup/js-library.ts +++ b/configs/tsup/js-library.ts @@ -1,10 +1,35 @@ +import fs from 'fs'; +import path from 'path'; import { defineConfig } from 'tsup'; import { createBasePlugin } from './plugins'; + const customNoExternal = new Set([ "oauth4webapi", ]); +// https://github.com/egoist/tsup/issues/953 +const fixImportExtensions = (extension: string = ".js") => ({ + name: "fix-import-extensions", + setup(build) { + build.onResolve({ filter: /.*/ }, (args) => { + if (args.importer) { + const filePath = path.join(args.resolveDir, args.path); + let resolvedPath; + + + if (fs.existsSync(filePath + ".ts") || fs.existsSync(filePath + ".tsx")) { + resolvedPath = args.path + extension; + } else if (fs.existsSync(path.join(filePath, `index.ts`)) || fs.existsSync(path.join(filePath, `index.tsx`))) { + resolvedPath = args.path.endsWith("/") ? args.path + "index" + extension : args.path + "/index" + extension; + } + return { path: resolvedPath ?? args.path, external: true }; + } + }); + }, +}); + + export default function createJsLibraryTsupConfig(options: { barrelFile: boolean }) { return defineConfig({ entryPoints: ['src/**/*.(ts|tsx|js|jsx)'], @@ -16,6 +41,7 @@ export default function createJsLibraryTsupConfig(options: { barrelFile: boolean format: ['esm', 'cjs'], legacyOutput: true, esbuildPlugins: [ + fixImportExtensions(), createBasePlugin({}), { name: 'stackframe: force most files to be external', diff --git a/packages/stack-shared/src/index.ts b/packages/stack-shared/src/index.ts index ba57ca0b9..a39fc1707 100644 --- a/packages/stack-shared/src/index.ts +++ b/packages/stack-shared/src/index.ts @@ -1,12 +1,12 @@ export { StackAdminInterface -} from "./interface/adminInterface"; +} from "./interface/admin-interface"; export { StackClientInterface -} from "./interface/clientInterface"; +} from "./interface/client-interface"; export { StackServerInterface -} from "./interface/serverInterface"; +} from "./interface/server-interface"; export { KnownError, KnownErrors diff --git a/packages/stack-shared/src/interface/adminInterface.ts b/packages/stack-shared/src/interface/admin-interface.ts similarity index 99% rename from packages/stack-shared/src/interface/adminInterface.ts rename to packages/stack-shared/src/interface/admin-interface.ts index d415adc10..8f085c392 100644 --- a/packages/stack-shared/src/interface/adminInterface.ts +++ b/packages/stack-shared/src/interface/admin-interface.ts @@ -6,7 +6,7 @@ import { ProjectPermissionDefinitionsCrud } from "./crud/project-permissions"; import { ProjectsCrud } from "./crud/projects"; import { SvixTokenCrud } from "./crud/svix-token"; import { TeamPermissionDefinitionsCrud } from "./crud/team-permissions"; -import { ServerAuthApplicationOptions, StackServerInterface } from "./serverInterface"; +import { ServerAuthApplicationOptions, StackServerInterface } from "./server-interface"; export type AdminAuthApplicationOptions = ServerAuthApplicationOptions &( | { diff --git a/packages/stack-shared/src/interface/clientInterface.ts b/packages/stack-shared/src/interface/client-interface.ts similarity index 100% rename from packages/stack-shared/src/interface/clientInterface.ts rename to packages/stack-shared/src/interface/client-interface.ts diff --git a/packages/stack-shared/src/interface/serverInterface.ts b/packages/stack-shared/src/interface/server-interface.ts similarity index 99% rename from packages/stack-shared/src/interface/serverInterface.ts rename to packages/stack-shared/src/interface/server-interface.ts index b0862d559..f90dbcb44 100644 --- a/packages/stack-shared/src/interface/serverInterface.ts +++ b/packages/stack-shared/src/interface/server-interface.ts @@ -7,7 +7,7 @@ import { urlString } from "../utils/urls"; import { ClientInterfaceOptions, StackClientInterface -} from "./clientInterface"; +} from "./client-interface"; import { ContactChannelsCrud } from "./crud/contact-channels"; import { CurrentUserCrud } from "./crud/current-user"; import { ConnectedAccountAccessTokenCrud } from "./crud/oauth"; diff --git a/packages/template/src/lib/stack-app/apps/implementations/admin-app-impl.ts b/packages/template/src/lib/stack-app/apps/implementations/admin-app-impl.ts index dfe68ad51..f862964dd 100644 --- a/packages/template/src/lib/stack-app/apps/implementations/admin-app-impl.ts +++ b/packages/template/src/lib/stack-app/apps/implementations/admin-app-impl.ts @@ -1,6 +1,6 @@ import { StackAdminInterface } from "@stackframe/stack-shared"; import { getProductionModeErrors } from "@stackframe/stack-shared/dist/helpers/production-mode"; -import { InternalApiKeyCreateCrudResponse } from "@stackframe/stack-shared/dist/interface/adminInterface"; +import { InternalApiKeyCreateCrudResponse } from "@stackframe/stack-shared/dist/interface/admin-interface"; import { EmailTemplateCrud, EmailTemplateType } from "@stackframe/stack-shared/dist/interface/crud/email-templates"; import { InternalApiKeysCrud } from "@stackframe/stack-shared/dist/interface/crud/internal-api-keys"; import { ProjectsCrud } from "@stackframe/stack-shared/dist/interface/crud/projects"; diff --git a/packages/template/src/lib/stack-app/internal-api-keys/index.ts b/packages/template/src/lib/stack-app/internal-api-keys/index.ts index 4c0fe5650..6867c758a 100644 --- a/packages/template/src/lib/stack-app/internal-api-keys/index.ts +++ b/packages/template/src/lib/stack-app/internal-api-keys/index.ts @@ -1,4 +1,5 @@ -import { InternalApiKeyCreateCrudRequest } from "@stackframe/stack-shared/dist/interface/adminInterface"; + +import { InternalApiKeyCreateCrudRequest } from "@stackframe/stack-shared/dist/interface/admin-interface"; import { InternalApiKeysCrud } from "@stackframe/stack-shared/dist/interface/crud/internal-api-keys"; export type InternalApiKeyBase = {