diff --git a/packages/auth-adapters/better-auth/src/adapter.ts b/packages/auth-adapters/better-auth/src/adapter.ts index 27b2d4f59..3221f6952 100644 --- a/packages/auth-adapters/better-auth/src/adapter.ts +++ b/packages/auth-adapters/better-auth/src/adapter.ts @@ -187,7 +187,9 @@ export const zenstackAdapter = (db: ClientContract { - const generateSchema = (await import('./schema-generator')).generateSchema; + // Self-import via package subpath (not a relative './schema-generator') so the + // bundler treats it as external and keeps it lazy in the CJS output — see tsdown.config.ts. + const generateSchema = (await import('@zenstackhq/better-auth/schema-generator')).generateSchema; return generateSchema(file, tables, config, options); }, }; diff --git a/packages/auth-adapters/better-auth/tsconfig.json b/packages/auth-adapters/better-auth/tsconfig.json index 3c7378e93..0cecd4cdc 100644 --- a/packages/auth-adapters/better-auth/tsconfig.json +++ b/packages/auth-adapters/better-auth/tsconfig.json @@ -3,7 +3,10 @@ "compilerOptions": { "rootDir": ".", "noPropertyAccessFromIndexSignature": false, - "types": ["node"] + "types": ["node"], + "paths": { + "@zenstackhq/better-auth/schema-generator": ["./src/schema-generator.ts"] + } }, "include": ["src/**/*"] } diff --git a/packages/auth-adapters/better-auth/tsdown.config.ts b/packages/auth-adapters/better-auth/tsdown.config.ts index 28af6aa31..075a684a2 100644 --- a/packages/auth-adapters/better-auth/tsdown.config.ts +++ b/packages/auth-adapters/better-auth/tsdown.config.ts @@ -1,3 +1,18 @@ import { createConfig } from '@zenstackhq/tsdown-config'; -export default createConfig({ entry: { index: 'src/index.ts', 'schema-generator': 'src/schema-generator.ts' } }); +// `index` and `schema-generator` are built as two separate tsdown invocations so that +// the lazy `await import('@zenstackhq/better-auth/schema-generator')` in the adapter +// stays lazy in the CJS output. When both entries live in a single build, Rolldown +// treats them as siblings and injects a top-level `require('./schema-generator.cjs')` +// into `index.cjs`, which eagerly pulls in `@zenstackhq/language` (Langium) at adapter +// load time. Splitting the builds hides that relationship; `neverBundle` then keeps +// the dynamic import as a package-name reference that Node resolves at first call. +export default [ + createConfig({ + entry: { index: 'src/index.ts' }, + deps: { neverBundle: ['@zenstackhq/better-auth/schema-generator'] }, + }), + createConfig({ + entry: { 'schema-generator': 'src/schema-generator.ts' }, + }), +];