CI / verify (pull_request) Successful in 1m2s
CI / infrastructure-smoke (pull_request) Successful in 37s
CI / migration-smoke (pull_request) Successful in 1m52s
CI / standalone-module (pull_request) Successful in 26s
CI / image-build (pull_request) Successful in 28s
CI / deploy-smoke (same-origin) (pull_request) Successful in 43s
CI / deploy-smoke (split) (pull_request) Successful in 1m30s
@ekklesia/contracts still emitted a type-only import of drizzle-orm/node-postgres for the legacy ModuleDatabase facade, so a standalone module type-checked only because skipLibCheck hid it. - ModuleDatabase, LegacyModuleRuntimeServices and AnyModuleRuntimeServices move to core/src/modules/database.ts, beside the facade Core builds; the facade itself is unchanged. - contracts' runtime, route, and services generics no longer name an ORM: the database type is a plain parameter defaulting to the ABI v1 executor, and the legacy definition's database is opaque until Core specializes it. Core and apps/api name the legacy types from Core. - contracts drops its drizzle-orm optional peer and devDependency; Drizzle stays public only through @ekklesia/module-database/drizzle. - The facade's type-level test moves from contracts to Core. - Regression proof: the standalone fixture type-checks with skipLibCheck: false against the packed tarballs, with no drizzle-orm installed (the smoke asserts both). Against the previous contracts tarball the same check fails with TS2307 on drizzle-orm/node-postgres. Co-Authored-By: Claude Opus 5.5 <[email protected]>
20 lines
1.1 KiB
TypeScript
20 lines
1.1 KiB
TypeScript
import type { ModuleDatabaseExecutor } from "./module-database-abi.js";
|
|
|
|
/**
|
|
* The complete set of platform-provided services a trusted module's `start`/`stop` lifecycle hooks
|
|
* and authorized HTTP route handlers receive — for this phase, exactly one: `database`. For a
|
|
* module that declares `database: { abi: 1 }` it is the Module Database ABI v1 executor; for a
|
|
* legacy module it is Core's legacy facade, whose type Core alone owns, so this package never
|
|
* references an ORM (ADR 0053). Frozen, and
|
|
* never handed to a module's `register` hook (`ModuleRegistrationContext` has no `services` field):
|
|
* registration stays declarative and database-free, exactly as before this contract existed.
|
|
* Deliberately has no storage, jobs, configuration, secrets, or authorization field yet — those
|
|
* remain out of scope until a later phase explicitly adds them here, one at a time, the same way
|
|
* `database` was added.
|
|
*/
|
|
export interface ModuleRuntimeServices<Database = ModuleDatabaseExecutor> {
|
|
readonly database: Database;
|
|
}
|
|
|
|
export type ModuleDatabaseAbiRuntimeServices = ModuleRuntimeServices<ModuleDatabaseExecutor>;
|