|
|
|
@ -4,15 +4,27 @@ import * as acorn from 'acorn';
|
|
|
|
|
import { walk } from 'zimmerframe';
|
|
|
|
|
import * as esrap from 'esrap';
|
|
|
|
|
|
|
|
|
|
/** @type {Record<string, Record<string, { messages: string[], details: string | null }>>} */
|
|
|
|
|
const messages = {};
|
|
|
|
|
const seen = new Set();
|
|
|
|
|
|
|
|
|
|
const DIR = '../../documentation/docs/98-reference/.generated';
|
|
|
|
|
fs.rmSync(DIR, { force: true, recursive: true });
|
|
|
|
|
fs.mkdirSync(DIR);
|
|
|
|
|
|
|
|
|
|
for (const category of fs.readdirSync('messages')) {
|
|
|
|
|
// eslint-disable-next-line n/prefer-global/process
|
|
|
|
|
const [, , watch_flag] = process.argv;
|
|
|
|
|
|
|
|
|
|
const watch = watch_flag === '-w';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @type {((value?: any) => void) | undefined}
|
|
|
|
|
*/
|
|
|
|
|
let resolve_writing_promise;
|
|
|
|
|
|
|
|
|
|
async function run() {
|
|
|
|
|
/** @type {Record<string, Record<string, { messages: string[], details: string | null }>>} */
|
|
|
|
|
const messages = {};
|
|
|
|
|
const seen = new Set();
|
|
|
|
|
|
|
|
|
|
fs.rmSync(DIR, { force: true, recursive: true });
|
|
|
|
|
fs.mkdirSync(DIR);
|
|
|
|
|
|
|
|
|
|
for (const category of fs.readdirSync('messages')) {
|
|
|
|
|
if (category.startsWith('.')) continue;
|
|
|
|
|
|
|
|
|
|
messages[category] = {};
|
|
|
|
@ -54,10 +66,19 @@ for (const category of fs.readdirSync('messages')) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sorted.sort((a, b) => (a.code < b.code ? -1 : 1));
|
|
|
|
|
|
|
|
|
|
const writing_promise = watch
|
|
|
|
|
? new Promise((resolve) => {
|
|
|
|
|
resolve_writing_promise = resolve;
|
|
|
|
|
})
|
|
|
|
|
: Promise.resolve();
|
|
|
|
|
|
|
|
|
|
fs.writeFileSync(
|
|
|
|
|
`messages/${category}/${file}`,
|
|
|
|
|
sorted.map((x) => x._.trim()).join('\n\n') + '\n'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await writing_promise;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fs.writeFileSync(
|
|
|
|
@ -65,7 +86,10 @@ for (const category of fs.readdirSync('messages')) {
|
|
|
|
|
'<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n' +
|
|
|
|
|
Object.entries(messages[category])
|
|
|
|
|
.map(([code, { messages, details }]) => {
|
|
|
|
|
const chunks = [`### ${code}`, ...messages.map((message) => '```\n' + message + '\n```')];
|
|
|
|
|
const chunks = [
|
|
|
|
|
`### ${code}`,
|
|
|
|
|
...messages.map((message) => '```\n' + message + '\n```')
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
if (details) {
|
|
|
|
|
chunks.push(details);
|
|
|
|
@ -77,13 +101,13 @@ for (const category of fs.readdirSync('messages')) {
|
|
|
|
|
.join('\n\n') +
|
|
|
|
|
'\n'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
/**
|
|
|
|
|
* @param {string} name
|
|
|
|
|
* @param {string} dest
|
|
|
|
|
*/
|
|
|
|
|
function transform(name, dest) {
|
|
|
|
|
function transform(name, dest) {
|
|
|
|
|
const source = fs
|
|
|
|
|
.readFileSync(new URL(`./templates/${name}.js`, import.meta.url), 'utf-8')
|
|
|
|
|
.replace(/\r\n/g, '\n');
|
|
|
|
@ -397,13 +421,29 @@ function transform(name, dest) {
|
|
|
|
|
module.code,
|
|
|
|
|
'utf-8'
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
transform('compile-errors', 'src/compiler/errors.js');
|
|
|
|
|
transform('compile-warnings', 'src/compiler/warnings.js');
|
|
|
|
|
|
|
|
|
|
transform('client-warnings', 'src/internal/client/warnings.js');
|
|
|
|
|
transform('client-errors', 'src/internal/client/errors.js');
|
|
|
|
|
transform('server-errors', 'src/internal/server/errors.js');
|
|
|
|
|
transform('shared-errors', 'src/internal/shared/errors.js');
|
|
|
|
|
transform('shared-warnings', 'src/internal/shared/warnings.js');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
transform('compile-errors', 'src/compiler/errors.js');
|
|
|
|
|
transform('compile-warnings', 'src/compiler/warnings.js');
|
|
|
|
|
if (watch) {
|
|
|
|
|
fs.watch('messages', { recursive: true }, () => {
|
|
|
|
|
if (resolve_writing_promise) {
|
|
|
|
|
resolve_writing_promise();
|
|
|
|
|
resolve_writing_promise = undefined;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
|
console.log('Regenerating messages...');
|
|
|
|
|
run();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
transform('client-warnings', 'src/internal/client/warnings.js');
|
|
|
|
|
transform('client-errors', 'src/internal/client/errors.js');
|
|
|
|
|
transform('server-errors', 'src/internal/server/errors.js');
|
|
|
|
|
transform('shared-errors', 'src/internal/shared/errors.js');
|
|
|
|
|
transform('shared-warnings', 'src/internal/shared/warnings.js');
|
|
|
|
|
await run();
|
|
|
|
|