diff --git a/README.md b/README.md index 00a14a9..805dcde 100644 --- a/README.md +++ b/README.md @@ -40,16 +40,25 @@ interface RouteInfo { } // ExtractedRouter contains the route map for easy lookup. -type ExtractedRouter = Record; +type ExtractedRouter = { + routes: Record; + transformer?: { input: any; output: any }; +}; ``` ```json { - "some.route": { - "path": "some.route", - "routeType": "query or mutation", - "input": "json schema or null", - "output": "json schema or null" + "routes": { + "some.route": { + "path": "some.route", + "routeType": "query or mutation", + "input": "json schema or null", + "output": "json schema or null" + } + }, + "transformer": { + "input": { "json": "{{SLOT}}" }, + "output": { "json": "{{SLOT}}" } } } ``` diff --git a/src/extractor.ts b/src/extractor.ts index 0f7e909..166a791 100644 --- a/src/extractor.ts +++ b/src/extractor.ts @@ -13,13 +13,27 @@ interface RouteInfo { } // ExtractedRouter contains the route map for easy lookup. -type ExtractedRouter = Record; +type ExtractedRouter = { + routes: Record; + transformer?: { input: string; output: string }; +}; // Function to extract routes from a TRPC router. export function extractRouter( router: TRouter ): ExtractedRouter { const extractedRouter: Record = {}; // The route map to be returned. + let transformer: { input: any; output: any } | undefined; + + if (!router._def._config.transformer._default) { + // TODO: Add transformer + const inputSerializer = new router._def._config.transformer.input(); + const outputSerializer = new router._def._config.transformer.output(); + transformer = { + input: inputSerializer.serialize("{{SLOT}}"), + output: outputSerializer.serialize("{{SLOT}}"), + }; + } // Recursive helper function to traverse routers and extract route information. function extractRoutes(currentRouter: AnyRouter, prefix: string = "") { @@ -69,5 +83,5 @@ export function extractRouter( // Start the extraction from the root router. extractRoutes(router); - return extractedRouter; + return { routes: extractedRouter, transformer }; }