@workflow/cli 4.0.1-beta.6 → 4.0.1-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE.md +201 -21
  2. package/dist/commands/build.d.ts.map +1 -1
  3. package/dist/commands/build.js +1 -2
  4. package/dist/commands/build.js.map +1 -1
  5. package/dist/commands/inspect.d.ts.map +1 -1
  6. package/dist/commands/inspect.js +21 -4
  7. package/dist/commands/inspect.js.map +1 -1
  8. package/dist/lib/config/types.d.ts +3 -15
  9. package/dist/lib/config/types.d.ts.map +1 -1
  10. package/dist/lib/config/types.js +1 -8
  11. package/dist/lib/config/types.js.map +1 -1
  12. package/dist/lib/inspect/output.d.ts +1 -0
  13. package/dist/lib/inspect/output.d.ts.map +1 -1
  14. package/dist/lib/inspect/output.js +105 -1
  15. package/dist/lib/inspect/output.js.map +1 -1
  16. package/package.json +12 -14
  17. package/dist/lib/builders/apply-swc-transform.d.ts +0 -24
  18. package/dist/lib/builders/apply-swc-transform.d.ts.map +0 -1
  19. package/dist/lib/builders/apply-swc-transform.js +0 -38
  20. package/dist/lib/builders/apply-swc-transform.js.map +0 -1
  21. package/dist/lib/builders/base-builder.d.ts +0 -45
  22. package/dist/lib/builders/base-builder.d.ts.map +0 -1
  23. package/dist/lib/builders/base-builder.js +0 -466
  24. package/dist/lib/builders/base-builder.js.map +0 -1
  25. package/dist/lib/builders/discover-entries-esbuild-plugin.d.ts +0 -11
  26. package/dist/lib/builders/discover-entries-esbuild-plugin.d.ts.map +0 -1
  27. package/dist/lib/builders/discover-entries-esbuild-plugin.js +0 -84
  28. package/dist/lib/builders/discover-entries-esbuild-plugin.js.map +0 -1
  29. package/dist/lib/builders/next-build.d.ts +0 -11
  30. package/dist/lib/builders/next-build.d.ts.map +0 -1
  31. package/dist/lib/builders/next-build.js +0 -331
  32. package/dist/lib/builders/next-build.js.map +0 -1
  33. package/dist/lib/builders/node-module-esbuild-plugin.d.ts +0 -3
  34. package/dist/lib/builders/node-module-esbuild-plugin.d.ts.map +0 -1
  35. package/dist/lib/builders/node-module-esbuild-plugin.js +0 -24
  36. package/dist/lib/builders/node-module-esbuild-plugin.js.map +0 -1
  37. package/dist/lib/builders/node-module-esbuild-plugin.test.d.ts +0 -2
  38. package/dist/lib/builders/node-module-esbuild-plugin.test.d.ts.map +0 -1
  39. package/dist/lib/builders/node-module-esbuild-plugin.test.js +0 -128
  40. package/dist/lib/builders/node-module-esbuild-plugin.test.js.map +0 -1
  41. package/dist/lib/builders/standalone.d.ts +0 -8
  42. package/dist/lib/builders/standalone.d.ts.map +0 -1
  43. package/dist/lib/builders/standalone.js +0 -52
  44. package/dist/lib/builders/standalone.js.map +0 -1
  45. package/dist/lib/builders/swc-esbuild-plugin.d.ts +0 -12
  46. package/dist/lib/builders/swc-esbuild-plugin.d.ts.map +0 -1
  47. package/dist/lib/builders/swc-esbuild-plugin.js +0 -134
  48. package/dist/lib/builders/swc-esbuild-plugin.js.map +0 -1
  49. package/dist/lib/builders/vercel-build-output-api.d.ts +0 -9
  50. package/dist/lib/builders/vercel-build-output-api.d.ts.map +0 -1
  51. package/dist/lib/builders/vercel-build-output-api.js +0 -138
  52. package/dist/lib/builders/vercel-build-output-api.js.map +0 -1
  53. package/dist/lib/builders/webhook-route.test.d.ts +0 -2
  54. package/dist/lib/builders/webhook-route.test.d.ts.map +0 -1
  55. package/dist/lib/builders/webhook-route.test.js +0 -206
  56. package/dist/lib/builders/webhook-route.test.js.map +0 -1
