/** * Type parity between the SDK's plugin API (src/index.ts) and the copy the host's plugin * child runs on (server/src/nest/plugins/runtime/plugin-sdk.ts). Both declare the same * names; vitest's typecheck mode compiles this file (vitest.config.ts enables it only * inside the monorepo, where the host file exists). * * Two kinds of name: * - the plain shapes (requests, results, contributions) are the same type on both sides; * - the shapes that carry a `ctx` are refined in the SDK: its PluginContext types the * entity results (`Trip`, `Place`, …) and some requests where the host's child says * `unknown`, so those are held to the same members (a method or field on one side * only is the drift this catches, as `rawBodyBase64` was), not to one type. * * test/host-types-names.test.ts checks every name both files export is listed here. */ import { expectTypeOf, test } from 'vitest'; import type * as Sdk from '../src/index.js'; import type * as Host from '../../server/src/nest/plugins/runtime/plugin-sdk.js'; test('the plain shapes are one type on both sides', () => { expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); }); test('the shapes that carry a ctx have the same members on both sides', () => { expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); expectTypeOf().toEqualTypeOf(); }); test('every ctx namespace offers the same methods on both sides', () => { type Members = T extends (...args: never[]) => unknown ? never : keyof T; expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); expectTypeOf>().toEqualTypeOf>(); });