Fix round 2 for task 1: store-codegen.ts stopped emitting runtime: "legacy" actions in round 1, making the StoreRuntime variant and its resolution fallback dead. Narrows StoreRuntime to three variants and adds a regression test for the remaining options.runtime -> shared fallback chain. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
1.7 KiB
TypeScript
42 lines
1.7 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({
|
|
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);
|
|
});
|