mirror of
https://github.com/bknd-io/bknd/
synced 2026-08-02 08:06:00 +00:00
a2fa11ccd0
refactor `code` and `hybrid` modes for better type safety and configuration flexibility. add `_isProd` helper to standardize environment checks and improve plugin syncing warnings. adjust validation logic for clean JSON schema handling and enhance test coverage for modes.
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import type { BkndConfig } from "bknd/adapter";
|
|
import { makeModeConfig, type BkndModeConfig } from "./shared";
|
|
import { $console } from "bknd/utils";
|
|
|
|
export type BkndCodeModeConfig<Args = any> = BkndModeConfig<Args>;
|
|
|
|
export type CodeMode<AdapterConfig extends BkndConfig> = AdapterConfig extends BkndConfig<
|
|
infer Args
|
|
>
|
|
? BkndModeConfig<Args, AdapterConfig>
|
|
: never;
|
|
|
|
export function code<
|
|
Config extends BkndConfig,
|
|
Args = Config extends BkndConfig<infer A> ? A : unknown,
|
|
>(codeConfig: CodeMode<Config>): BkndConfig<Args> {
|
|
return {
|
|
...codeConfig,
|
|
app: async (args) => {
|
|
const {
|
|
config: appConfig,
|
|
plugins,
|
|
isProd,
|
|
syncSchemaOptions,
|
|
} = await makeModeConfig(codeConfig, args);
|
|
|
|
if (appConfig?.options?.mode && appConfig?.options?.mode !== "code") {
|
|
$console.warn("You should not set a different mode than `db` when using code mode");
|
|
}
|
|
|
|
return {
|
|
...appConfig,
|
|
options: {
|
|
...appConfig?.options,
|
|
mode: "code",
|
|
plugins,
|
|
manager: {
|
|
// skip validation in prod for a speed boost
|
|
skipValidation: isProd,
|
|
onModulesBuilt: async (ctx) => {
|
|
if (!isProd && syncSchemaOptions.force) {
|
|
$console.log("[code] syncing schema");
|
|
await ctx.em.schema().sync(syncSchemaOptions);
|
|
}
|
|
},
|
|
...appConfig?.options?.manager,
|
|
},
|
|
},
|
|
};
|
|
},
|
|
};
|
|
}
|