@brainfish-ai/devdoc 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +33 -0
- package/README.md +415 -0
- package/bin/devdoc.js +13 -0
- package/dist/cli/commands/build.d.ts +5 -0
- package/dist/cli/commands/build.js +87 -0
- package/dist/cli/commands/check.d.ts +1 -0
- package/dist/cli/commands/check.js +143 -0
- package/dist/cli/commands/create.d.ts +24 -0
- package/dist/cli/commands/create.js +387 -0
- package/dist/cli/commands/deploy.d.ts +9 -0
- package/dist/cli/commands/deploy.js +433 -0
- package/dist/cli/commands/dev.d.ts +6 -0
- package/dist/cli/commands/dev.js +139 -0
- package/dist/cli/commands/init.d.ts +11 -0
- package/dist/cli/commands/init.js +238 -0
- package/dist/cli/commands/keys.d.ts +12 -0
- package/dist/cli/commands/keys.js +165 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.js +56 -0
- package/dist/cli/commands/upload.d.ts +13 -0
- package/dist/cli/commands/upload.js +238 -0
- package/dist/cli/commands/whoami.d.ts +8 -0
- package/dist/cli/commands/whoami.js +91 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +106 -0
- package/dist/config/index.d.ts +80 -0
- package/dist/config/index.js +133 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.js +13 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +12 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.js +61 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.js +50 -0
- package/package.json +51 -0
- package/renderer/app/api/assets/[...path]/route.ts +123 -0
- package/renderer/app/api/assets/route.ts +124 -0
- package/renderer/app/api/assets/upload/route.ts +177 -0
- package/renderer/app/api/auth-schemes/route.ts +77 -0
- package/renderer/app/api/chat/route.ts +858 -0
- package/renderer/app/api/codegen/route.ts +72 -0
- package/renderer/app/api/collections/route.ts +1016 -0
- package/renderer/app/api/debug/route.ts +53 -0
- package/renderer/app/api/deploy/route.ts +234 -0
- package/renderer/app/api/device/route.ts +42 -0
- package/renderer/app/api/docs/route.ts +187 -0
- package/renderer/app/api/keys/regenerate/route.ts +80 -0
- package/renderer/app/api/openapi-spec/route.ts +151 -0
- package/renderer/app/api/projects/[slug]/route.ts +153 -0
- package/renderer/app/api/projects/[slug]/stats/route.ts +96 -0
- package/renderer/app/api/projects/register/route.ts +152 -0
- package/renderer/app/api/proxy/route.ts +149 -0
- package/renderer/app/api/proxy-stream/route.ts +168 -0
- package/renderer/app/api/redirects/route.ts +47 -0
- package/renderer/app/api/schema/route.ts +65 -0
- package/renderer/app/api/subdomains/check/route.ts +172 -0
- package/renderer/app/api/suggestions/route.ts +144 -0
- package/renderer/app/favicon.ico +0 -0
- package/renderer/app/globals.css +1103 -0
- package/renderer/app/layout.tsx +47 -0
- package/renderer/app/llms-full.txt/route.ts +346 -0
- package/renderer/app/llms.txt/route.ts +279 -0
- package/renderer/app/page.tsx +14 -0
- package/renderer/app/robots.txt/route.ts +84 -0
- package/renderer/app/sitemap.xml/route.ts +199 -0
- package/renderer/components/docs/index.ts +12 -0
- package/renderer/components/docs/mdx/accordion.tsx +169 -0
- package/renderer/components/docs/mdx/badge.tsx +132 -0
- package/renderer/components/docs/mdx/callouts.tsx +154 -0
- package/renderer/components/docs/mdx/cards.tsx +213 -0
- package/renderer/components/docs/mdx/changelog.tsx +120 -0
- package/renderer/components/docs/mdx/code-block.tsx +186 -0
- package/renderer/components/docs/mdx/code-group.tsx +421 -0
- package/renderer/components/docs/mdx/file-embeds.tsx +105 -0
- package/renderer/components/docs/mdx/frame.tsx +112 -0
- package/renderer/components/docs/mdx/highlight.tsx +151 -0
- package/renderer/components/docs/mdx/iframe.tsx +134 -0
- package/renderer/components/docs/mdx/image.tsx +235 -0
- package/renderer/components/docs/mdx/index.ts +204 -0
- package/renderer/components/docs/mdx/mermaid.tsx +240 -0
- package/renderer/components/docs/mdx/param-field.tsx +200 -0
- package/renderer/components/docs/mdx/steps.tsx +113 -0
- package/renderer/components/docs/mdx/tabs.tsx +86 -0
- package/renderer/components/docs/mdx-renderer.tsx +100 -0
- package/renderer/components/docs/navigation/breadcrumbs.tsx +76 -0
- package/renderer/components/docs/navigation/index.ts +8 -0
- package/renderer/components/docs/navigation/page-nav.tsx +64 -0
- package/renderer/components/docs/navigation/sidebar.tsx +515 -0
- package/renderer/components/docs/navigation/toc.tsx +113 -0
- package/renderer/components/docs/notice.tsx +105 -0
- package/renderer/components/docs-header.tsx +274 -0
- package/renderer/components/docs-viewer/agent/agent-chat.tsx +2076 -0
- package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +90 -0
- package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +49 -0
- package/renderer/components/docs-viewer/agent/cards/index.tsx +50 -0
- package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +212 -0
- package/renderer/components/docs-viewer/agent/cards/types.ts +84 -0
- package/renderer/components/docs-viewer/agent/chat-message.tsx +17 -0
- package/renderer/components/docs-viewer/agent/index.tsx +6 -0
- package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +119 -0
- package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +46 -0
- package/renderer/components/docs-viewer/agent/messages/index.ts +17 -0
- package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +721 -0
- package/renderer/components/docs-viewer/agent/messages/types.ts +61 -0
- package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +24 -0
- package/renderer/components/docs-viewer/agent/messages/user-message.tsx +51 -0
- package/renderer/components/docs-viewer/code-editor/index.tsx +2 -0
- package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +1283 -0
- package/renderer/components/docs-viewer/content/changelog-page.tsx +331 -0
- package/renderer/components/docs-viewer/content/doc-page.tsx +285 -0
- package/renderer/components/docs-viewer/content/documentation-viewer.tsx +17 -0
- package/renderer/components/docs-viewer/content/index.tsx +29 -0
- package/renderer/components/docs-viewer/content/introduction.tsx +21 -0
- package/renderer/components/docs-viewer/content/request-details.tsx +330 -0
- package/renderer/components/docs-viewer/content/sections/auth.tsx +69 -0
- package/renderer/components/docs-viewer/content/sections/body.tsx +66 -0
- package/renderer/components/docs-viewer/content/sections/headers.tsx +43 -0
- package/renderer/components/docs-viewer/content/sections/overview.tsx +40 -0
- package/renderer/components/docs-viewer/content/sections/parameters.tsx +43 -0
- package/renderer/components/docs-viewer/content/sections/responses.tsx +87 -0
- package/renderer/components/docs-viewer/global-auth-modal.tsx +352 -0
- package/renderer/components/docs-viewer/index.tsx +1466 -0
- package/renderer/components/docs-viewer/playground/auth-editor.tsx +280 -0
- package/renderer/components/docs-viewer/playground/body-editor.tsx +221 -0
- package/renderer/components/docs-viewer/playground/code-editor.tsx +224 -0
- package/renderer/components/docs-viewer/playground/code-snippet.tsx +387 -0
- package/renderer/components/docs-viewer/playground/graphql-playground.tsx +745 -0
- package/renderer/components/docs-viewer/playground/index.tsx +671 -0
- package/renderer/components/docs-viewer/playground/key-value-editor.tsx +261 -0
- package/renderer/components/docs-viewer/playground/method-selector.tsx +60 -0
- package/renderer/components/docs-viewer/playground/request-builder.tsx +179 -0
- package/renderer/components/docs-viewer/playground/request-tabs.tsx +237 -0
- package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +21 -0
- package/renderer/components/docs-viewer/playground/response-cards/index.tsx +93 -0
- package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +16 -0
- package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +23 -0
- package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +268 -0
- package/renderer/components/docs-viewer/playground/response-cards/types.ts +82 -0
- package/renderer/components/docs-viewer/playground/response-viewer.tsx +43 -0
- package/renderer/components/docs-viewer/search/index.ts +2 -0
- package/renderer/components/docs-viewer/search/search-dialog.tsx +331 -0
- package/renderer/components/docs-viewer/search/use-search.ts +117 -0
- package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +431 -0
- package/renderer/components/docs-viewer/shared/method-badge.tsx +41 -0
- package/renderer/components/docs-viewer/shared/schema-viewer.tsx +349 -0
- package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +239 -0
- package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +316 -0
- package/renderer/components/docs-viewer/sidebar/index.tsx +343 -0
- package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +202 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +118 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +226 -0
- package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +52 -0
- package/renderer/components/theme-provider.tsx +11 -0
- package/renderer/components/theme-toggle.tsx +76 -0
- package/renderer/components/ui/badge.tsx +46 -0
- package/renderer/components/ui/button.tsx +59 -0
- package/renderer/components/ui/dialog.tsx +118 -0
- package/renderer/components/ui/dropdown-menu.tsx +257 -0
- package/renderer/components/ui/input.tsx +21 -0
- package/renderer/components/ui/label.tsx +24 -0
- package/renderer/components/ui/navigation-menu.tsx +168 -0
- package/renderer/components/ui/select.tsx +190 -0
- package/renderer/components/ui/spinner.tsx +114 -0
- package/renderer/components/ui/tabs.tsx +66 -0
- package/renderer/components/ui/tooltip.tsx +61 -0
- package/renderer/hooks/use-code-copy.ts +88 -0
- package/renderer/hooks/use-openapi-title.ts +44 -0
- package/renderer/lib/api-docs/agent/index.ts +6 -0
- package/renderer/lib/api-docs/agent/indexer.ts +323 -0
- package/renderer/lib/api-docs/agent/spec-summary.ts +335 -0
- package/renderer/lib/api-docs/agent/types.ts +116 -0
- package/renderer/lib/api-docs/auth/auth-context.tsx +225 -0
- package/renderer/lib/api-docs/auth/auth-storage.ts +87 -0
- package/renderer/lib/api-docs/auth/crypto.ts +89 -0
- package/renderer/lib/api-docs/auth/index.ts +4 -0
- package/renderer/lib/api-docs/code-editor/db.ts +164 -0
- package/renderer/lib/api-docs/code-editor/hooks.ts +266 -0
- package/renderer/lib/api-docs/code-editor/index.ts +6 -0
- package/renderer/lib/api-docs/code-editor/mode-context.tsx +207 -0
- package/renderer/lib/api-docs/code-editor/types.ts +105 -0
- package/renderer/lib/api-docs/codegen/definitions.ts +297 -0
- package/renderer/lib/api-docs/codegen/har.ts +251 -0
- package/renderer/lib/api-docs/codegen/index.ts +159 -0
- package/renderer/lib/api-docs/factories.ts +151 -0
- package/renderer/lib/api-docs/index.ts +17 -0
- package/renderer/lib/api-docs/mobile-context.tsx +112 -0
- package/renderer/lib/api-docs/navigation-context.tsx +88 -0
- package/renderer/lib/api-docs/parsers/graphql/README.md +129 -0
- package/renderer/lib/api-docs/parsers/graphql/index.ts +91 -0
- package/renderer/lib/api-docs/parsers/graphql/parser.ts +491 -0
- package/renderer/lib/api-docs/parsers/graphql/transformer.ts +246 -0
- package/renderer/lib/api-docs/parsers/graphql/types.ts +283 -0
- package/renderer/lib/api-docs/parsers/openapi/README.md +32 -0
- package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +60 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +574 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +403 -0
- package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +232 -0
- package/renderer/lib/api-docs/parsers/openapi/index.ts +171 -0
- package/renderer/lib/api-docs/parsers/openapi/transformer.ts +277 -0
- package/renderer/lib/api-docs/parsers/openapi/validator.ts +31 -0
- package/renderer/lib/api-docs/playground/context.tsx +107 -0
- package/renderer/lib/api-docs/playground/navigation-context.tsx +124 -0
- package/renderer/lib/api-docs/playground/request-builder.ts +223 -0
- package/renderer/lib/api-docs/playground/request-runner.ts +282 -0
- package/renderer/lib/api-docs/playground/types.ts +35 -0
- package/renderer/lib/api-docs/types.ts +269 -0
- package/renderer/lib/api-docs/utils.ts +311 -0
- package/renderer/lib/cache.ts +193 -0
- package/renderer/lib/docs/config/index.ts +29 -0
- package/renderer/lib/docs/config/loader.ts +142 -0
- package/renderer/lib/docs/config/schema.ts +298 -0
- package/renderer/lib/docs/index.ts +12 -0
- package/renderer/lib/docs/mdx/compiler.ts +176 -0
- package/renderer/lib/docs/mdx/frontmatter.ts +80 -0
- package/renderer/lib/docs/mdx/index.ts +26 -0
- package/renderer/lib/docs/navigation/generator.ts +348 -0
- package/renderer/lib/docs/navigation/index.ts +12 -0
- package/renderer/lib/docs/navigation/types.ts +123 -0
- package/renderer/lib/docs-navigation-context.tsx +80 -0
- package/renderer/lib/multi-tenant/context.ts +105 -0
- package/renderer/lib/storage/blob.ts +845 -0
- package/renderer/lib/utils.ts +6 -0
- package/renderer/next.config.ts +76 -0
- package/renderer/package.json +66 -0
- package/renderer/postcss.config.mjs +5 -0
- package/renderer/public/assets/images/screenshot.png +0 -0
- package/renderer/public/assets/logo/dark.svg +9 -0
- package/renderer/public/assets/logo/light.svg +9 -0
- package/renderer/public/assets/logo.svg +9 -0
- package/renderer/public/file.svg +1 -0
- package/renderer/public/globe.svg +1 -0
- package/renderer/public/icon.png +0 -0
- package/renderer/public/logo.svg +9 -0
- package/renderer/public/window.svg +1 -0
- package/renderer/tsconfig.json +28 -0
- package/templates/basic/README.md +139 -0
- package/templates/basic/assets/favicon.svg +4 -0
- package/templates/basic/assets/logo.svg +9 -0
- package/templates/basic/docs.json +47 -0
- package/templates/basic/guides/configuration.mdx +149 -0
- package/templates/basic/guides/overview.mdx +96 -0
- package/templates/basic/index.mdx +39 -0
- package/templates/basic/package.json +14 -0
- package/templates/basic/quickstart.mdx +92 -0
- package/templates/basic/vercel.json +6 -0
- package/templates/graphql/README.md +139 -0
- package/templates/graphql/api-reference/schema.graphql +305 -0
- package/templates/graphql/assets/favicon.svg +4 -0
- package/templates/graphql/assets/logo.svg +9 -0
- package/templates/graphql/docs.json +54 -0
- package/templates/graphql/guides/configuration.mdx +149 -0
- package/templates/graphql/guides/overview.mdx +96 -0
- package/templates/graphql/index.mdx +39 -0
- package/templates/graphql/package.json +14 -0
- package/templates/graphql/quickstart.mdx +92 -0
- package/templates/graphql/vercel.json +6 -0
- package/templates/openapi/README.md +139 -0
- package/templates/openapi/api-reference/openapi.json +419 -0
- package/templates/openapi/assets/favicon.svg +4 -0
- package/templates/openapi/assets/logo.svg +9 -0
- package/templates/openapi/docs.json +61 -0
- package/templates/openapi/guides/configuration.mdx +149 -0
- package/templates/openapi/guides/overview.mdx +96 -0
- package/templates/openapi/index.mdx +39 -0
- package/templates/openapi/package.json +14 -0
- package/templates/openapi/quickstart.mdx +92 -0
- package/templates/openapi/vercel.json +6 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code generation definitions for supported languages/libraries
|
|
3
|
+
* Based on HTTPSnippet supported targets
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const CodegenDefinitions = [
|
|
7
|
+
// Shell
|
|
8
|
+
{
|
|
9
|
+
name: 'shell-curl',
|
|
10
|
+
lang: 'shell',
|
|
11
|
+
client: 'curl',
|
|
12
|
+
caption: 'cURL',
|
|
13
|
+
category: 'Shell',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'shell-httpie',
|
|
17
|
+
lang: 'shell',
|
|
18
|
+
client: 'httpie',
|
|
19
|
+
caption: 'HTTPie',
|
|
20
|
+
category: 'Shell',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'shell-wget',
|
|
24
|
+
lang: 'shell',
|
|
25
|
+
client: 'wget',
|
|
26
|
+
caption: 'Wget',
|
|
27
|
+
category: 'Shell',
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
// JavaScript
|
|
31
|
+
{
|
|
32
|
+
name: 'javascript-fetch',
|
|
33
|
+
lang: 'javascript',
|
|
34
|
+
client: 'fetch',
|
|
35
|
+
caption: 'Fetch',
|
|
36
|
+
category: 'JavaScript',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'javascript-axios',
|
|
40
|
+
lang: 'javascript',
|
|
41
|
+
client: 'axios',
|
|
42
|
+
caption: 'Axios',
|
|
43
|
+
category: 'JavaScript',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'javascript-jquery',
|
|
47
|
+
lang: 'javascript',
|
|
48
|
+
client: 'jquery',
|
|
49
|
+
caption: 'jQuery',
|
|
50
|
+
category: 'JavaScript',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'javascript-xhr',
|
|
54
|
+
lang: 'javascript',
|
|
55
|
+
client: 'xhr',
|
|
56
|
+
caption: 'XMLHttpRequest',
|
|
57
|
+
category: 'JavaScript',
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
// Node.js
|
|
61
|
+
{
|
|
62
|
+
name: 'node-fetch',
|
|
63
|
+
lang: 'node',
|
|
64
|
+
client: 'fetch',
|
|
65
|
+
caption: 'Node Fetch',
|
|
66
|
+
category: 'Node.js',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'node-axios',
|
|
70
|
+
lang: 'node',
|
|
71
|
+
client: 'axios',
|
|
72
|
+
caption: 'Axios',
|
|
73
|
+
category: 'Node.js',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'node-native',
|
|
77
|
+
lang: 'node',
|
|
78
|
+
client: 'native',
|
|
79
|
+
caption: 'HTTP',
|
|
80
|
+
category: 'Node.js',
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
// Python
|
|
84
|
+
{
|
|
85
|
+
name: 'python-requests',
|
|
86
|
+
lang: 'python',
|
|
87
|
+
client: 'requests',
|
|
88
|
+
caption: 'Requests',
|
|
89
|
+
category: 'Python',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'python-python3',
|
|
93
|
+
lang: 'python',
|
|
94
|
+
client: 'python3',
|
|
95
|
+
caption: 'http.client',
|
|
96
|
+
category: 'Python',
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
// Go
|
|
100
|
+
{
|
|
101
|
+
name: 'go-native',
|
|
102
|
+
lang: 'go',
|
|
103
|
+
client: 'native',
|
|
104
|
+
caption: 'Native',
|
|
105
|
+
category: 'Go',
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
// Java
|
|
109
|
+
{
|
|
110
|
+
name: 'java-okhttp',
|
|
111
|
+
lang: 'java',
|
|
112
|
+
client: 'okhttp',
|
|
113
|
+
caption: 'OkHttp',
|
|
114
|
+
category: 'Java',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'java-unirest',
|
|
118
|
+
lang: 'java',
|
|
119
|
+
client: 'unirest',
|
|
120
|
+
caption: 'Unirest',
|
|
121
|
+
category: 'Java',
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
// C#
|
|
125
|
+
{
|
|
126
|
+
name: 'csharp-httpclient',
|
|
127
|
+
lang: 'csharp',
|
|
128
|
+
client: 'httpclient',
|
|
129
|
+
caption: 'HttpClient',
|
|
130
|
+
category: 'C#',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: 'csharp-restsharp',
|
|
134
|
+
lang: 'csharp',
|
|
135
|
+
client: 'restsharp',
|
|
136
|
+
caption: 'RestSharp',
|
|
137
|
+
category: 'C#',
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
// Ruby
|
|
141
|
+
{
|
|
142
|
+
name: 'ruby-native',
|
|
143
|
+
lang: 'ruby',
|
|
144
|
+
client: 'native',
|
|
145
|
+
caption: 'Net::HTTP',
|
|
146
|
+
category: 'Ruby',
|
|
147
|
+
},
|
|
148
|
+
|
|
149
|
+
// PHP
|
|
150
|
+
{
|
|
151
|
+
name: 'php-curl',
|
|
152
|
+
lang: 'php',
|
|
153
|
+
client: 'curl',
|
|
154
|
+
caption: 'cURL',
|
|
155
|
+
category: 'PHP',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'php-guzzle',
|
|
159
|
+
lang: 'php',
|
|
160
|
+
client: 'guzzle',
|
|
161
|
+
caption: 'Guzzle',
|
|
162
|
+
category: 'PHP',
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
// Swift
|
|
166
|
+
{
|
|
167
|
+
name: 'swift-nsurlsession',
|
|
168
|
+
lang: 'swift',
|
|
169
|
+
client: 'nsurlsession',
|
|
170
|
+
caption: 'URLSession',
|
|
171
|
+
category: 'Swift',
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
// Kotlin
|
|
175
|
+
{
|
|
176
|
+
name: 'kotlin-okhttp',
|
|
177
|
+
lang: 'kotlin',
|
|
178
|
+
client: 'okhttp',
|
|
179
|
+
caption: 'OkHttp',
|
|
180
|
+
category: 'Kotlin',
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
// Rust
|
|
184
|
+
{
|
|
185
|
+
name: 'rust-reqwest',
|
|
186
|
+
lang: 'rust',
|
|
187
|
+
client: 'reqwest',
|
|
188
|
+
caption: 'Reqwest',
|
|
189
|
+
category: 'Rust',
|
|
190
|
+
},
|
|
191
|
+
|
|
192
|
+
// C
|
|
193
|
+
{
|
|
194
|
+
name: 'c-libcurl',
|
|
195
|
+
lang: 'c',
|
|
196
|
+
client: 'libcurl',
|
|
197
|
+
caption: 'libcurl',
|
|
198
|
+
category: 'C',
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
// PowerShell
|
|
202
|
+
{
|
|
203
|
+
name: 'powershell-webrequest',
|
|
204
|
+
lang: 'powershell',
|
|
205
|
+
client: 'webrequest',
|
|
206
|
+
caption: 'Invoke-WebRequest',
|
|
207
|
+
category: 'PowerShell',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'powershell-restmethod',
|
|
211
|
+
lang: 'powershell',
|
|
212
|
+
client: 'restmethod',
|
|
213
|
+
caption: 'Invoke-RestMethod',
|
|
214
|
+
category: 'PowerShell',
|
|
215
|
+
},
|
|
216
|
+
|
|
217
|
+
// Clojure
|
|
218
|
+
{
|
|
219
|
+
name: 'clojure-clj_http',
|
|
220
|
+
lang: 'clojure',
|
|
221
|
+
client: 'clj_http',
|
|
222
|
+
caption: 'clj-http',
|
|
223
|
+
category: 'Clojure',
|
|
224
|
+
},
|
|
225
|
+
|
|
226
|
+
// Objective-C
|
|
227
|
+
{
|
|
228
|
+
name: 'objc-nsurlsession',
|
|
229
|
+
lang: 'objc',
|
|
230
|
+
client: 'nsurlsession',
|
|
231
|
+
caption: 'NSURLSession',
|
|
232
|
+
category: 'Objective-C',
|
|
233
|
+
},
|
|
234
|
+
|
|
235
|
+
// OCaml
|
|
236
|
+
{
|
|
237
|
+
name: 'ocaml-cohttp',
|
|
238
|
+
lang: 'ocaml',
|
|
239
|
+
client: 'cohttp',
|
|
240
|
+
caption: 'CoHTTP',
|
|
241
|
+
category: 'OCaml',
|
|
242
|
+
},
|
|
243
|
+
|
|
244
|
+
// R
|
|
245
|
+
{
|
|
246
|
+
name: 'r-httr',
|
|
247
|
+
lang: 'r',
|
|
248
|
+
client: 'httr',
|
|
249
|
+
caption: 'httr',
|
|
250
|
+
category: 'R',
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
// HTTP
|
|
254
|
+
{
|
|
255
|
+
name: 'http-http1.1',
|
|
256
|
+
lang: 'http',
|
|
257
|
+
client: 'http1.1',
|
|
258
|
+
caption: 'HTTP 1.1',
|
|
259
|
+
category: 'Raw',
|
|
260
|
+
},
|
|
261
|
+
] as const
|
|
262
|
+
|
|
263
|
+
export type CodegenName = (typeof CodegenDefinitions)[number]['name']
|
|
264
|
+
export type CodegenLang = (typeof CodegenDefinitions)[number]['lang']
|
|
265
|
+
export type CodegenClient = (typeof CodegenDefinitions)[number]['client']
|
|
266
|
+
export type CodegenCategory = (typeof CodegenDefinitions)[number]['category']
|
|
267
|
+
|
|
268
|
+
export interface CodegenDefinition {
|
|
269
|
+
name: CodegenName
|
|
270
|
+
lang: CodegenLang
|
|
271
|
+
client: CodegenClient
|
|
272
|
+
caption: string
|
|
273
|
+
category: CodegenCategory
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Get codegen definitions grouped by category
|
|
278
|
+
*/
|
|
279
|
+
export function getCodegenByCategory(): Record<string, CodegenDefinition[]> {
|
|
280
|
+
const grouped: Record<string, CodegenDefinition[]> = {}
|
|
281
|
+
|
|
282
|
+
for (const def of CodegenDefinitions) {
|
|
283
|
+
if (!grouped[def.category]) {
|
|
284
|
+
grouped[def.category] = []
|
|
285
|
+
}
|
|
286
|
+
grouped[def.category].push(def as CodegenDefinition)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return grouped
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Find a codegen definition by name
|
|
294
|
+
*/
|
|
295
|
+
export function findCodegenByName(name: CodegenName): CodegenDefinition | undefined {
|
|
296
|
+
return CodegenDefinitions.find((def) => def.name === name) as CodegenDefinition | undefined
|
|
297
|
+
}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HAR (HTTP Archive) Request Builder
|
|
3
|
+
* Converts BrainfishRESTRequest to HAR format for HTTPSnippet
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { BrainfishRESTRequest, FormDataKeyValue } from '../types'
|
|
7
|
+
|
|
8
|
+
// HAR format types based on HAR 1.2 spec
|
|
9
|
+
// http://www.softwareishard.com/blog/har-12-spec/
|
|
10
|
+
|
|
11
|
+
export interface HarHeader {
|
|
12
|
+
name: string
|
|
13
|
+
value: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface HarQueryString {
|
|
17
|
+
name: string
|
|
18
|
+
value: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface HarParam {
|
|
22
|
+
name: string
|
|
23
|
+
value?: string
|
|
24
|
+
fileName?: string
|
|
25
|
+
contentType?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface HarPostData {
|
|
29
|
+
mimeType: string
|
|
30
|
+
text?: string
|
|
31
|
+
params?: HarParam[]
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface HarCookie {
|
|
35
|
+
name: string
|
|
36
|
+
value: string
|
|
37
|
+
path?: string
|
|
38
|
+
domain?: string
|
|
39
|
+
expires?: string
|
|
40
|
+
httpOnly?: boolean
|
|
41
|
+
secure?: boolean
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface HarRequest {
|
|
45
|
+
method: string
|
|
46
|
+
url: string
|
|
47
|
+
httpVersion: string
|
|
48
|
+
cookies: HarCookie[]
|
|
49
|
+
headers: HarHeader[]
|
|
50
|
+
queryString: HarQueryString[]
|
|
51
|
+
postData?: HarPostData
|
|
52
|
+
headersSize: number
|
|
53
|
+
bodySize: number
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Build HAR headers from request headers
|
|
58
|
+
*/
|
|
59
|
+
function buildHarHeaders(request: BrainfishRESTRequest): HarHeader[] {
|
|
60
|
+
return request.headers
|
|
61
|
+
.filter((header) => header.active)
|
|
62
|
+
.map((header) => ({
|
|
63
|
+
name: header.key,
|
|
64
|
+
value: header.value,
|
|
65
|
+
}))
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Build HAR query strings from request params
|
|
70
|
+
*/
|
|
71
|
+
function buildHarQueryStrings(request: BrainfishRESTRequest): HarQueryString[] {
|
|
72
|
+
return request.params
|
|
73
|
+
.filter((param) => param.active)
|
|
74
|
+
.map((param) => ({
|
|
75
|
+
name: param.key,
|
|
76
|
+
value: param.value,
|
|
77
|
+
}))
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Build HAR post params for form data
|
|
82
|
+
*/
|
|
83
|
+
function buildHarPostParams(body: FormDataKeyValue[]): HarParam[] {
|
|
84
|
+
const result: HarParam[] = []
|
|
85
|
+
|
|
86
|
+
for (const entry of body) {
|
|
87
|
+
if (!entry.active) continue
|
|
88
|
+
|
|
89
|
+
if (entry.isFile) {
|
|
90
|
+
// Handle file entries
|
|
91
|
+
const values = Array.isArray(entry.value) ? entry.value : [entry.value]
|
|
92
|
+
for (let i = 0; i < values.length; i++) {
|
|
93
|
+
result.push({
|
|
94
|
+
name: entry.key,
|
|
95
|
+
fileName: entry.key,
|
|
96
|
+
contentType: entry.contentType || 'application/octet-stream',
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
} else {
|
|
100
|
+
result.push({
|
|
101
|
+
name: entry.key,
|
|
102
|
+
value: entry.value as string,
|
|
103
|
+
contentType: entry.contentType,
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return result
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Parse URL-encoded body string to params
|
|
113
|
+
*/
|
|
114
|
+
function parseUrlEncodedBody(body: string): HarParam[] {
|
|
115
|
+
if (!body) return []
|
|
116
|
+
|
|
117
|
+
return body.split('\n').map((line) => {
|
|
118
|
+
const colonIndex = line.indexOf(':')
|
|
119
|
+
if (colonIndex === -1) {
|
|
120
|
+
return { name: line.trim(), value: '' }
|
|
121
|
+
}
|
|
122
|
+
const key = line.slice(0, colonIndex).trim()
|
|
123
|
+
const value = line.slice(colonIndex + 1).trim()
|
|
124
|
+
return { name: key, value }
|
|
125
|
+
})
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Build HAR post data from request body
|
|
130
|
+
*/
|
|
131
|
+
function buildHarPostData(request: BrainfishRESTRequest): HarPostData | undefined {
|
|
132
|
+
const { contentType, body } = request.body
|
|
133
|
+
|
|
134
|
+
if (!contentType || !body) return undefined
|
|
135
|
+
|
|
136
|
+
// Handle form data types
|
|
137
|
+
if (contentType === 'application/x-www-form-urlencoded') {
|
|
138
|
+
return {
|
|
139
|
+
mimeType: contentType,
|
|
140
|
+
params: typeof body === 'string' ? parseUrlEncodedBody(body) : [],
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (contentType === 'multipart/form-data') {
|
|
145
|
+
return {
|
|
146
|
+
mimeType: contentType,
|
|
147
|
+
params: Array.isArray(body) ? buildHarPostParams(body) : [],
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Handle text-based content types (JSON, XML, HTML, plain text)
|
|
152
|
+
return {
|
|
153
|
+
mimeType: contentType,
|
|
154
|
+
text: typeof body === 'string' ? body : JSON.stringify(body),
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Add authentication headers to the request
|
|
160
|
+
*/
|
|
161
|
+
function addAuthHeaders(request: BrainfishRESTRequest, headers: HarHeader[]): HarHeader[] {
|
|
162
|
+
const { auth } = request
|
|
163
|
+
const result = [...headers]
|
|
164
|
+
|
|
165
|
+
if (!auth.authActive) return result
|
|
166
|
+
|
|
167
|
+
switch (auth.authType) {
|
|
168
|
+
case 'basic': {
|
|
169
|
+
if (auth.username && auth.password) {
|
|
170
|
+
const credentials = btoa(`${auth.username}:${auth.password}`)
|
|
171
|
+
result.push({
|
|
172
|
+
name: 'Authorization',
|
|
173
|
+
value: `Basic ${credentials}`,
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
break
|
|
177
|
+
}
|
|
178
|
+
case 'bearer': {
|
|
179
|
+
if (auth.token) {
|
|
180
|
+
result.push({
|
|
181
|
+
name: 'Authorization',
|
|
182
|
+
value: `Bearer ${auth.token}`,
|
|
183
|
+
})
|
|
184
|
+
}
|
|
185
|
+
break
|
|
186
|
+
}
|
|
187
|
+
case 'api-key': {
|
|
188
|
+
if (auth.key && auth.value) {
|
|
189
|
+
if (auth.addTo === 'HEADERS') {
|
|
190
|
+
result.push({
|
|
191
|
+
name: auth.key,
|
|
192
|
+
value: auth.value,
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
break
|
|
197
|
+
}
|
|
198
|
+
// oauth-2 and inherit would need more complex handling
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return result
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Build URL with query parameters for API key auth
|
|
206
|
+
*/
|
|
207
|
+
function buildUrlWithApiKeyAuth(request: BrainfishRESTRequest): string {
|
|
208
|
+
let url = request.endpoint
|
|
209
|
+
|
|
210
|
+
// Add API key to query params if configured
|
|
211
|
+
if (
|
|
212
|
+
request.auth.authActive &&
|
|
213
|
+
request.auth.authType === 'api-key' &&
|
|
214
|
+
request.auth.addTo === 'QUERY_PARAMS' &&
|
|
215
|
+
request.auth.key &&
|
|
216
|
+
request.auth.value
|
|
217
|
+
) {
|
|
218
|
+
const separator = url.includes('?') ? '&' : '?'
|
|
219
|
+
url = `${url}${separator}${encodeURIComponent(request.auth.key)}=${encodeURIComponent(request.auth.value)}`
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return url
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Convert BrainfishRESTRequest to HAR Request format
|
|
227
|
+
*/
|
|
228
|
+
export function buildHarRequest(request: BrainfishRESTRequest): HarRequest {
|
|
229
|
+
const headers = addAuthHeaders(request, buildHarHeaders(request))
|
|
230
|
+
const url = buildUrlWithApiKeyAuth(request)
|
|
231
|
+
|
|
232
|
+
// Add content-type header if body exists and not already present
|
|
233
|
+
if (request.body.contentType && !headers.some((h) => h.name.toLowerCase() === 'content-type')) {
|
|
234
|
+
headers.push({
|
|
235
|
+
name: 'Content-Type',
|
|
236
|
+
value: request.body.contentType,
|
|
237
|
+
})
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
method: request.method,
|
|
242
|
+
url,
|
|
243
|
+
httpVersion: 'HTTP/1.1',
|
|
244
|
+
cookies: [],
|
|
245
|
+
headers,
|
|
246
|
+
queryString: buildHarQueryStrings(request),
|
|
247
|
+
postData: buildHarPostData(request),
|
|
248
|
+
headersSize: -1,
|
|
249
|
+
bodySize: -1,
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Generation Utility
|
|
3
|
+
* Generates code snippets for API requests in various languages
|
|
4
|
+
* Uses server-side API route to run httpsnippet (avoids browser compatibility issues)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { BrainfishRESTRequest } from '../types'
|
|
8
|
+
import { buildHarRequest } from './har'
|
|
9
|
+
import { CodegenDefinitions, findCodegenByName, type CodegenName } from './definitions'
|
|
10
|
+
|
|
11
|
+
export { CodegenDefinitions, findCodegenByName, getCodegenByCategory } from './definitions'
|
|
12
|
+
export type { CodegenName, CodegenDefinition, CodegenCategory } from './definitions'
|
|
13
|
+
|
|
14
|
+
export interface CodegenResult {
|
|
15
|
+
success: boolean
|
|
16
|
+
code?: string
|
|
17
|
+
error?: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Generate code snippet for a request (async - calls server API)
|
|
22
|
+
* @param codegenName The codegen target name (e.g., 'shell-curl', 'javascript-fetch')
|
|
23
|
+
* @param request The Brainfish REST request to generate code for
|
|
24
|
+
* @returns Promise<CodegenResult> with generated code or error
|
|
25
|
+
*/
|
|
26
|
+
export async function generateCodeAsync(
|
|
27
|
+
codegenName: CodegenName,
|
|
28
|
+
request: BrainfishRESTRequest
|
|
29
|
+
): Promise<CodegenResult> {
|
|
30
|
+
try {
|
|
31
|
+
const codegenInfo = findCodegenByName(codegenName)
|
|
32
|
+
|
|
33
|
+
if (!codegenInfo) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: `Unknown code generator: ${codegenName}`,
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Build HAR request from Brainfish request
|
|
41
|
+
const harRequest = buildHarRequest(request)
|
|
42
|
+
|
|
43
|
+
// Call server-side API to generate code
|
|
44
|
+
const response = await fetch('/api/codegen', {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: {
|
|
47
|
+
'Content-Type': 'application/json',
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
harRequest,
|
|
51
|
+
lang: codegenInfo.lang,
|
|
52
|
+
client: codegenInfo.client,
|
|
53
|
+
}),
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
const result = await response.json()
|
|
57
|
+
|
|
58
|
+
if (result.success) {
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
code: result.code,
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
error: result.error || 'Code generation failed',
|
|
68
|
+
}
|
|
69
|
+
} catch (error) {
|
|
70
|
+
console.error('Code generation error:', error)
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
error: error instanceof Error ? error.message : 'Unknown error during code generation',
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Synchronous version that returns a placeholder - use generateCodeAsync for actual code
|
|
80
|
+
* This exists for backwards compatibility with synchronous code
|
|
81
|
+
*/
|
|
82
|
+
export function generateCode(
|
|
83
|
+
codegenName: CodegenName,
|
|
84
|
+
request: BrainfishRESTRequest
|
|
85
|
+
): CodegenResult {
|
|
86
|
+
// For synchronous calls, we can't make API requests
|
|
87
|
+
// Return a placeholder that indicates async is needed
|
|
88
|
+
const codegenInfo = findCodegenByName(codegenName)
|
|
89
|
+
|
|
90
|
+
if (!codegenInfo) {
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
error: `Unknown code generator: ${codegenName}`,
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Generate a simple placeholder based on the request
|
|
98
|
+
// This will be replaced by the async version in the UI
|
|
99
|
+
const url = request.endpoint
|
|
100
|
+
const method = request.method
|
|
101
|
+
|
|
102
|
+
// Simple cURL as fallback
|
|
103
|
+
let code = `curl --request ${method} \\\n --url '${url}'`
|
|
104
|
+
|
|
105
|
+
request.headers.filter(h => h.active).forEach(h => {
|
|
106
|
+
code += ` \\\n --header '${h.key}: ${h.value}'`
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
if (request.body.body && method !== 'GET' && method !== 'HEAD') {
|
|
110
|
+
const bodyStr = typeof request.body.body === 'string'
|
|
111
|
+
? request.body.body
|
|
112
|
+
: JSON.stringify(request.body.body)
|
|
113
|
+
code += ` \\\n --data '${bodyStr}'`
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
success: true,
|
|
118
|
+
code,
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Get the Monaco editor language for a codegen target
|
|
124
|
+
*/
|
|
125
|
+
export function getMonacoLanguage(codegenName: CodegenName): string {
|
|
126
|
+
const def = findCodegenByName(codegenName)
|
|
127
|
+
if (!def) return 'plaintext'
|
|
128
|
+
|
|
129
|
+
const languageMap: Record<string, string> = {
|
|
130
|
+
shell: 'shell',
|
|
131
|
+
javascript: 'javascript',
|
|
132
|
+
node: 'javascript',
|
|
133
|
+
python: 'python',
|
|
134
|
+
go: 'go',
|
|
135
|
+
java: 'java',
|
|
136
|
+
csharp: 'csharp',
|
|
137
|
+
ruby: 'ruby',
|
|
138
|
+
php: 'php',
|
|
139
|
+
swift: 'swift',
|
|
140
|
+
kotlin: 'kotlin',
|
|
141
|
+
rust: 'rust',
|
|
142
|
+
c: 'c',
|
|
143
|
+
powershell: 'powershell',
|
|
144
|
+
clojure: 'clojure',
|
|
145
|
+
objc: 'objective-c',
|
|
146
|
+
ocaml: 'plaintext', // Monaco doesn't have OCaml
|
|
147
|
+
r: 'r',
|
|
148
|
+
http: 'plaintext',
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return languageMap[def.lang] || 'plaintext'
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Get all available codegen targets
|
|
156
|
+
*/
|
|
157
|
+
export function getAvailableCodegens(): typeof CodegenDefinitions {
|
|
158
|
+
return CodegenDefinitions
|
|
159
|
+
}
|