fix(packages): declare runtime imports as production dependencies
@ekklesia/module-sdk imports drizzle-orm at run time but declared it only as a peer and a development dependency. A workspace package is linked into its consumers as a directory, so its imports resolve from its own node_modules, where a consumer never satisfies a peer; a production install omits development dependencies. In the production image this made every module with a schema fail: the API exited at startup and Doctor reported NOT READY. - Move drizzle-orm to module-sdk's dependencies, keeping the peer. - Move react to @ekklesia/ui's dependencies, keeping the peer. The new guard flags it the same way; it is bundled at build time today, so it was not a live failure. Both lockfile entries keep the identical resolution, so nothing new is installed and the shell bundles still contain one React. - Add the boundary rule runtime-imports-are-production-dependencies: code a package ships (src/, bin/, excluding tests and .d.ts) must declare every runtime import in dependencies or optionalDependencies. Type-only imports are exempt; .tsx/.jsx implies react (automatic JSX runtime). Fixtures cover peer-only, dev-only, JSX, undeclared, and the accepted cases. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d5d4928b9f
commit
fc422b6d8d
+5
@@ -0,0 +1,5 @@
|
||||
import { describe, it } from "vitest";
|
||||
|
||||
describe("sdk", () => {
|
||||
it("runs with development dependencies installed", () => undefined);
|
||||
});
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
import { readFile } from "fs/promises";
|
||||
import path from "node:path";
|
||||
import "polyfill";
|
||||
import { pgTableCreator } from "drizzle-orm/pg-core";
|
||||
import type { Config } from "type-only";
|
||||
import { type Options, type Settings } from "type-only/settings";
|
||||
export type { Shape } from "type-only/shape";
|
||||
export { createSchema } from "@ekklesia/sdk/schema";
|
||||
|
||||
export async function load(config: Config, options: Options, settings: Settings) {
|
||||
const watcher = await import("fsevents");
|
||||
return { config, options, path, readFile, settings, table: pgTableCreator, watcher };
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
export function View() {
|
||||
return <div />;
|
||||
}
|
||||
Reference in New Issue
Block a user