diff --git a/.changeset/consolidate-config.md b/.changeset/consolidate-config.md new file mode 100644 index 000000000..5e6880f65 --- /dev/null +++ b/.changeset/consolidate-config.md @@ -0,0 +1,6 @@ +--- +"@workflow/builders": patch +"@workflow/nitro": patch +--- + +Consolidate builder configuration patterns diff --git a/packages/builders/src/config-helpers.ts b/packages/builders/src/config-helpers.ts new file mode 100644 index 000000000..19d6de5e4 --- /dev/null +++ b/packages/builders/src/config-helpers.ts @@ -0,0 +1,22 @@ +import type { WorkflowConfig } from './types.js'; + +/** + * Creates a partial configuration for builders that don't use bundle paths directly. + * Used by framework integrations like Nitro where the builder computes paths internally. + */ +export function createBaseBuilderConfig(options: { + workingDir: string; + dirs?: string[]; + watch?: boolean; + externalPackages?: string[]; +}): Omit { + return { + dirs: options.dirs ?? ['workflows'], + workingDir: options.workingDir, + watch: options.watch, + stepsBundlePath: '', // Not used by base builder methods + workflowsBundlePath: '', // Not used by base builder methods + webhookBundlePath: '', // Not used by base builder methods + externalPackages: options.externalPackages, + }; +} diff --git a/packages/builders/src/index.ts b/packages/builders/src/index.ts index 82c261956..aec4d3303 100644 --- a/packages/builders/src/index.ts +++ b/packages/builders/src/index.ts @@ -1,6 +1,7 @@ export type { WorkflowManifest } from './apply-swc-transform.js'; export { applySwcTransform } from './apply-swc-transform.js'; export { BaseBuilder } from './base-builder.js'; +export { createBaseBuilderConfig } from './config-helpers.js'; export { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js'; export { createDiscoverEntriesPlugin } from './discover-entries-esbuild-plugin.js'; export { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js'; diff --git a/packages/nitro/src/builders.ts b/packages/nitro/src/builders.ts index f054ce880..9457092fe 100644 --- a/packages/nitro/src/builders.ts +++ b/packages/nitro/src/builders.ts @@ -1,21 +1,20 @@ import { mkdir, readFile, writeFile } from 'node:fs/promises'; -import { BaseBuilder, VercelBuildOutputAPIBuilder } from '@workflow/builders'; +import { + BaseBuilder, + VercelBuildOutputAPIBuilder, + createBaseBuilderConfig, +} from '@workflow/builders'; import type { Nitro } from 'nitro/types'; import { join, resolve } from 'pathe'; -const CommonBuildOptions = { - buildTarget: 'next' as const, // unused in base - stepsBundlePath: '', // unused in base - workflowsBundlePath: '', // unused in base - webhookBundlePath: '', // unused in base -}; - export class VercelBuilder extends VercelBuildOutputAPIBuilder { constructor(nitro: Nitro) { super({ - ...CommonBuildOptions, - dirs: getWorkflowDirs(nitro), - workingDir: nitro.options.rootDir, + ...createBaseBuilderConfig({ + workingDir: nitro.options.rootDir, + dirs: getWorkflowDirs(nitro), + }), + buildTarget: 'vercel-build-output-api', }); } override async build(): Promise { @@ -36,10 +35,12 @@ export class LocalBuilder extends BaseBuilder { constructor(nitro: Nitro) { const outDir = join(nitro.options.buildDir, 'workflow'); super({ - ...CommonBuildOptions, - dirs: getWorkflowDirs(nitro), - workingDir: nitro.options.rootDir, - watch: nitro.options.dev, + ...createBaseBuilderConfig({ + workingDir: nitro.options.rootDir, + watch: nitro.options.dev, + dirs: getWorkflowDirs(nitro), + }), + buildTarget: 'next', // Placeholder, not actually used }); this.#outDir = outDir; }