feat: transition module packages to database ABI v1
CI / verify (pull_request) Successful in 1m1s
CI / infrastructure-smoke (pull_request) Successful in 36s
CI / migration-smoke (pull_request) Successful in 1m54s
CI / image-build (pull_request) Successful in 31s
CI / deploy-smoke (same-origin) (pull_request) Successful in 52s
CI / deploy-smoke (split) (pull_request) Successful in 1m32s

This commit is contained in:
ekklesia
2026-10-07 18:00:04 -05:00
parent 20ad1ae208
commit 70854d234c
20 changed files with 274 additions and 115 deletions
+13 -4
View File
@@ -3,7 +3,7 @@ import { readFile } from "node:fs/promises";
import { isBuiltin } from "node:module";
import path from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import { type ModulePackErrorCode, ModulePackError, packModule } from "../src/index.js";
import { ModulePackError, type ModulePackErrorCode, packModule } from "../src/index.js";
import {
cleanupFixtures,
type FixtureModuleOptions,
@@ -181,11 +181,12 @@ describe("packModule: a self-contained backend", () => {
}
});
it("bundles the module-side Drizzle adapter with the module's ORM runtime", async () => {
it("bundles ABI-v1 Drizzle as a module detail without transitional runtime metadata", async () => {
const { archive } = await pack({
databaseAbi: 1,
serverSource: `import { moduleDrizzle } from "@ekklesia/module-database/drizzle";
export const database = (executor) => moduleDrizzle(executor);
export default { id: "example", version: "0.1.0", register() {} };
export default { database: { abi: 1 }, id: "example", version: "0.1.0", register() {} };
`,
withModuleDatabase: true,
});
@@ -194,7 +195,7 @@ export default { id: "example", version: "0.1.0", register() {} };
expect(metadata.incorporates).toMatchObject({
"@ekklesia/module-database": expect.any(String),
});
expect(metadata.transitional).toEqual({ databaseRuntime: { "drizzle-orm": "0.45.2" } });
expect(metadata.transitional).toBeUndefined();
for (const [file, data] of files) {
if (!file.endsWith(".js")) {
continue;
@@ -213,6 +214,14 @@ export default { id: "example", version: "0.1.0", register() {} };
}
});
it("keeps legacy-v8 Drizzle runtime metadata unchanged", async () => {
const { archive } = await pack({ withSchema: true });
const metadata = JSON.parse(
fileEntries(archive).get("example/ekklesia.package.json")?.toString("utf8") ?? "",
);
expect(metadata.transitional).toEqual({ databaseRuntime: { "drizzle-orm": "0.45.2" } });
});
it("refuses a dependency the bundle cannot resolve rather than leaving it external", async () => {
await packRejection(
{