chore: watch for messages changes in dev generate script (#15950)

* chore: watch for messages changes in dev generate script

* no need for this to be async

* tweak

* guard

* only create one timeout

---------

Co-authored-by: Rich Harris <rich.harris@vercel.com>
pull/15956/head
Paolo Ricciuti 4 months ago committed by GitHub
parent 21bf947ca8
commit b7b393d50f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -136,7 +136,7 @@
], ],
"scripts": { "scripts": {
"build": "node scripts/process-messages && rollup -c && pnpm generate:types && node scripts/check-treeshakeability.js", "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": "tsc --project tsconfig.runtime.json && tsc && cd ./tests/types && tsc",
"check:watch": "tsc --watch", "check:watch": "tsc --watch",
"generate:version": "node ./scripts/generate-version.js", "generate:version": "node ./scripts/generate-version.js",

@ -1,14 +1,19 @@
// @ts-check // @ts-check
import process from 'node:process';
import fs from 'node:fs'; import fs from 'node:fs';
import * as acorn from 'acorn'; import * as acorn from 'acorn';
import { walk } from 'zimmerframe'; import { walk } from 'zimmerframe';
import * as esrap from 'esrap'; import * as esrap from 'esrap';
const DIR = '../../documentation/docs/98-reference/.generated';
const watch = process.argv.includes('-w');
function run() {
/** @type {Record<string, Record<string, { messages: string[], details: string | null }>>} */ /** @type {Record<string, Record<string, { messages: string[], details: string | null }>>} */
const messages = {}; const messages = {};
const seen = new Set(); const seen = new Set();
const DIR = '../../documentation/docs/98-reference/.generated';
fs.rmSync(DIR, { force: true, recursive: true }); fs.rmSync(DIR, { force: true, recursive: true });
fs.mkdirSync(DIR); fs.mkdirSync(DIR);
@ -54,6 +59,7 @@ for (const category of fs.readdirSync('messages')) {
} }
sorted.sort((a, b) => (a.code < b.code ? -1 : 1)); sorted.sort((a, b) => (a.code < b.code ? -1 : 1));
fs.writeFileSync( fs.writeFileSync(
`messages/${category}/${file}`, `messages/${category}/${file}`,
sorted.map((x) => x._.trim()).join('\n\n') + '\n' sorted.map((x) => x._.trim()).join('\n\n') + '\n'
@ -65,7 +71,10 @@ for (const category of fs.readdirSync('messages')) {
'<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n' + '<!-- This file is generated by scripts/process-messages/index.js. Do not edit! -->\n\n' +
Object.entries(messages[category]) Object.entries(messages[category])
.map(([code, { messages, details }]) => { .map(([code, { messages, details }]) => {
const chunks = [`### ${code}`, ...messages.map((message) => '```\n' + message + '\n```')]; const chunks = [
`### ${code}`,
...messages.map((message) => '```\n' + message + '\n```')
];
if (details) { if (details) {
chunks.push(details); chunks.push(details);
@ -407,3 +416,26 @@ transform('client-errors', 'src/internal/client/errors.js');
transform('server-errors', 'src/internal/server/errors.js'); transform('server-errors', 'src/internal/server/errors.js');
transform('shared-errors', 'src/internal/shared/errors.js'); transform('shared-errors', 'src/internal/shared/errors.js');
transform('shared-warnings', 'src/internal/shared/warnings.js'); transform('shared-warnings', 'src/internal/shared/warnings.js');
}
if (watch) {
let running = false;
let timeout;
fs.watch('messages', { recursive: true }, (type, file) => {
if (running) {
timeout ??= setTimeout(() => {
running = false;
timeout = null;
});
} else {
running = true;
// eslint-disable-next-line no-console
console.log('Regenerating messages...');
run();
}
});
}
run();

Loading…
Cancel
Save