mirror of https://github.com/sveltejs/svelte
parent
012d639b42
commit
99cc26da81
@ -0,0 +1,56 @@
|
|||||||
|
/** ----------------------------------------------------------------------
|
||||||
|
This script gets a list of global objects/interfaces of browser.
|
||||||
|
This process is simple for now, so it is handled without AST parser.
|
||||||
|
see: https://github.com/microsoft/TypeScript/tree/main/lib
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
import http from 'https';
|
||||||
|
|
||||||
|
const get_url = (name) => `https://raw.githubusercontent.com/microsoft/TypeScript/main/lib/lib.${name}.d.ts`;
|
||||||
|
const extract_name = (split) => split.match(/^[a-zA-Z0-9_$]+/)[0];
|
||||||
|
|
||||||
|
const extract_interfaces_and_references = (data) => {
|
||||||
|
const interfaces = [];
|
||||||
|
const references = [];
|
||||||
|
data.split('\n').forEach(line => {
|
||||||
|
const trimmed = line.trim();
|
||||||
|
const split = trimmed.replace(/[\s+]/, ' ').split(' ');
|
||||||
|
if (split[0] === 'interface') interfaces.push(extract_name(split[1]));
|
||||||
|
else if (split[0] === 'declare') interfaces.push(extract_name(split[2]));
|
||||||
|
else if (trimmed.startsWith('/// <reference')) {
|
||||||
|
const reference = trimmed.match(/lib="(.+)"/)[1];
|
||||||
|
if (reference) references.push(reference);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return { interfaces, references };
|
||||||
|
};
|
||||||
|
|
||||||
|
const do_get = (url) => new Promise((resolve, reject) => {
|
||||||
|
http.get(url, (res) => {
|
||||||
|
let body = '';
|
||||||
|
res.setEncoding('utf8');
|
||||||
|
res.on('data', (chunk) => body += chunk);
|
||||||
|
res.on('end', () => resolve(body));
|
||||||
|
}).on('error', (e) => {
|
||||||
|
console.error(e.message);
|
||||||
|
reject(e);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const get_interfaces = async (name) => {
|
||||||
|
const res = [];
|
||||||
|
const body = await do_get(get_url(name));
|
||||||
|
const { interfaces, references } = extract_interfaces_and_references(body);
|
||||||
|
res.push(...interfaces);
|
||||||
|
const chile_interfaces = await Promise.all(references.map(get_interfaces));
|
||||||
|
chile_interfaces.forEach(i => res.push(...i));
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const interfaces = await get_interfaces('es2021.full');
|
||||||
|
// MEMO: add additional objects/interfaces which existed in `src/compiler/utils/names.ts`
|
||||||
|
// before this script was introduced but could not be retrieved by this process.
|
||||||
|
interfaces.push(...['globalThis', 'InternalError', 'process', 'undefined']);
|
||||||
|
new Set(interfaces.sort()).forEach((i) => console.log(`'${i}',`));
|
||||||
|
})();
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue