feat: make queues durable by default and add seed helpers
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@wrnexus/dev-server",
|
||||
"version": "0.8.47",
|
||||
"version": "0.8.48",
|
||||
"type": "module",
|
||||
"main": "src/index.ts",
|
||||
"exports": {
|
||||
@@ -24,6 +24,7 @@
|
||||
"@wrnexus/pubsub": "workspace:*",
|
||||
"@wrnexus/uploader": "workspace:*",
|
||||
"@wrnexus/plugin": "workspace:*",
|
||||
"@wrnexus/queue": "workspace:*",
|
||||
"@wrnexus/store": "workspace:*",
|
||||
"@wrnexus/security": "workspace:*",
|
||||
"@wrnexus/observability": "workspace:*",
|
||||
|
||||
@@ -33,6 +33,7 @@ import {
|
||||
getDbPerformanceSnapshot,
|
||||
} from "@wrnexus/db";
|
||||
import { connectFromConfig } from "@wrnexus/db/connect";
|
||||
import { configureQueueStorage, type QueueStorageConfig } from "@wrnexus/queue";
|
||||
import { configureStorage, type StorageConfig } from "@wrnexus/uploader";
|
||||
import { setAuthzCatalog, type AuthzCatalog, type AuthzModule } from "@wrnexus/authz";
|
||||
import { loadAppAuthzCatalog } from "./authz-boot.ts";
|
||||
@@ -102,6 +103,8 @@ export interface ServeOptions {
|
||||
/** Inject the live-reload client (defaults to true in development). */
|
||||
hmr?: boolean;
|
||||
appConfig?: Record<string, unknown>;
|
||||
/** Queue persistence; durable SQLite is used when omitted. */
|
||||
queue?: QueueStorageConfig;
|
||||
/** Resolved absolute path to the global CSS entry, or null. */
|
||||
styleEntry?: string | null;
|
||||
/** Custom styles config (e.g. a Tailwind/PostCSS processor). */
|
||||
@@ -220,6 +223,7 @@ function resolveDevToolbarConfig(
|
||||
export async function startServer(opts: ServeOptions): Promise<RunningServer> {
|
||||
const appDir = resolve(opts.appDir);
|
||||
const appRoot = dirname(appDir);
|
||||
configureQueueStorage({ ...opts.queue, appRoot });
|
||||
const mode: Mode = opts.mode ?? "development";
|
||||
const importConfig = (opts.appConfig?.imports ?? {}) as {
|
||||
mode?: "legacy" | "compatible" | "explicit";
|
||||
|
||||
@@ -40,6 +40,7 @@ import { VALIDATE_RUNTIME } from "@wrnexus/validation";
|
||||
import { I18N_RUNTIME, type ResolvedI18n } from "@wrnexus/i18n";
|
||||
import { setDb, registerLazyDb, getDb, hasDb, migrate } from "@wrnexus/db";
|
||||
import { connectFromConfig } from "@wrnexus/db/connect";
|
||||
import { configureQueueStorage, type QueueStorageConfig } from "@wrnexus/queue";
|
||||
import { hasAuthzCatalog, mergeCatalogs, setAuthzCatalog, type AuthzModule } from "@wrnexus/authz";
|
||||
import {
|
||||
configureStorage,
|
||||
@@ -138,6 +139,8 @@ export interface ProdOptions {
|
||||
db?: { driver: string; url: string };
|
||||
/** Named databases, reached with `getDb("<name>")`. */
|
||||
databases?: Record<string, { driver: string; url: string }>;
|
||||
/** Queue persistence; durable SQLite is used when omitted. */
|
||||
queue?: QueueStorageConfig;
|
||||
/**
|
||||
* Absolute path to the default db's migrations bundled into the build
|
||||
* (`dist/migrations`). When set, they are applied on startup — like dev.
|
||||
@@ -499,6 +502,7 @@ export function createProductionHandlers(
|
||||
for (const [name, cfg] of Object.entries(opts.databases ?? {})) {
|
||||
registerLazyDb(name, () => connectFromConfig(cfg));
|
||||
}
|
||||
configureQueueStorage({ ...opts.queue, appRoot: process.cwd() });
|
||||
|
||||
// File-upload storage. Relative local dirs resolve against the deployment cwd
|
||||
// (NOT dist/, which is rebuilt) so uploads persist across deploys.
|
||||
|
||||
@@ -58,6 +58,7 @@ const server = await startServer({
|
||||
i18n: config.i18n,
|
||||
db: config.db,
|
||||
databases: config.databases,
|
||||
queue: config.queue,
|
||||
realtime: config.realtime,
|
||||
storage: config.storage,
|
||||
mobile: config.mobile,
|
||||
|
||||
Reference in New Issue
Block a user