Files
core/tsup.config.js
T
hykocx 4ddf834990 refactor(api): refactor API module with route definitions and response utilities
Restructure the core API module to improve clarity, consistency, and
maintainability:

- Introduce `defineApiRoutes()` helper for declarative route definitions
  with built-in config validation at startup
- Add `apiSuccess()` / `apiError()` response utilities; enforce their
  use across all handlers (core and modules)
- Move auth enforcement to route definitions (`auth: 'public' | 'user' |
  'admin'`), removing manual auth checks from handlers
- Extract core routes into `core-routes.js`; router now has no knowledge
  of specific features
- Rename `nx-route.js` to `route-handler.js` and update package.json
  export accordingly
- Update ARCHITECTURE.md to reflect new API conventions and point to
  `src/core/api/README.md` for details
2026-04-13 15:13:03 -04:00

103 lines
3.2 KiB
JavaScript

import { defineConfig } from 'tsup';
export default defineConfig([
// Main bundled files
{
entry: [
'src/index.js',
'src/features/auth/index.js',
'src/features/auth/actions.js',
'src/features/auth/pages.js',
'src/features/auth/components/index.js',
'src/features/admin/index.js',
'src/features/admin/actions.js',
'src/features/admin/pages.js',
'src/features/admin/components/index.js',
'src/core/api/index.js',
'src/core/api/route-handler.js',
'src/core/database/index.js',
'src/cli/database.js',
'src/core/email/index.js',
'src/core/email/templates/index.js',
'src/core/storage/index.js',
'src/core/toast/index.js',
'src/features/provider/index.js',
'src/core/modules/index.js',
'src/core/modules/client.js',
'src/modules/index.js',
'src/modules/init.js',
'src/modules/pages.js',
'src/modules/modules.metadata.js',
// Module actions, API, CRUD and server-only config (bundled to resolve relative imports)
'src/modules/*/actions.js',
'src/modules/*/api.js',
'src/modules/*/crud.js',
'src/modules/*/config.js',
'src/shared/lib/metadata/index.js',
'src/shared/lib/logger.js',
],
format: ['esm'],
dts: false,
splitting: false,
sourcemap: false,
clean: true,
external: ['react', 'react-dom', 'next', 'pg', 'dotenv', 'dotenv/config', 'resend', '@react-email/components', 'node-cron', 'readline', 'crypto', 'url', 'fs', 'path', 'net', 'dns', 'tls', '@zen/core/database', '@zen/core/email', '@zen/core/email/templates', '@zen/core/storage', '@zen/core/toast', '@zen/core/modules/actions', '@zen/core/modules/storage', '@aws-sdk/client-s3', '@aws-sdk/s3-request-presigner'],
noExternal: [],
bundle: true,
banner: {
js: ``,
},
esbuildOptions(options) {
options.loader = {
'.js': 'jsx',
'.jsx': 'jsx',
};
options.jsx = 'automatic';
options.platform = 'neutral';
options.legalComments = 'inline';
},
},
// Page wrappers and server-only files - NOT bundled to preserve boundaries and share instances
{
entry: [
'src/features/auth/page.js',
'src/features/admin/page.js',
'src/features/admin/navigation.server.js',
'src/modules/page.js',
'src/modules/modules.actions.js',
'src/modules/modules.storage.js',
],
format: ['esm'],
dts: false,
splitting: false,
sourcemap: false,
clean: false, // Don't clean, we already did in first config
external: [
'react',
'react-dom',
'next',
'@zen/core',
'@zen/core/auth/pages',
'@zen/core/auth/actions',
'@zen/core/admin',
'@zen/core/admin/pages',
'@zen/core/admin/actions',
'@zen/core/admin/navigation',
'@zen/core/toast',
'@zen/core/core/modules',
'@zen/core/modules/pages',
'@zen/core/modules/actions',
'@zen/core/modules/metadata',
],
bundle: false, // Don't bundle these files
esbuildOptions(options) {
options.loader = {
'.js': 'jsx',
'.jsx': 'jsx',
};
options.jsx = 'automatic';
},
},
]);