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, { 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); });