chore: update start script in package.json and adjust Svelte adapter configuration for improved deployment flexibility

This commit is contained in:
Rotimi Best
2026-05-19 08:15:35 +01:00
parent 65962b49d5
commit 86ebe9ef62
6 changed files with 27 additions and 9 deletions
+7 -1
View File
@@ -54,7 +54,13 @@ export const app = new Hono()
) )
.use('*', rateLimiter) .use('*', rateLimiter)
.use('*', async (c, next) => { .use('*', async (c, next) => {
const session = await auth.api.getSession({ headers: c.req.raw.headers }); let session: Awaited<ReturnType<typeof auth.api.getSession>> | null = null;
try {
session = await auth.api.getSession({ headers: c.req.raw.headers });
} catch (error) {
console.error('auth.api.getSession error:', error);
}
if (!session) { if (!session) {
c.set('user', null); c.set('user', null);
+7 -1
View File
@@ -2,6 +2,7 @@ import 'dotenv/config';
import { API_PORT } from '@api/constants'; import { API_PORT } from '@api/constants';
import { app } from '@api/app'; import { app } from '@api/app';
import { env } from '@api/config/env';
import { configureOpenAPI } from '@api/utils/openapi'; import { configureOpenAPI } from '@api/utils/openapi';
import { connectRedis } from '@api/utils/redis/redis'; import { connectRedis } from '@api/utils/redis/redis';
import { serve } from '@hono/node-server'; import { serve } from '@hono/node-server';
@@ -16,12 +17,17 @@ async function startServer() {
serve({ fetch: app.fetch, port: API_PORT }); serve({ fetch: app.fetch, port: API_PORT });
showRoutes(app, { colorize: true }); if (env.NODE_ENV !== 'production') {
showRoutes(app, { colorize: true });
}
} }
configureOpenAPI(app); configureOpenAPI(app);
startServer().catch((error) => { startServer().catch((error) => {
console.error('Failed to start server:', error); console.error('Failed to start server:', error);
if (error instanceof Error && error.stack) {
console.error(error.stack);
}
process.exit(1); process.exit(1);
}); });
+2 -2
View File
@@ -28,8 +28,8 @@ export function mountQueueDashboard(app: Hono<any, any, any>): void {
const isProduction = env.NODE_ENV === 'production'; const isProduction = env.NODE_ENV === 'production';
if (isProduction && !canEnforceProdAuth()) { if (isProduction && !canEnforceProdAuth()) {
console.warn( console.info(
'Queue dashboard not mounted: NODE_ENV=production requires QUEUE_DASHBOARD_ADMIN_EMAILS or QUEUE_DASHBOARD_TOKEN.' 'BullMQ dashboard (/admin/queues) not mounted in production. Set QUEUE_DASHBOARD_ADMIN_EMAILS or QUEUE_DASHBOARD_TOKEN to enable it.'
); );
return; return;
} }
+1 -1
View File
@@ -11,7 +11,7 @@
"lint:fix": "eslint ./src --fix", "lint:fix": "eslint ./src --fix",
"clean": "rm -rf node_modules", "clean": "rm -rf node_modules",
"format": "prettier --write .", "format": "prettier --write .",
"start": "node build", "start": "node build/index.js",
"prepare": "svelte-kit sync", "prepare": "svelte-kit sync",
"test": "jest", "test": "jest",
"test:watch": "pnpm run test --watch", "test:watch": "pnpm run test --watch",
+3 -3
View File
@@ -1,22 +1,22 @@
import 'dotenv/config'; import 'dotenv/config';
import adapterAuto from '@sveltejs/adapter-auto';
import adapterNode from '@sveltejs/adapter-node'; import adapterNode from '@sveltejs/adapter-node';
import { getCspDomains } from './src/lib/utils/csp-domains.js'; import { getCspDomains } from './src/lib/utils/csp-domains.js';
import path from 'path'; import path from 'path';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
const isSelfHosted = process.env.PUBLIC_IS_SELFHOSTED === 'true';
const IS_CLOUDFLARE = process.env.CI_ENVIRONMENT === 'cloudflare'; const IS_CLOUDFLARE = process.env.CI_ENVIRONMENT === 'cloudflare';
const adapterCloudflare = IS_CLOUDFLARE ? (await import('@sveltejs/adapter-cloudflare')).default : null; const adapterCloudflare = IS_CLOUDFLARE ? (await import('@sveltejs/adapter-cloudflare')).default : null;
const isSelfHosted = process.env.PUBLIC_IS_SELFHOSTED === 'true';
const csp = getCspDomains(isSelfHosted, process.env.PUBLIC_SERVER_URL); const csp = getCspDomains(isSelfHosted, process.env.PUBLIC_SERVER_URL);
/** @type {import('@sveltejs/kit').Config} */ /** @type {import('@sveltejs/kit').Config} */
const config = { const config = {
preprocess: [vitePreprocess({})], preprocess: [vitePreprocess({})],
kit: { kit: {
adapter: IS_CLOUDFLARE ? adapterCloudflare() : isSelfHosted ? adapterNode() : adapterAuto(), // Default: Node server (Render, Docker). Opt into Cloudflare Pages only when CI_ENVIRONMENT=cloudflare.
adapter: IS_CLOUDFLARE ? adapterCloudflare() : adapterNode(),
alias: { alias: {
$lib: path.resolve('./src/lib'), $lib: path.resolve('./src/lib'),
$features: path.resolve('./src/lib/features'), $features: path.resolve('./src/lib/features'),
+7 -1
View File
@@ -49,7 +49,13 @@ function resolveUrl(override?: string): string {
export function createRedisConnection(options: RedisConnectionOptions = {}): Redis { export function createRedisConnection(options: RedisConnectionOptions = {}): Redis {
const { url, ...rest } = options; const { url, ...rest } = options;
const resolved = resolveUrl(url); const resolved = resolveUrl(url);
return new IORedis(resolved, { ...DEFAULT_OPTIONS, ...rest }); const connection = new IORedis(resolved, { ...DEFAULT_OPTIONS, ...rest });
connection.on('error', (error) => {
console.error('BullMQ Redis connection error:', error);
});
return connection;
} }
let sharedConnection: Redis | undefined; let sharedConnection: Redis | undefined;