in src/support.ts [101:135]
async function getReleasesDocument(): Promise<ReleasesDocument> {
const downloaded = await new Promise<string | undefined>((ok, ko) => {
const request = get(
new URL('https://raw.githubusercontent.com/aws/jsii-compiler/main/releases.json'),
(response) => {
if (response.statusCode === 404) {
return ok(undefined);
}
if (response.statusCode !== 200) {
return ko(`received error response: HTTP ${response.statusCode} - ${response.statusMessage}`);
}
response.once('error', ko);
const chunks = new Array<Buffer>();
response.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
response.once('end', () => ok(Buffer.concat(chunks).toString('utf-8')));
},
);
request.once('abort', () => ko('request aborted'));
request.once('timeout', () => ko('request timed out'));
request.once('error', ko);
request.end();
}).catch((cause) => {
if (process.env.JSII_DEBUG) {
console.error(`Could not download releases.json from GitHub: ${cause}`);
}
undefined;
});
return JSON.parse(downloaded ?? readFileSync(join(__dirname, '..', 'releases.json'), 'utf-8'), (key, value) => {
if (key !== 'maintenance') {
return value;
}
return Object.fromEntries(Object.entries(value).map(([release, date]) => [release, new Date(date as string)]));
}) as ReleasesDocument;
}