Files
WRNexusJS/packages/store/test/legacy-runtime-removal.test.ts
ClintchizandClaude Opus 5 e09a35b4bd fix(store): give the fix-round-2 regression test explicit generics
The single-branch 'shared'-only action fixture failed to infer through
defineStore's actions generic, typing store.increment as never and
failing bun run typecheck (TS2349) even though bun test passed.
Explicit type arguments fix the inference without weakening the test.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 01:15:35 +05:30

48 lines
1.8 KiB
TypeScript

import { expect, test } from "bun:test";
import { createStoreContainer, defineStore } from "../src/index.ts";
// Regression guard for the removed `"legacy"` StoreRuntime fallback.
//
// `createStoreInstance` resolves an action definition by walking:
// exact `options.runtime` match -> "shared" match -> (previously) "legacy" match
// The `"legacy"` step was dead (nothing ever produced a `runtime: "legacy"`
// action once `store-codegen.ts` stopped emitting it) and has been removed.
// This test locks in the remaining `options.runtime` -> `"shared"` chain so a
// future edit can't silently drop the `"shared"` fallback too.
const OnlySharedActionStore = defineStore<
{ count: number },
Record<string, never>,
{ increment: (amount?: number) => void }
>({
name: "OnlySharedActionStore",
kind: "global" as const,
createSharedState: () => ({ count: 0 }),
actions: {
// No "client" or "server" definition exists for this action — only
// "shared". A server-runtime container must still resolve it via the
// "shared" fallback.
increment: [
{
runtime: "shared" as const,
handler: ({ state }: any, amount = 1) => {
state.count += amount;
},
},
],
},
});
test("an action with only a shared definition resolves via the shared fallback on the server runtime", async () => {
const container = createStoreContainer({ runtime: "server", request: {} });
const store = await container.use(OnlySharedActionStore);
await store.increment(5);
expect(store.count).toBe(5);
});
test("an action with only a shared definition resolves via the shared fallback on the client runtime", async () => {
const container = createStoreContainer({ runtime: "client" });
const store = await container.use(OnlySharedActionStore);
await store.increment(3);
expect(store.count).toBe(3);
});