import { describe, expect, it } from "vite-plus/test";import * as Exit from "effect/Exit";import * as Schema from "effect/Schema";import { WsSubscribeServerConfigRpc } from "./rpc.ts";/** * The client always sends `environmentThemes`, including to servers built * before the field existed, whose payload schema was an empty struct. What * makes that safe is that such a schema accepts the request rather than * rejecting it -- an error here would take down the config subscription. */describe("subscribeServerConfig payload compatibility", () => { it("is accepted by a server whose schema predates the field", () => { const oldServerPayload = Schema.Struct({}); const decoded = Schema.decodeUnknownExit(oldServerPayload)({ environmentThemes: true }); expect(Exit.isSuccess(decoded)).toBe(true); }); it("is carried by a server that declares it", () => { const decoded = Schema.decodeUnknownSync(WsSubscribeServerConfigRpc.payloadSchema)({ environmentThemes: true, }); expect(decoded).toEqual({ environmentThemes: true }); }); it("stays optional, so a client that never sends it still subscribes", () => { const decoded = Schema.decodeUnknownSync(WsSubscribeServerConfigRpc.payloadSchema)({}); expect(decoded).toEqual({}); });});
import { describe, expect, it } from "vite-plus/test";
import * as Exit from "effect/Exit";
import * as Schema from "effect/Schema";
import { WsSubscribeServerConfigRpc } from "./rpc.ts";
/**
* The client always sends `environmentThemes`, including to servers built
* before the field existed, whose payload schema was an empty struct. What
* makes that safe is that such a schema accepts the request rather than
* rejecting it -- an error here would take down the config subscription.
*/
describe("subscribeServerConfig payload compatibility", () => {
it("is accepted by a server whose schema predates the field", () => {
const oldServerPayload = Schema.Struct({});
const decoded = Schema.decodeUnknownExit(oldServerPayload)({ environmentThemes: true });
expect(Exit.isSuccess(decoded)).toBe(true);
});
it("is carried by a server that declares it", () => {
const decoded = Schema.decodeUnknownSync(WsSubscribeServerConfigRpc.payloadSchema)({
environmentThemes: true,
});
expect(decoded).toEqual({ environmentThemes: true });
});
it("stays optional, so a client that never sends it still subscribes", () => {
const decoded = Schema.decodeUnknownSync(WsSubscribeServerConfigRpc.payloadSchema)({});
expect(decoded).toEqual({});
});
});