4 ms·
Amazing. At Step CI we’re currently working on a tool that will do the conversion automatically (OpenAPI > MSW) Feel free to email me at mish@stepci.com if you
by ushakov 3y ago
Amazing. At Step CI we’re currently working on a tool that will do the conversion automatically (OpenAPI > MSW)
Feel free to email me at mish@stepci.com if you want to hear more!
- dcre 3y agoWe more or less did that too. We generate typed wrappers for every handler, and then we manually implement the internal logic for each endpoint. I doubt reliably generating 100% of the logic is possible, but even if it is, I would guess it's more work to do that than to do it manually. Generator: https://github.com/oxidecomputer/oxide.ts/blob/64401fa2/generator/client/msw-handlers.ts https://github.com/oxidecomputer/oxide.ts/blob/64401fa2/gene... Generated output: https://github.com/oxidecomputer/console/blob/8e74accf/libs/api/__generated__/msw-handlers.ts https://github.com/oxidecomputer/console/blob/8e74accf/libs/... Manually implemented endpoint behavior: https://github.com/oxidecomputer/console/blob/8e74accf/libs/api-mocks/msw/handlers.ts https://github.com/oxidecomputer/console/blob/8e74accf/libs/...
- zellyn 3y agoI'm so glad to see all of your comments here. I've been fascinated by your setup ever since hearing about it on the Oxide and Friends podcast. The part that I'm most curious about is the part where you weave together auto-generated interface code with hand-implemented mock implementations… I'll have to go read your code and see how that happens. [Edit, after reading a bit of the code] Am I correct in understanding that the generated code maps API calls to a typed interface, and then the hand-built implementation simply implements that interface? So rather than complex weaving where you want hand-coded function bodies but generated signatures, you have generated signatures, where each function body calls a method on a generated interface.
- dcre 3y agoYeah, basically. We do it with a function call where the argument to the function is that interface representing all the API endpoints. `makeHandlers` handles parsing path params, query params, and request body and passes them to each endpoint handler. So the runtime validation of request bodies is also generated — we generate a zod schema for each request body in the OpenAPI definition and use it to parse the actual request body that comes in. So it's not just a generated interface — there is also generated runtime behavior that is endpoint-specific. big function call https://github.com/oxidecomputer/console/blob/bd65b9da7019ad812dd056e7fc182df2cf4ec128/libs/api-mocks/msw/handlers.ts#L46 https://github.com/oxidecomputer/console/blob/bd65b9da7019ad... automatic body parsing and argument passing: https://github.com/oxidecomputer/console/blob/bd65b9da7019ad812dd056e7fc182df2cf4ec128/libs/api/__generated__/msw-handlers.ts#L940-L984 https://github.com/oxidecomputer/console/blob/bd65b9da7019ad... When an endpoint gets added to the spec, we can rerun the generator and get type errors in the `makeHandlers` telling us endpdoints are missing.
- wdb 3y agoWhy not use @mswjs/source?
- adam_beck 3y agoI've seen you mention this a few times but can't seem to find any information on it. I'm very interested in being able to use HAR files with MSW.
- c01nd01r 3y agoCould you provide a link to this package? I can't seem to find anything.
- wdb 3y agoLooks like the repo is private. My apologies.