Skip to content

Commit 63e99b6

Browse files
authored
feat: Add check option (openapi-ts#1768)
* feat: Add check option * Create stupid-pans-hug.md
1 parent b78600d commit 63e99b6

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

bin/cli.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Options
1616
--output, -o Specify output file (if not specified in redocly.yaml)
1717
--enum Export true TS enums instead of unions
1818
--enum-values Export enum values as arrays
19+
--check Check that the generated types are up-to-date. (default: false)
1920
--export-type, -t Export top-level \`type\` instead of \`interface\`
2021
--immutable Generate readonly types
2122
--additional-properties Treat schema objects as if \`additionalProperties: true\` is set
@@ -64,6 +65,7 @@ const flags = parser(args, {
6465
"emptyObjectsUnknown",
6566
"enum",
6667
"enumValues",
68+
"check",
6769
"excludeDeprecated",
6870
"exportType",
6971
"help",
@@ -90,6 +92,23 @@ function normalizeOutput(output) {
9092
return new URL(output, CWD);
9193
}
9294

95+
/**
96+
* Check if the generated types are up-to-date.
97+
* @param {string} current - The current generated types.
98+
* @param {URL} outputPath - The path to the output file.
99+
*/
100+
function checkStaleOutput(current, outputPath) {
101+
if (flags.check) {
102+
const previous = fs.readFileSync(outputPath, "utf8");
103+
if (current === previous) {
104+
process.exit(0);
105+
} else {
106+
error("Generated types are not up-to-date!");
107+
process.exit(1);
108+
}
109+
}
110+
}
111+
93112
/**
94113
* @param {string | URL} schema
95114
* @param {@type import('@redocly/openapi-core').Config} redocly
@@ -174,6 +193,7 @@ async function main() {
174193
}
175194
const result = await generateSchema(new URL(api.root, configRoot), { redocly });
176195
const outFile = new URL(api[REDOC_CONFIG_KEY].output, configRoot);
196+
checkStaleOutput(result, outFile);
177197
fs.mkdirSync(new URL(".", outFile), { recursive: true });
178198
fs.writeFileSync(outFile, result, "utf8");
179199
done(name, api[REDOC_CONFIG_KEY].output, performance.now() - timeStart);
@@ -192,6 +212,7 @@ async function main() {
192212
process.stdout.write(result);
193213
} else {
194214
const outFile = normalizeOutput(flags.output);
215+
checkStaleOutput(result, outFile);
195216
fs.mkdirSync(new URL(".", outFile), { recursive: true });
196217
fs.writeFileSync(outFile, result, "utf8");
197218
done("stdin", flags.output, performance.now() - timeStart);
@@ -215,6 +236,7 @@ async function main() {
215236
process.stdout.write(result);
216237
} else {
217238
const outFile = normalizeOutput(flags.output);
239+
checkStaleOutput(result, outFile);
218240
fs.mkdirSync(new URL(".", outFile), { recursive: true });
219241
fs.writeFileSync(outFile, result, "utf8");
220242
done(input, flags.output, performance.now() - timeStart);

0 commit comments

Comments
 (0)