@@ -1,134 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import enhancedResolveOrig from 'enhanced-resolve';
3
- import { relative } from 'path';
4
- import { promisify } from 'util';
5
- import { applySwcTransform, } from './apply-swc-transform.js';
6
- import { jsTsRegex, parentHasChild, } from './discover-entries-esbuild-plugin.js';
7
- const NODE_RESOLVE_OPTIONS = {
8
- dependencyType: 'commonjs',
9
- modules: ['node_modules'],
10
- exportsFields: ['exports'],
11
- importsFields: ['imports'],
12
- conditionNames: ['node', 'require'],
13
- descriptionFiles: ['package.json'],
14
- extensions: ['.ts', '.mts', '.cjs', '.js', '.json', '.node'],
15
- enforceExtensions: false,
16
- symlinks: true,
17
- mainFields: ['main'],
18
- mainFiles: ['index'],
19
- roots: [],
20
- fullySpecified: false,
21
- preferRelative: false,
22
- preferAbsolute: false,
23
- restrictions: [],
24
- };
25
- const NODE_ESM_RESOLVE_OPTIONS = {
26
- ...NODE_RESOLVE_OPTIONS,
27
- dependencyType: 'esm',
28
- conditionNames: ['node', 'import'],
29
- };
30
- export function createSwcPlugin(options) {
31
- return {
32
- name: 'swc-workflow-plugin',
33
- setup(build) {
34
- // everything is external unless explicitly configured
35
- // to be bundled
36
- const cjsResolver = promisify(enhancedResolveOrig.create(NODE_RESOLVE_OPTIONS));
37
- const esmResolver = promisify(enhancedResolveOrig.create(NODE_ESM_RESOLVE_OPTIONS));
38
- const enhancedResolve = async (context, path) => {
39
- try {
40
- return await esmResolver(context, path);
41
- }
42
- catch (_) {
43
- return cjsResolver(context, path);
44
- }
45
- };
46
- build.onResolve({ filter: /.*/ }, async (args) => {
47
- if (!options.entriesToBundle) {
48
- return null;
49
- }
50
- try {
51
- let resolvedPath = args.path;
52
- // handle local imports e.g. ./hello or ../another
53
- if (args.path.startsWith('.')) {
54
- resolvedPath = await enhancedResolve(args.resolveDir, args.path);
55
- }
56
- else {
57
- resolvedPath = await enhancedResolve(
58
- // `args.resolveDir` is not used here to ensure we only
59
- // externalize packages that can be resolved in the
60
- // project's working directory e.g. a nested dep can't
61
- // be externalized as we won't be able to resolve it once
62
- // it's parent has been bundled
63
- build.initialOptions.absWorkingDir || process.cwd(), args.path);
64
- }
65
- if (!resolvedPath)
66
- return null;
67
- for (const entryToBundle of options.entriesToBundle) {
68
- if (resolvedPath === entryToBundle) {
69
- return null;
70
- }
71
- // if the current entry imports a child that needs
72
- // to be bundled then it needs to also be bundled so
73
- // that the child can have our transform applied
74
- if (parentHasChild(resolvedPath, entryToBundle)) {
75
- return null;
76
- }
77
- }
78
- const isFilePath = args.path.startsWith('.') || args.path.startsWith('/');
79
- return {
80
- external: true,
81
- path: isFilePath
82
- ? relative(options.outdir || '', resolvedPath)
83
- : args.path,
84
- };
85
- }
86
- catch (_) { }
87
- return null;
88
- });
89
- // Handle TypeScript and JavaScript files
90
- build.onLoad({ filter: jsTsRegex }, async (args) => {
91
- // Determine if this is a TypeScript file
92
- const isTypeScript = args.path.endsWith('.ts') || args.path.endsWith('.tsx');
93
- try {
94
- // Determine the loader based on the output
95
- let loader = 'js';
96
- if (!isTypeScript && args.path.endsWith('.jsx')) {
97
- loader = 'jsx';
98
- }
99
- const source = await readFile(args.path, 'utf8');
100
- const { code: transformedCode, workflowManifest } = await applySwcTransform(args.path, source, options.mode,
101
- // we need to provide the tsconfig/jsconfig
102
- // alias via swc so that we can resolve them
103
- // with our custom resolve logic
104
- {
105
- paths: options.tsPaths,
106
- baseUrl: options.tsBaseUrl,
107
- });
108
- if (!options.workflowManifest) {
109
- options.workflowManifest = {};
110
- }
111
- options.workflowManifest.workflows = Object.assign(options.workflowManifest.workflows || {}, workflowManifest.workflows);
112
- options.workflowManifest.steps = Object.assign(options.workflowManifest.steps || {}, workflowManifest.steps);
113
- return {
114
- contents: transformedCode,
115
- loader,
116
- };
117
- }
118
- catch (error) {
119
- const errorMessage = error instanceof Error ? error.message : String(error);
120
- console.error(`❌ SWC transform error in ${args.path}:`, errorMessage);
121
- return {
122
- errors: [
123
- {
124
- text: `SWC transform failed: ${errorMessage}`,
125
- location: { file: args.path, line: 0, column: 0 },
126
- },
127
- ],
128
- };
129
- }
130
- });
131
- },
132
- };
133
- }
134
- //# sourceMappingURL=swc-esbuild-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swc-esbuild-plugin.js","sourceRoot":"","sources":["../../../src/lib/builders/swc-esbuild-plugin.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { BaseBuilder } from './base-builder.js';
2
- export declare class VercelBuildOutputAPIBuilder extends BaseBuilder {
3
- build(): Promise<void>;
4
- private buildStepsFunction;
5
- private buildWorkflowsFunction;
6
- private buildWebhookFunction;
7
- private createBuildOutputConfig;
8
- }
9
- //# sourceMappingURL=vercel-build-output-api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../../../src/lib/builders/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBd,kBAAkB;YA0DlB,sBAAsB;YAwDtB,oBAAoB;YA2CpB,uBAAuB;CA0BtC"}
@@ -1,138 +0,0 @@
1
- import { mkdir, writeFile } from 'node:fs/promises';
2
- import { join, resolve } from 'node:path';
3
- import { BaseBuilder } from './base-builder.js';
4
- export class VercelBuildOutputAPIBuilder extends BaseBuilder {
5
- async build() {
6
- const outputDir = resolve(this.config.workingDir, '.vercel/output');
7
- const functionsDir = join(outputDir, 'functions');
8
- const workflowGeneratedDir = join(functionsDir, '.well-known/workflow/v1');
9
- // Ensure output directories exist
10
- await mkdir(workflowGeneratedDir, { recursive: true });
11
- const inputFiles = await this.getInputFiles();
12
- const tsConfig = await this.getTsConfigOptions();
13
- const options = {
14
- inputFiles,
15
- workflowGeneratedDir,
16
- tsBaseUrl: tsConfig.baseUrl,
17
- tsPaths: tsConfig.paths,
18
- };
19
- await this.buildStepsFunction(options);
20
- await this.buildWorkflowsFunction(options);
21
- await this.buildWebhookFunction(options);
22
- await this.createBuildOutputConfig(outputDir);
23
- await this.buildClientLibrary();
24
- }
25
- async buildStepsFunction({ inputFiles, workflowGeneratedDir, tsPaths, tsBaseUrl, }) {
26
- console.log('Creating Vercel Build Output API steps function');
27
- const stepsFuncDir = join(workflowGeneratedDir, 'step.func');
28
- await mkdir(stepsFuncDir, { recursive: true });
29
- // Create steps bundle
30
- await this.createStepsBundle({
31
- inputFiles,
32
- outfile: join(stepsFuncDir, 'index.js'),
33
- tsBaseUrl,
34
- tsPaths,
35
- });
36
- // Create package.json for CommonJS
37
- const packageJson = {
38
- type: 'commonjs',
39
- };
40
- await writeFile(join(stepsFuncDir, 'package.json'), JSON.stringify(packageJson, null, 2));
41
- // Create .vc-config.json for steps function
42
- const stepsConfig = {
43
- runtime: 'nodejs22.x',
44
- handler: 'index.js',
45
- launcherType: 'Nodejs',
46
- architecture: 'arm64',
47
- shouldAddHelpers: true,
48
- shouldAddSourcemapSupport: true,
49
- experimentalTriggers: [
50
- {
51
- type: 'queue/v1beta',
52
- topic: '__wkf_step_*',
53
- consumer: 'default',
54
- maxDeliveries: 64, // Optional: Maximum number of delivery attempts (default: 3)
55
- retryAfterSeconds: 5, // Optional: Delay between retries (default: 60)
56
- initialDelaySeconds: 0, // Optional: Initial delay before first delivery (default: 0)
57
- },
58
- ],
59
- };
60
- await writeFile(join(stepsFuncDir, '.vc-config.json'), JSON.stringify(stepsConfig, null, 2));
61
- }
62
- async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsPaths, tsBaseUrl, }) {
63
- console.log('Creating Vercel Build Output API workflows function');
64
- const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');
65
- await mkdir(workflowsFuncDir, { recursive: true });
66
- await this.createWorkflowsBundle({
67
- outfile: join(workflowsFuncDir, 'index.js'),
68
- inputFiles,
69
- tsBaseUrl,
70
- tsPaths,
71
- });
72
- // Create package.json for ESM support
73
- const packageJson = {
74
- type: 'commonjs',
75
- };
76
- await writeFile(join(workflowsFuncDir, 'package.json'), JSON.stringify(packageJson, null, 2));
77
- // Create .vc-config.json for workflows function
78
- const workflowsConfig = {
79
- runtime: 'nodejs22.x',
80
- handler: 'index.js',
81
- launcherType: 'Nodejs',
82
- architecture: 'arm64',
83
- shouldAddHelpers: true,
84
- experimentalTriggers: [
85
- {
86
- type: 'queue/v1beta',
87
- topic: '__wkf_workflow_*',
88
- consumer: 'default',
89
- maxDeliveries: 64, // Optional: Maximum number of delivery attempts (default: 3)
90
- retryAfterSeconds: 5, // Optional: Delay between retries (default: 60)
91
- initialDelaySeconds: 0, // Optional: Initial delay before first delivery (default: 0)
92
- },
93
- ],
94
- };
95
- await writeFile(join(workflowsFuncDir, '.vc-config.json'), JSON.stringify(workflowsConfig, null, 2));
96
- }
97
- async buildWebhookFunction({ workflowGeneratedDir, bundle = true, }) {
98
- console.log('Creating Vercel Build Output API webhook function');
99
- const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');
100
- // Bundle the webhook route with dependencies resolved
101
- await this.createWebhookBundle({
102
- outfile: join(webhookFuncDir, 'index.js'),
103
- bundle, // Build Output API needs bundling (except in tests)
104
- });
105
- // Create package.json for CommonJS
106
- const packageJson = {
107
- type: 'commonjs',
108
- };
109
- await writeFile(join(webhookFuncDir, 'package.json'), JSON.stringify(packageJson, null, 2));
110
- // Create .vc-config.json for webhook function
111
- const webhookConfig = {
112
- runtime: 'nodejs22.x',
113
- handler: 'index.js',
114
- launcherType: 'Nodejs',
115
- architecture: 'arm64',
116
- shouldAddHelpers: false,
117
- };
118
- await writeFile(join(webhookFuncDir, '.vc-config.json'), JSON.stringify(webhookConfig, null, 2));
119
- }
120
- async createBuildOutputConfig(outputDir) {
121
- // Create config.json for Build Output API
122
- const buildOutputConfig = {
123
- version: 3,
124
- routes: [
125
- {
126
- src: '^\\/\\.well-known\\/workflow\\/v1\\/webhook\\/([^\\/]+)$',
127
- dest: '/.well-known/workflow/v1/webhook/[token]',
128
- },
129
- ],
130
- };
131
- await writeFile(join(outputDir, 'config.json'), JSON.stringify(buildOutputConfig, null, 2));
132
- console.log(`Build Output API created at ${outputDir}`);
133
- console.log('Steps function available at /.well-known/workflow/v1/step');
134
- console.log('Workflows function available at /.well-known/workflow/v1/flow');
135
- console.log('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
136
- }
137
- }
138
- //# sourceMappingURL=vercel-build-output-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vercel-build-output-api.js","sourceRoot":"","sources":["../../../src/lib/builders/vercel-build-output-api.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=webhook-route.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-route.test.d.ts","sourceRoot":"","sources":["../../../src/lib/builders/webhook-route.test.ts"],"names":[],"mappings":""}
@@ -1,206 +0,0 @@
1
- import { mkdir, readFile, rm } from 'node:fs/promises';
2
- import { join } from 'node:path';
3
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
- import { NextBuilder } from './next-build.js';
5
- import { VercelBuildOutputAPIBuilder } from './vercel-build-output-api.js';
6
- describe('Webhook route generation', () => {
7
- const testDir = join(process.cwd(), '.test-webhook-routes');
8
- const appDir = join(testDir, 'app');
9
- beforeEach(async () => {
10
- await mkdir(appDir, { recursive: true });
11
- // Create a dummy route file to satisfy NextBuilder's findAppDirectory
12
- await mkdir(join(appDir, 'test'), { recursive: true });
13
- await mkdir(join(appDir, 'test'), { recursive: true });
14
- });
15
- afterEach(async () => {
16
- await rm(testDir, { recursive: true, force: true });
17
- });
18
- describe('Next.js build target', () => {
19
- it('should create webhook route at correct location', async () => {
20
- const config = {
21
- buildTarget: 'next',
22
- dirs: ['app'],
23
- workingDir: testDir,
24
- stepsBundlePath: '',
25
- workflowsBundlePath: '',
26
- webhookBundlePath: '',
27
- watch: false,
28
- externalPackages: [],
29
- };
30
- const builder = new NextBuilder(config);
31
- // We'll call the private method indirectly through reflection
32
- const createWebhookBundle = builder.createWebhookBundle.bind(builder);
33
- const workflowGeneratedDir = join(appDir, '.well-known/workflow/v1');
34
- const webhookRouteFile = join(workflowGeneratedDir, 'webhook/[token]/route.js');
35
- await createWebhookBundle({
36
- outfile: webhookRouteFile,
37
- bundle: false,
38
- });
39
- const routePath = join(workflowGeneratedDir, 'webhook/[token]/route.js');
40
- const routeContent = await readFile(routePath, 'utf-8');
41
- expect(routeContent).toContain('resumeWebhook');
42
- expect(routeContent).toContain('async function handler(request)');
43
- expect(routeContent).toContain("url.pathname.split('/')");
44
- expect(routeContent).toContain('decodeURIComponent(pathParts[pathParts.length - 1])');
45
- expect(routeContent).toContain('export const GET = handler');
46
- expect(routeContent).toContain('export const POST = handler');
47
- expect(routeContent).toContain('export const PUT = handler');
48
- expect(routeContent).toContain('export const PATCH = handler');
49
- expect(routeContent).toContain('export const DELETE = handler');
50
- });
51
- it('should handle missing token correctly', async () => {
52
- const config = {
53
- buildTarget: 'next',
54
- dirs: ['app'],
55
- workingDir: testDir,
56
- stepsBundlePath: '',
57
- workflowsBundlePath: '',
58
- webhookBundlePath: '',
59
- watch: false,
60
- externalPackages: [],
61
- };
62
- const builder = new NextBuilder(config);
63
- const createWebhookBundle = builder.createWebhookBundle.bind(builder);
64
- const workflowGeneratedDir = join(appDir, '.well-known/workflow/v1');
65
- const webhookRouteFile = join(workflowGeneratedDir, 'webhook/[token]/route.js');
66
- await createWebhookBundle({
67
- outfile: webhookRouteFile,
68
- bundle: false,
69
- });
70
- const routeContent = await readFile(webhookRouteFile, 'utf-8');
71
- expect(routeContent).toContain('Missing token');
72
- expect(routeContent).toContain('status: 400');
73
- });
74
- it('should handle webhook not found correctly', async () => {
75
- const config = {
76
- buildTarget: 'next',
77
- dirs: ['app'],
78
- workingDir: testDir,
79
- stepsBundlePath: '',
80
- workflowsBundlePath: '',
81
- webhookBundlePath: '',
82
- watch: false,
83
- externalPackages: [],
84
- };
85
- const builder = new NextBuilder(config);
86
- const createWebhookBundle = builder.createWebhookBundle.bind(builder);
87
- const workflowGeneratedDir = join(appDir, '.well-known/workflow/v1');
88
- const webhookRouteFile = join(workflowGeneratedDir, 'webhook/[token]/route.js');
89
- await createWebhookBundle({
90
- outfile: webhookRouteFile,
91
- bundle: false,
92
- });
93
- const routeContent = await readFile(webhookRouteFile, 'utf-8');
94
- expect(routeContent).toContain('new Response(null, { status: 404 })');
95
- });
96
- });
97
- describe('Build Output API build target', () => {
98
- it('should create webhook function at correct location', async () => {
99
- const config = {
100
- buildTarget: 'vercel-build-output-api',
101
- dirs: ['workflows'],
102
- workingDir: testDir,
103
- stepsBundlePath: '',
104
- workflowsBundlePath: '',
105
- webhookBundlePath: '',
106
- watch: false,
107
- externalPackages: [],
108
- };
109
- const builder = new VercelBuildOutputAPIBuilder(config);
110
- const createWebhookBundle = builder.createWebhookBundle.bind(builder);
111
- const workflowGeneratedDir = join(testDir, '.vercel/output/functions/.well-known/workflow/v1');
112
- const webhookFuncFile = join(workflowGeneratedDir, 'webhook/[token].func/index.js');
113
- // Don't actually bundle in tests since it requires workflow to be installed
114
- // Just verify the unbundled route generation works
115
- await createWebhookBundle({
116
- outfile: webhookFuncFile,
117
- bundle: false,
118
- });
119
- const funcContent = await readFile(webhookFuncFile, 'utf-8');
120
- // Check that the route content was generated correctly
121
- expect(funcContent).toContain('workflow/api');
122
- expect(funcContent).toContain('async function handler');
123
- expect(funcContent).toContain('export const POST = handler');
124
- });
125
- it('should create correct .vc-config.json', async () => {
126
- const config = {
127
- buildTarget: 'vercel-build-output-api',
128
- dirs: ['workflows'],
129
- workingDir: testDir,
130
- stepsBundlePath: '',
131
- workflowsBundlePath: '',
132
- webhookBundlePath: '',
133
- watch: false,
134
- externalPackages: [],
135
- };
136
- const builder = new VercelBuildOutputAPIBuilder(config);
137
- const buildWebhookFunction = builder.buildWebhookFunction.bind(builder);
138
- const workflowGeneratedDir = join(testDir, '.vercel/output/functions/.well-known/workflow/v1');
139
- await mkdir(workflowGeneratedDir, { recursive: true });
140
- await buildWebhookFunction({
141
- inputFiles: [],
142
- workflowGeneratedDir,
143
- bundle: false, // Skip bundling in tests (requires workflow installed)
144
- });
145
- const configPath = join(workflowGeneratedDir, 'webhook/[token].func/.vc-config.json');
146
- const configContent = await readFile(configPath, 'utf-8');
147
- const config_parsed = JSON.parse(configContent);
148
- expect(config_parsed.runtime).toBe('nodejs22.x');
149
- expect(config_parsed.handler).toBe('index.js');
150
- expect(config_parsed.launcherType).toBe('Nodejs');
151
- expect(config_parsed.shouldAddHelpers).toBe(false);
152
- expect(config_parsed.useWebApi).toBeUndefined();
153
- });
154
- it('should use CommonJS module format', async () => {
155
- const config = {
156
- buildTarget: 'vercel-build-output-api',
157
- dirs: ['workflows'],
158
- workingDir: testDir,
159
- stepsBundlePath: '',
160
- workflowsBundlePath: '',
161
- webhookBundlePath: '',
162
- watch: false,
163
- externalPackages: [],
164
- };
165
- const builder = new VercelBuildOutputAPIBuilder(config);
166
- const buildWebhookFunction = builder.buildWebhookFunction.bind(builder);
167
- const workflowGeneratedDir = join(testDir, '.vercel/output/functions/.well-known/workflow/v1');
168
- await mkdir(workflowGeneratedDir, { recursive: true });
169
- await buildWebhookFunction({
170
- inputFiles: [],
171
- workflowGeneratedDir,
172
- bundle: false, // Skip bundling in tests (requires workflow installed)
173
- });
174
- const packageJsonPath = join(workflowGeneratedDir, 'webhook/[token].func/package.json');
175
- const packageJsonContent = await readFile(packageJsonPath, 'utf-8');
176
- const packageJson = JSON.parse(packageJsonContent);
177
- expect(packageJson.type).toBe('commonjs');
178
- });
179
- it('should add route configuration for dynamic segment', async () => {
180
- const config = {
181
- buildTarget: 'vercel-build-output-api',
182
- dirs: ['workflows'],
183
- workingDir: testDir,
184
- stepsBundlePath: '',
185
- workflowsBundlePath: '',
186
- webhookBundlePath: '',
187
- watch: false,
188
- externalPackages: [],
189
- };
190
- const builder = new VercelBuildOutputAPIBuilder(config);
191
- const createBuildOutputConfig = builder.createBuildOutputConfig.bind(builder);
192
- const outputDir = join(testDir, '.vercel/output');
193
- await mkdir(outputDir, { recursive: true });
194
- await createBuildOutputConfig(outputDir);
195
- const configPath = join(outputDir, 'config.json');
196
- const configContent = await readFile(configPath, 'utf-8');
197
- const config_parsed = JSON.parse(configContent);
198
- expect(config_parsed.version).toBe(3);
199
- expect(config_parsed.routes).toBeDefined();
200
- expect(config_parsed.routes).toHaveLength(1);
201
- expect(config_parsed.routes[0].src).toBe('^\\/\\.well-known\\/workflow\\/v1\\/webhook\\/([^\\/]+)$');
202
- expect(config_parsed.routes[0].dest).toBe('/.well-known/workflow/v1/webhook/[token]');
203
- });
204
- });
205
- });
206
- //# sourceMappingURL=webhook-route.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-route.test.js","sourceRoot":"","sources":["../../../src/lib/builders/webhook-route.test.ts"],"names":[],"mappings":"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"}