Skip to content

Commit ada4778

Browse files
add language client examples to YAML files
1 parent e4094f4 commit ada4778

File tree

652 files changed

+38190
-875
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

652 files changed

+38190
-875
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ setup: ## Install dependencies for contrib target
4343
@npm install --prefix validator
4444
@npm install --prefix specification
4545
@npm install @redocly/cli
46+
@npm install --prefix docs/examples
4647

4748
clean-dep: ## Clean npm dependencies
4849
@rm -rf compiler/node_modules
@@ -74,6 +75,9 @@ overlay-docs: ## Apply overlays to OpenAPI documents
7475
rm output/openapi/elasticsearch-serverless-openapi.tmp*.json
7576
rm output/openapi/elasticsearch-openapi.tmp*.json
7677

78+
generate-language-examples:
79+
@node docs/examples/generate-language-examples.js
80+
7781
lint-docs: ## Lint the OpenAPI documents after overlays
7882
@npx @redocly/cli lint "output/openapi/elasticsearch-*.json" --config "docs/linters/redocly.yaml" --format stylish --max-problems 500
7983

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
const { parseDocument: yamlParseDocument } = require('yaml');
4+
const { convertRequests } = require('@elastic/request-converter');
5+
6+
const LANGUAGES = ['Python', 'JavaScript', 'Ruby', 'PHP', 'curl'];
7+
8+
async function generateLanguages(example) {
9+
const doc = yamlParseDocument(await fs.promises.readFile(example, 'utf8'));
10+
const data = doc.toJS();
11+
let request = data.method_request;
12+
if (data.value) {
13+
if (typeof data.value === 'string') {
14+
request += '\n' + data.value;
15+
}
16+
else {
17+
request += '\n' + JSON.stringify(data.value);
18+
}
19+
}
20+
data.alternatives = {};
21+
for (const lang of LANGUAGES) {
22+
data.alternatives[lang] = (await convertRequests(request, lang, {})).trim();
23+
}
24+
doc.delete('alternatives');
25+
doc.add(doc.createPair('alternatives', data.alternatives));
26+
await fs.promises.writeFile(example, doc.toString());
27+
}
28+
29+
async function* walkExamples(dir) {
30+
for await (const d of await fs.promises.opendir(dir)) {
31+
const entry = path.join(dir, d.name);
32+
if (d.isDirectory()) {
33+
yield* walkExamples(entry);
34+
}
35+
else if (d.isFile() && entry.includes('/examples/request/') && entry.endsWith('.yaml')) {
36+
yield entry;
37+
}
38+
}
39+
}
40+
41+
async function main() {
42+
let count = 0;
43+
let errors = 0;
44+
for await (const example of walkExamples('./specification/')) {
45+
try {
46+
await generateLanguages(example);
47+
}
48+
catch (err) {
49+
console.log(`${example}: ${err}`);
50+
errors += 1;
51+
}
52+
count += 1;
53+
}
54+
console.log(`${count} examples processed, ${errors} errors.`);
55+
}
56+
57+
main();

0 commit comments

Comments
 (0)