chore: watch for messages changes in dev generate script

pull/15950/head
paoloricciuti 4 months ago
parent 42e7e8168d
commit 9b1b9417ae

@ -136,7 +136,7 @@
],
"scripts": {
"build": "node scripts/process-messages && rollup -c && pnpm generate:types && node scripts/check-treeshakeability.js",
"dev": "node scripts/process-messages && rollup -cw",
"dev": "node scripts/process-messages -w & rollup -cw",
"check": "tsc --project tsconfig.runtime.json && tsc && cd ./tests/types && tsc",
"check:watch": "tsc --watch",
"generate:version": "node ./scripts/generate-version.js",

@ -4,11 +4,23 @@ import * as acorn from 'acorn';
import { walk } from 'zimmerframe';
import * as esrap from 'esrap';
const DIR = '../../documentation/docs/98-reference/.generated';
// 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();
const DIR = '../../documentation/docs/98-reference/.generated';
fs.rmSync(DIR, { force: true, recursive: true });
fs.mkdirSync(DIR);
@ -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);
@ -407,3 +431,19 @@ 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');
}
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();
});
}
await run();

Loading…
Cancel
Save