From ba6346141ff1d8c9b261dd7dd95e0700c81859c1 Mon Sep 17 00:00:00 2001 From: Florian Bernd Date: Wed, 22 Jul 2026 14:29:27 +0200 Subject: [PATCH] Generate C# language examples via the .NET request converter --- Makefile | 2 +- docs/examples/generate-language-examples.js | 30 +++++++++++++++++---- docs/examples/package.json | 1 + 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 7eab0fb236..62f6d30b29 100644 --- a/Makefile +++ b/Makefile @@ -82,7 +82,7 @@ overlay-docs: ## Apply overlays to OpenAPI documents rm output/openapi/elasticsearch-openapi-docs.tmp*.json generate-language-examples: - @npm update --prefix docs/examples @elastic/request-converter + @npm update --prefix docs/examples @elastic/request-converter @elastic/request-converter-dotnet @node docs/examples/generate-language-examples.js @npm run format:fix-examples --prefix compiler diff --git a/docs/examples/generate-language-examples.js b/docs/examples/generate-language-examples.js index 30e7c3ccc8..a375373438 100644 --- a/docs/examples/generate-language-examples.js +++ b/docs/examples/generate-language-examples.js @@ -24,7 +24,14 @@ const { convertRequests, loadSchema } = require('@elastic/request-converter'); const {parseRequest} = require("@elastic/request-converter/dist/parse"); const {JavaCaller} = require("java-caller"); -const LANGUAGES = ['Python', 'JavaScript', 'Ruby', 'PHP', 'curl']; +const LANGUAGES = ['Python', 'JavaScript', 'Ruby', 'PHP', 'curl', 'C#']; + +// The C# converter runs out of process in a .NET WASM bundle and has known +// endpoint-coverage gaps; a failed conversion skips that language for the +// example instead of aborting the whole run. +const BEST_EFFORT_LANGUAGES = new Set(['C#']); +const conversionFailures = []; + const EXAMPLES_JSON = 'docs/examples/languageExamples.json'; let languageExamples = {}; @@ -46,10 +53,17 @@ async function generateLanguages(example) { } let alternatives = []; for (const lang of LANGUAGES) { - alternatives.push({ - language: lang, - code: (await convertRequests(request, lang, {})).trim(), - }); + try { + alternatives.push({ + language: lang, + code: (await convertRequests(request, lang, {})).trim(), + }); + } catch (err) { + if (!BEST_EFFORT_LANGUAGES.has(lang)) { + throw err; + } + conversionFailures.push({ example, lang, message: err.message }); + } } alternatives = alternatives.concat((languageExamples[example] ?? []).filter(pair => !LANGUAGES.includes(pair.language))); @@ -149,6 +163,12 @@ async function main() { } await fs.promises.writeFile(EXAMPLES_JSON, JSON.stringify(languageExamples, null, 2)); console.log(`${count} examples processed, ${errors} errors.`); + if (conversionFailures.length > 0) { + console.log(`\n${conversionFailures.length} best-effort conversions skipped:`); + for (const failure of conversionFailures) { + console.log(` [${failure.lang}] ${failure.example}: ${failure.message}`); + } + } } main(); diff --git a/docs/examples/package.json b/docs/examples/package.json index f4fe039de0..40fa8c959e 100644 --- a/docs/examples/package.json +++ b/docs/examples/package.json @@ -4,6 +4,7 @@ }, "dependencies": { "@elastic/request-converter": "^9.1.2", + "@elastic/request-converter-dotnet": "~9.5.0", "@redocly/cli": "^1.34.5", "yaml": "^2.8.0", "java-caller": "^4.1.1"