bknd
Version:
Lightweight Firebase/Supabase alternative built to run anywhere — incl. Next.js, React Router, Astro, Cloudflare, Bun, Node, AWS Lambda & more.
85 lines (84 loc) • 2.97 kB
TypeScript
import type { Connection } from "../../data/connection";
import type { EntityManager } from "../../data/entities/EntityManager";
import * as proto from "../../data/prototype";
import { type ModuleBuildContext } from "../Module";
import { type ModuleConfigs, type Modules, type ModuleKey, ModuleManager, type ModuleManagerOptions } from "../ModuleManager";
export type { ModuleBuildContext };
export type ConfigTable<Json = ModuleConfigs> = {
id?: number;
version: number;
type: "config" | "diff" | "backup";
json: Json;
created_at?: Date;
updated_at?: Date;
};
export declare const __bknd: import("../..").Entity<"__bknd", {
version: import("../../data/fields").NumberField<true>;
type: import("../../data/fields").EnumField<true, string>;
json: import("../../data/fields").JsonSchemaField<true, object>;
created_at: import("../../data/fields").DateField<false> & {
required: () => import("../../data/fields").DateField<true>;
};
updated_at: import("../../data/fields").DateField<false> & {
required: () => import("../../data/fields").DateField<true>;
};
}>;
type ConfigTable2 = proto.Schema<typeof __bknd>;
interface T_INTERNAL_EM {
__bknd: ConfigTable2;
}
export declare class DbModuleManager extends ModuleManager {
__em: EntityManager<T_INTERNAL_EM>;
private _version;
private readonly _booted_with?;
private _stable_configs;
buildSyncConfig: {
force?: boolean;
drop?: boolean;
};
constructor(connection: Connection, options?: Partial<ModuleManagerOptions>);
/**
* This is set through module's setListener
* It's called everytime a module's config is updated in SchemaObject
* Needs to rebuild modules and save to database
*/
protected onModuleConfigUpdated(key: string, config: any): Promise<void>;
private repo;
private mutator;
private get db();
syncConfigTable(): Promise<{
sql: string;
parameters: readonly unknown[];
}[]>;
private fetch;
save(): Promise<this>;
private revertModules;
/**
* Validates received diffs for an additional security control.
* Checks:
* - check if module is registered
* - run modules onBeforeUpdate() for added protection
*
* **Important**: Throw `Error` so it won't get catched.
*
* @param diffs
* @private
*/
private validateDiffs;
build(opts?: {
fetch?: boolean;
}): Promise<this>;
protected buildModules(options?: {
graceful?: boolean;
ignoreFlags?: boolean;
}): Promise<{
built: boolean;
modules: ModuleKey[];
synced: boolean;
saved: boolean;
reloaded: boolean;
}>;
protected setupInitial(): Promise<void>;
mutateConfigSafe<Module extends keyof Modules>(name: Module): Pick<ReturnType<Modules[Module]["schema"]>, "set" | "patch" | "overwrite" | "remove">;
version(): number;
}