scripts/update-schema.mjs (20 lines of code) (raw):
import fs from 'fs';
import { Readable } from 'stream';
import { finished } from 'stream/promises';
function getSchemaUrl(version) {
return `https://raw.githubusercontent.com/elastic/elasticsearch-specification/${version}/output/schema/schema.json`;
}
const packageJson = JSON.parse(fs.readFileSync('./package.json'));
const majorMinorVersion = packageJson.version.split(".").slice(0, 2).join(".");
let version = majorMinorVersion;
let response = await fetch(getSchemaUrl(version));
if (response.status === 404) {
version = 'main';
response = await fetch(getSchemaUrl(version));
}
if (response.status !== 200) {
throw new Error(`Cannot download schema for ${majorMinorVersion}`);
}
console.log(`Updated schema to "${version}" for version ${majorMinorVersion}.`);
const fileStream = fs.createWriteStream('src/schema.json');
await finished(Readable.fromWeb(response.body).pipe(fileStream));