Skip to content

Commit d6ccef7

Browse files
committed
feat: Add skip option
# Conflicts: # src/index.ts # test/skip/skip.spec.ts
1 parent 82ee2fb commit d6ccef7

2 files changed

Lines changed: 52 additions & 70 deletions

File tree

src/index.ts

Lines changed: 21 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -139,43 +139,28 @@ export function GraphQLCodegen(options?: Options): Plugin {
139139
debugLog(...args);
140140
};
141141

142+
const shouldSkipGeneration = async (context: SkipContext) =>
143+
typeof skip === "function" ? await skip(context) : skip;
144+
142145
const generateWithOverride = async (
143146
overrideConfig: Partial<CodegenConfig>,
147+
skipContext: SkipContext,
144148
) => {
145-
const currentConfig = codegenContext.getConfig();
149+
if (await shouldSkipGeneration(skipContext)) {
150+
log("Generation skipped", skipContext);
151+
return;
152+
}
146153

147-
return await generate({
154+
const currentConfig = codegenContext.getConfig();
155+
await generate({
148156
...currentConfig,
149157
...configOverride,
150158
...overrideConfig,
151159
// Vite handles file watching
152160
watch: false,
153161
});
154-
};
155-
156-
const shouldSkipGeneration = async (context: SkipContext) => {
157-
const skipValue = typeof skip === "function" ? await skip(context) : skip;
158-
159-
log("Skip evaluated", {
160-
...context,
161-
skip: skipValue,
162-
});
163-
164-
return skipValue;
165-
};
166-
167-
const generateIfNotSkipped = async (
168-
context: SkipContext,
169-
overrideConfig: Partial<CodegenConfig>,
170-
) => {
171-
if (await shouldSkipGeneration(context)) {
172-
log("Generation skipped", context);
173-
return false;
174-
}
175-
176-
await generateWithOverride(overrideConfig);
177162

178-
return true;
163+
log(`Generation successful on ${skipContext.trigger}`);
179164
};
180165

181166
if (options) log("Plugin initialized with options:", options);
@@ -206,15 +191,9 @@ export function GraphQLCodegen(options?: Options): Plugin {
206191
if (!runOnStart) return;
207192

208193
try {
209-
const generated = await generateIfNotSkipped(
210-
{ trigger: "start" },
211-
configOverrideOnStart,
212-
);
213-
log(
214-
generated
215-
? "Generation successful on start"
216-
: "Generation skipped on start",
217-
);
194+
await generateWithOverride(configOverrideOnStart, {
195+
trigger: "start",
196+
});
218197
} catch (error) {
219198
// GraphQL Codegen handles logging useful errors
220199
log("Generation failed on start");
@@ -226,15 +205,9 @@ export function GraphQLCodegen(options?: Options): Plugin {
226205
if (!runOnBuild) return;
227206

228207
try {
229-
const generated = await generateIfNotSkipped(
230-
{ trigger: "build" },
231-
configOverrideOnBuild,
232-
);
233-
log(
234-
generated
235-
? "Generation successful on build"
236-
: "Generation skipped on build",
237-
);
208+
await generateWithOverride(configOverrideOnBuild, {
209+
trigger: "build",
210+
});
238211
} catch (error) {
239212
// GraphQL Codegen handles logging useful errors
240213
log("Generation failed on build");
@@ -257,15 +230,10 @@ export function GraphQLCodegen(options?: Options): Plugin {
257230
log("File is in match cache");
258231

259232
try {
260-
const generated = await generateIfNotSkipped(
261-
{ trigger: "watch", filePath },
262-
configOverrideWatcher,
263-
);
264-
log(
265-
generated
266-
? "Generation successful in file watcher"
267-
: "Generation skipped in file watcher",
268-
);
233+
await generateWithOverride(configOverrideWatcher, {
234+
trigger: "watch",
235+
filePath,
236+
});
269237
} catch {
270238
// GraphQL Codegen handles logging useful errors
271239
log("Generation failed in file watcher");

test/skip/skip.spec.ts

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { promises as fs } from "node:fs";
22
import { createServer, type UserConfig } from "vite";
33
import { afterEach, describe, expect, it, vi, type TestContext } from "vitest";
4-
import codegen, { type Options } from "../../src/index";
4+
import codegen, { type Options, type SkipContext } from "../../src/index";
55

66
const codegenGenerateMock = vi.hoisted(() => vi.fn());
77
vi.mock("@graphql-codegen/cli", async (importOriginal) => {
@@ -108,12 +108,13 @@ describe("skip", () => {
108108
skip: false,
109109
},
110110
{
111-
describe: "when skip returns false",
112-
skip: () => false,
111+
describe: "when skip returns false by matching start trigger",
112+
skip: ({ trigger }: SkipContext) => trigger !== "start",
113113
},
114114
{
115-
describe: "when skip resolves false",
116-
skip: () => Promise.resolve(false),
115+
describe: "when skip resolves false by matching start trigger",
116+
skip: ({ trigger }: SkipContext) =>
117+
Promise.resolve(trigger !== "start"),
117118
},
118119
])("it should run codegen $describe", async ({ skip }, context) => {
119120
await startServer({ skip }, context as TestContextWithServer);
@@ -137,12 +138,13 @@ describe("skip", () => {
137138
skip: true,
138139
},
139140
{
140-
describe: "when skip returns true",
141-
skip: () => true,
141+
describe: "when skip returns true by matching start trigger",
142+
skip: ({ trigger }: SkipContext) => trigger === "start",
142143
},
143144
{
144-
describe: "when skip resolves true",
145-
skip: () => Promise.resolve(true),
145+
describe: "when skip resolves true by matching start trigger",
146+
skip: ({ trigger }: SkipContext) =>
147+
Promise.resolve(trigger === "start"),
146148
},
147149
])("it should skip codegen $describe", async ({ skip }, context) => {
148150
await startServer({ skip }, context as TestContextWithServer);
@@ -162,12 +164,18 @@ describe("skip", () => {
162164
skip: false,
163165
},
164166
{
165-
describe: "when skip returns false",
166-
skip: () => false,
167+
describe: "when skip returns false by matching watch trigger",
168+
skip: ({ trigger }: SkipContext) => trigger !== "watch",
167169
},
168170
{
169-
describe: "when skip resolves false",
170-
skip: () => Promise.resolve(false),
171+
describe: "when skip resolves false by matching watch trigger",
172+
skip: ({ trigger }: SkipContext) =>
173+
Promise.resolve(trigger !== "watch"),
174+
},
175+
{
176+
describe: "when skip resolves false by matching filePath",
177+
skip: async ({ filePath }: SkipContext) =>
178+
filePath !== (await fs.realpath(QUERY_FILE)),
171179
},
172180
])("it should run codegen $describe", async ({ skip }, context) => {
173181
await startServer(
@@ -197,12 +205,18 @@ describe("skip", () => {
197205
skip: true,
198206
},
199207
{
200-
describe: "when skip returns true",
201-
skip: () => true,
208+
describe: "when skip returns true by matching watch trigger",
209+
skip: ({ trigger }: SkipContext) => trigger === "watch",
210+
},
211+
{
212+
describe: "when skip resolves true by matching watch trigger",
213+
skip: ({ trigger }: SkipContext) =>
214+
Promise.resolve(trigger === "watch"),
202215
},
203216
{
204-
describe: "when skip resolves true",
205-
skip: () => Promise.resolve(true),
217+
describe: "when skip resolves true by matching filePath",
218+
skip: async ({ filePath }: SkipContext) =>
219+
filePath === (await fs.realpath(QUERY_FILE)),
206220
},
207221
])("it should skip codegen $describe", async ({ skip }, context) => {
208222
await startServer(

0 commit comments

Comments
 (0)