diff --git a/openapi-ts.config.ts b/openapi-ts.config.ts index 0367810b..74e87a2c 100644 --- a/openapi-ts.config.ts +++ b/openapi-ts.config.ts @@ -1,5 +1,6 @@ import { defineConfig } from "@hey-api/openapi-ts"; import { defaultPlugins } from "@hey-api/openapi-ts"; +import { defineConfig as operationPathsConfig } from "./src/openapi/plugins/operation-paths"; export default defineConfig({ input: "https://v4.goteo.org/v4/docs.json", @@ -13,5 +14,6 @@ export default defineConfig({ { name: "@hey-api/sdk", }, + operationPathsConfig() ], }); diff --git a/src/openapi/plugins/operation-paths/config.ts b/src/openapi/plugins/operation-paths/config.ts new file mode 100644 index 00000000..d46f4425 --- /dev/null +++ b/src/openapi/plugins/operation-paths/config.ts @@ -0,0 +1,17 @@ +import type { Plugin } from '@hey-api/openapi-ts'; + +import { handler } from './plugin'; +import type { Config } from './types'; + +export const defaultConfig: Plugin.Config = { + _dependencies: ['@hey-api/typescript'], + _handler: handler, + _handlerLegacy: () => { }, + name: 'operation-paths', + output: 'paths', +}; + +export const defineConfig: Plugin.DefineConfig = (config) => ({ + ...defaultConfig, + ...config, +}); diff --git a/src/openapi/plugins/operation-paths/index.ts b/src/openapi/plugins/operation-paths/index.ts new file mode 100644 index 00000000..3a85a1be --- /dev/null +++ b/src/openapi/plugins/operation-paths/index.ts @@ -0,0 +1,2 @@ +export { defaultConfig, defineConfig } from './config'; +export type { Config } from './types'; diff --git a/src/openapi/plugins/operation-paths/plugin.ts b/src/openapi/plugins/operation-paths/plugin.ts new file mode 100644 index 00000000..40ccba16 --- /dev/null +++ b/src/openapi/plugins/operation-paths/plugin.ts @@ -0,0 +1,17 @@ +import type { Plugin } from '@hey-api/openapi-ts'; + +import type { Config } from './types'; + +export const handler: Plugin.Handler = ({ context, plugin }) => { + const file = context.createFile({ + id: plugin.name, + path: plugin.output, + }); + + context.subscribe('operation', ({ operation }) => { + const url = operation.path.replace(/{\w+}/g, (match) => `\${${match.slice(1, -1)}}`); + const node = `export const ${operation.id}Url = '${url}';`; + + file.add(node); + }); +}; diff --git a/src/openapi/plugins/operation-paths/types.d.ts b/src/openapi/plugins/operation-paths/types.d.ts new file mode 100644 index 00000000..3a56b3fc --- /dev/null +++ b/src/openapi/plugins/operation-paths/types.d.ts @@ -0,0 +1,8 @@ +export interface Config { + name: 'operation-paths'; + + /** + * @default 'operation-paths' + */ + output?: string; +}