@workflow/sveltekit 5.0.0-beta.3 → 5.0.0-beta.31

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.
package/dist/builder.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import { BaseBuilder, type SvelteKitConfig } from '@workflow/builders';
2
2
  export declare class SvelteKitBuilder extends BaseBuilder {
3
- constructor(config?: Partial<SvelteKitConfig>);
3
+ #private;
4
+ constructor(config?: Partial<SvelteKitConfig> & {
5
+ routesDir?: string;
6
+ });
4
7
  build(): Promise<void>;
5
- private buildStepsRoute;
6
- private buildWorkflowsRoute;
7
8
  private buildWebhookRoute;
8
- private findRoutesDirectory;
9
+ private loadRoutesDirectory;
9
10
  }
11
+ export declare function loadSvelteKitRoutesDir(workingDir: string): Promise<string>;
10
12
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,WAAW,EAEX,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAS5B,qBAAa,gBAAiB,SAAQ,WAAW;gBACnC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAe9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA0DvB,eAAe;YAuCf,mBAAmB;YAuCnB,iBAAiB;YAqDjB,mBAAmB;CA8BlC"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,WAAW,EAIX,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAS5B,qBAAa,gBAAiB,SAAQ,WAAW;;gBAGnC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;IAgC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA+EvB,iBAAiB;YAqDjB,mBAAmB;CAMlC;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
package/dist/builder.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { constants } from 'node:fs';
2
- import { access, copyFile, mkdir, readFile, stat, writeFile, } from 'node:fs/promises';
3
- import { join, resolve } from 'node:path';
4
- import { BaseBuilder, NORMALIZE_REQUEST_CODE, } from '@workflow/builders';
2
+ import { access, copyFile, mkdir, readFile, rm, stat, writeFile, } from 'node:fs/promises';
3
+ import { createRequire } from 'node:module';
4
+ import { dirname, join, resolve } from 'node:path';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { BaseBuilder, createBaseBuilderConfig, NORMALIZE_REQUEST_CODE, resolveProjectRoot, } from '@workflow/builders';
5
7
  const SVELTEKIT_VIRTUAL_MODULES = [
6
8
  '$env/*', // All $env subpaths
7
9
  '$lib', // Exact $lib import
@@ -9,22 +11,40 @@ const SVELTEKIT_VIRTUAL_MODULES = [
9
11
  '$app/*', // All $app subpaths
10
12
  ];
11
13
  export class SvelteKitBuilder extends BaseBuilder {
12
- constructor(config) {
13
- const workingDir = config?.workingDir || process.cwd();
14
+ #routesDir;
15
+ constructor(config = {}) {
16
+ const workingDir = resolve(config.workingDir || process.cwd());
17
+ const dirs = config.dirs ?? [
18
+ 'workflows',
19
+ 'src/workflows',
20
+ 'routes',
21
+ 'src/routes',
22
+ ];
23
+ const projectRoot = config.projectRoot ?? resolveProjectRoot(workingDir);
24
+ const routesDir = config.routesDir
25
+ ? resolve(workingDir, config.routesDir)
26
+ : undefined;
14
27
  super({
28
+ ...createBaseBuilderConfig({
29
+ workingDir,
30
+ projectRoot,
31
+ dirs,
32
+ watch: config.watch,
33
+ externalPackages: [...SVELTEKIT_VIRTUAL_MODULES],
34
+ sourcemap: config.sourcemap,
35
+ }),
15
36
  ...config,
16
- dirs: ['workflows', 'src/workflows', 'routes', 'src/routes'],
37
+ dirs,
17
38
  buildTarget: 'sveltekit',
18
- stepsBundlePath: '', // unused in base
19
- workflowsBundlePath: '', // unused in base
20
- webhookBundlePath: '', // unused in base
21
39
  workingDir,
40
+ projectRoot,
41
+ moduleSpecifierRoot: config.moduleSpecifierRoot ?? workingDir,
22
42
  externalPackages: [...SVELTEKIT_VIRTUAL_MODULES],
23
43
  });
44
+ this.#routesDir = routesDir;
24
45
  }
25
46
  async build() {
26
- // Find SvelteKit routes directory (src/routes or routes)
27
- const routesDir = await this.findRoutesDirectory();
47
+ const routesDir = await this.loadRoutesDirectory();
28
48
  const workflowGeneratedDir = join(routesDir, '.well-known/workflow/v1');
29
49
  // Ensure output directories exist
30
50
  await mkdir(workflowGeneratedDir, { recursive: true });
@@ -32,24 +52,37 @@ export class SvelteKitBuilder extends BaseBuilder {
32
52
  if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {
33
53
  await writeFile(join(workflowGeneratedDir, '.gitignore'), '*');
34
54
  }
55
+ // Clean up stale V1 step route directory (may persist via Vercel build cache)
56
+ await rm(join(workflowGeneratedDir, 'step'), {
57
+ recursive: true,
58
+ force: true,
59
+ });
35
60
  // Get workflow and step files to bundle
36
61
  const inputFiles = await this.getInputFiles();
37
62
  const tsconfigPath = await this.findTsConfigPath();
38
- const options = {
63
+ // Create combined bundle for flow route
64
+ const flowRouteDir = join(workflowGeneratedDir, 'flow');
65
+ await mkdir(flowRouteDir, { recursive: true });
66
+ const { manifest } = await this.createCombinedBundle({
39
67
  inputFiles,
40
- workflowGeneratedDir,
68
+ stepsOutfile: join(flowRouteDir, '__step_registrations.js'),
69
+ flowOutfile: join(flowRouteDir, '+server.js'),
70
+ format: 'esm',
71
+ bundleFinalOutput: false,
72
+ externalizeNonSteps: true,
41
73
  tsconfigPath,
42
- };
43
- // Generate the three SvelteKit route handlers
44
- const stepsManifest = await this.buildStepsRoute(options);
45
- const workflowsManifest = await this.buildWorkflowsRoute(options);
74
+ });
75
+ // Post-process the generated file to wrap with SvelteKit request converter
76
+ const workflowsRouteFile = join(flowRouteDir, '+server.js');
77
+ let workflowsRouteContent = await readFile(workflowsRouteFile, 'utf-8');
78
+ // Replace the default export with SvelteKit-compatible handler
79
+ workflowsRouteContent = workflowsRouteContent.replace(/export const POST = workflowEntrypoint\(workflowCode(?<options>[^)]*)\);?$/m, (_match, options = '') => `${NORMALIZE_REQUEST_CODE}
80
+ export const POST = async ({request}) => {
81
+ const normalRequest = await normalizeRequest(request);
82
+ return workflowEntrypoint(workflowCode${options})(normalRequest);
83
+ }`);
84
+ await writeFile(workflowsRouteFile, workflowsRouteContent);
46
85
  await this.buildWebhookRoute({ workflowGeneratedDir });
47
- // Merge manifests from both bundles
48
- const manifest = {
49
- steps: { ...stepsManifest.steps, ...workflowsManifest.steps },
50
- workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },
51
- classes: { ...stepsManifest.classes, ...workflowsManifest.classes },
52
- };
53
86
  // Generate unified manifest
54
87
  const workflowBundlePath = join(workflowGeneratedDir, 'flow/+server.js');
55
88
  const manifestJson = await this.createManifest({
@@ -62,55 +95,12 @@ export class SvelteKitBuilder extends BaseBuilder {
62
95
  if (this.shouldExposePublicManifest && manifestJson) {
63
96
  const staticManifestDir = join(this.config.workingDir, 'static/.well-known/workflow/v1');
64
97
  await mkdir(staticManifestDir, { recursive: true });
98
+ if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {
99
+ await writeFile(join(staticManifestDir, '.gitignore'), '*');
100
+ }
65
101
  await copyFile(join(workflowGeneratedDir, 'manifest.json'), join(staticManifestDir, 'manifest.json'));
66
102
  }
67
103
  }
68
- async buildStepsRoute({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
69
- // Create steps route: .well-known/workflow/v1/step/+server.js
70
- const stepsRouteDir = join(workflowGeneratedDir, 'step');
71
- await mkdir(stepsRouteDir, { recursive: true });
72
- const { manifest } = await this.createStepsBundle({
73
- format: 'esm',
74
- inputFiles,
75
- outfile: join(stepsRouteDir, '+server.js'),
76
- externalizeNonSteps: true,
77
- tsconfigPath,
78
- });
79
- // Post-process the generated file to wrap with SvelteKit request converter
80
- const stepsRouteFile = join(stepsRouteDir, '+server.js');
81
- let stepsRouteContent = await readFile(stepsRouteFile, 'utf-8');
82
- // Replace the default export with SvelteKit-compatible handler
83
- stepsRouteContent = stepsRouteContent.replace(/export\s*\{\s*stepEntrypoint\s+as\s+POST\s*\}\s*;?$/m, `${NORMALIZE_REQUEST_CODE}
84
- export const POST = async ({request}) => {
85
- const normalRequest = await normalizeRequest(request);
86
- return stepEntrypoint(normalRequest);
87
- }`);
88
- await writeFile(stepsRouteFile, stepsRouteContent);
89
- return manifest;
90
- }
91
- async buildWorkflowsRoute({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
92
- // Create workflows route: .well-known/workflow/v1/flow/+server.js
93
- const workflowsRouteDir = join(workflowGeneratedDir, 'flow');
94
- await mkdir(workflowsRouteDir, { recursive: true });
95
- const { manifest } = await this.createWorkflowsBundle({
96
- format: 'esm',
97
- outfile: join(workflowsRouteDir, '+server.js'),
98
- bundleFinalOutput: false,
99
- inputFiles,
100
- tsconfigPath,
101
- });
102
- // Post-process the generated file to wrap with SvelteKit request converter
103
- const workflowsRouteFile = join(workflowsRouteDir, '+server.js');
104
- let workflowsRouteContent = await readFile(workflowsRouteFile, 'utf-8');
105
- // Replace the default export with SvelteKit-compatible handler
106
- workflowsRouteContent = workflowsRouteContent.replace(/export const POST = workflowEntrypoint\(workflowCode\);?$/m, `${NORMALIZE_REQUEST_CODE}
107
- export const POST = async ({request}) => {
108
- const normalRequest = await normalizeRequest(request);
109
- return workflowEntrypoint(workflowCode)(normalRequest);
110
- }`);
111
- await writeFile(workflowsRouteFile, workflowsRouteContent);
112
- return manifest;
113
- }
114
104
  async buildWebhookRoute({ workflowGeneratedDir, }) {
115
105
  // Create webhook route: .well-known/workflow/v1/webhook/[token]/+server.js
116
106
  const webhookRouteFile = join(workflowGeneratedDir, 'webhook/[token]/+server.js');
@@ -141,32 +131,34 @@ export const HEAD = createSvelteKitHandler('HEAD');
141
131
  export const OPTIONS = createSvelteKitHandler('OPTIONS');`);
142
132
  await writeFile(webhookRouteFile, webhookRouteContent);
143
133
  }
144
- async findRoutesDirectory() {
145
- const routesDir = resolve(this.config.workingDir, 'src/routes');
146
- const rootRoutesDir = resolve(this.config.workingDir, 'routes');
147
- // Try src/routes first (standard SvelteKit convention)
148
- try {
149
- await access(routesDir, constants.F_OK);
150
- const routesStats = await stat(routesDir);
151
- if (!routesStats.isDirectory()) {
152
- throw new Error(`Path exists but is not a directory: ${routesDir}`);
153
- }
154
- return routesDir;
155
- }
156
- catch {
157
- // Try routes as fallback
158
- try {
159
- await access(rootRoutesDir, constants.F_OK);
160
- const rootRoutesStats = await stat(rootRoutesDir);
161
- if (!rootRoutesStats.isDirectory()) {
162
- throw new Error(`Path exists but is not a directory: ${rootRoutesDir}`);
163
- }
164
- return rootRoutesDir;
165
- }
166
- catch {
167
- throw new Error('Could not find SvelteKit routes directory. Expected either "src/routes" or "routes" to exist.');
168
- }
169
- }
134
+ async loadRoutesDirectory() {
135
+ const routesDir = this.#routesDir ?? (await loadSvelteKitRoutesDir(this.config.workingDir));
136
+ await assertDirectory(routesDir);
137
+ return routesDir;
138
+ }
139
+ }
140
+ export async function loadSvelteKitRoutesDir(workingDir) {
141
+ const require = createRequire(join(workingDir, 'package.json'));
142
+ const packageJsonPath = require.resolve('@sveltejs/kit/package.json');
143
+ const loaderPath = join(dirname(packageJsonPath), 'src/core/config/index.js');
144
+ const configModule = await import(pathToFileURL(loaderPath).href);
145
+ // SvelteKit 2.62+ `load_config()` resolves Vite config first. Calling it
146
+ // while `workflow/sveltekit` is imported from vite.config.ts recursively
147
+ // reloads vite.config.ts and leaves this top-level build unresolved.
148
+ const config = configModule.load_svelte_config != null
149
+ ? await configModule.load_svelte_config(workingDir)
150
+ : await configModule.load_config({ cwd: workingDir });
151
+ const routesDir = config.kit?.files?.routes;
152
+ if (routesDir == null || typeof routesDir !== 'string') {
153
+ throw new Error('Expected SvelteKit config loader to return kit.files.routes as a string.');
154
+ }
155
+ return routesDir;
156
+ }
157
+ async function assertDirectory(path) {
158
+ await access(path, constants.F_OK);
159
+ const stats = await stat(path);
160
+ if (!stats.isDirectory()) {
161
+ throw new Error(`Path exists but is not a directory: ${path}`);
170
162
  }
171
163
  }
172
- //# sourceMappingURL=builder.js.map
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLFFBQVEsRUFDUixFQUFFLEVBQ0YsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsUUFBUSxFQUFFLG9CQUFvQjtJQUM5QixNQUFNLEVBQUUsb0JBQW9CO0lBQzVCLFFBQVEsRUFBRSxvQkFBb0I7SUFDOUIsUUFBUSxFQUFFLG9CQUFvQjtDQUMvQixDQUFDO0FBRUYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQVc7SUFDL0MsVUFBVSxDQUFxQjtJQUUvQixZQUFZLFNBQTRELEVBQUU7UUFDeEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSTtZQUMxQixXQUFXO1lBQ1gsZUFBZTtZQUNmLFFBQVE7WUFDUixZQUFZO1NBQ2IsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVM7WUFDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsS0FBSyxDQUFDO1lBQ0osR0FBRyx1QkFBdUIsQ0FBQztnQkFDekIsVUFBVTtnQkFDVixXQUFXO2dCQUNYLElBQUk7Z0JBQ0osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixnQkFBZ0IsRUFBRSxDQUFDLEdBQUcseUJBQXlCLENBQUM7Z0JBQ2hELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUzthQUM1QixDQUFDO1lBQ0YsR0FBRyxNQUFNO1lBQ1QsSUFBSTtZQUNKLFdBQVcsRUFBRSxXQUFvQjtZQUNqQyxVQUFVO1lBQ1YsV0FBVztZQUNYLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxVQUFVO1lBQzdELGdCQUFnQixFQUFFLENBQUMsR0FBRyx5QkFBeUIsQ0FBQztTQUNqRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVEsS0FBSyxDQUFDLEtBQUs7UUFDbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNuRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUV4RSxrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxpRUFBaUU7UUFDakUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsOEVBQThFO1FBQzlFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUMzQyxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO1FBRUgsd0NBQXdDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFbkQsd0NBQXdDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUvQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDbkQsVUFBVTtZQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDO1lBQzNELFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztZQUM3QyxNQUFNLEVBQUUsS0FBSztZQUNiLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixZQUFZO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsMkVBQTJFO1FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RCxJQUFJLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXhFLCtEQUErRDtRQUMvRCxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQ25ELDZFQUE2RSxFQUM3RSxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQjs7OzBDQUdmLE9BQU87RUFDL0MsQ0FDRyxDQUFDO1FBQ0YsTUFBTSxTQUFTLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUUzRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUV2RCw0QkFBNEI7UUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN6RSxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0Msa0JBQWtCO1lBQ2xCLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsUUFBUTtTQUNULENBQUMsQ0FBQztRQUVILG9FQUFvRTtRQUNwRSx1REFBdUQ7UUFDdkQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDcEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUN0QixnQ0FBZ0MsQ0FDakMsQ0FBQztZQUNGLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUNELE1BQU0sUUFBUSxDQUNaLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLENBQUMsRUFDM0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUN6QyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFDOUIsb0JBQW9CLEdBR3JCO1FBQ0MsMkVBQTJFO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUMzQixvQkFBb0IsRUFDcEIsNEJBQTRCLENBQzdCLENBQUM7UUFFRixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM3QixPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUVILDJFQUEyRTtRQUMzRSxJQUFJLG1CQUFtQixHQUFHLE1BQU0sUUFBUSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLHdEQUF3RDtRQUN4RCxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQy9DLHFIQUFxSCxFQUNySCwwQ0FBMEMsQ0FDM0MsQ0FBQztRQUVGLDZEQUE2RDtRQUM3RCxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQy9DLHVHQUF1RyxFQUN2RyxFQUFFLENBQ0gsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQy9DLHNOQUFzTixFQUN0TixHQUFHLHNCQUFzQjs7Ozs7Ozs7Ozs7OzswREFhMkIsQ0FDckQsQ0FBQztRQUVGLE1BQU0sU0FBUyxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUI7UUFDL0IsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLFVBQWtCO0lBRWxCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUU5RSxNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSxxRUFBcUU7SUFDckUsTUFBTSxNQUFNLEdBQ1YsWUFBWSxDQUFDLGtCQUFrQixJQUFJLElBQUk7UUFDckMsQ0FBQyxDQUFDLE1BQU0sWUFBWSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztRQUNuRCxDQUFDLENBQUMsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDMUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQzVDLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxDQUMzRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUFDLElBQVk7SUFDekMsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgYWNjZXNzLFxuICBjb3B5RmlsZSxcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgc3RhdCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQge1xuICBCYXNlQnVpbGRlcixcbiAgY3JlYXRlQmFzZUJ1aWxkZXJDb25maWcsXG4gIE5PUk1BTElaRV9SRVFVRVNUX0NPREUsXG4gIHJlc29sdmVQcm9qZWN0Um9vdCxcbiAgdHlwZSBTdmVsdGVLaXRDb25maWcsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5cbmNvbnN0IFNWRUxURUtJVF9WSVJUVUFMX01PRFVMRVMgPSBbXG4gICckZW52LyonLCAvLyBBbGwgJGVudiBzdWJwYXRoc1xuICAnJGxpYicsIC8vIEV4YWN0ICRsaWIgaW1wb3J0XG4gICckbGliLyonLCAvLyBBbGwgJGxpYiBzdWJwYXRoc1xuICAnJGFwcC8qJywgLy8gQWxsICRhcHAgc3VicGF0aHNcbl07XG5cbmV4cG9ydCBjbGFzcyBTdmVsdGVLaXRCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICAjcm91dGVzRGlyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQYXJ0aWFsPFN2ZWx0ZUtpdENvbmZpZz4gJiB7IHJvdXRlc0Rpcj86IHN0cmluZyB9ID0ge30pIHtcbiAgICBjb25zdCB3b3JraW5nRGlyID0gcmVzb2x2ZShjb25maWcud29ya2luZ0RpciB8fCBwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBkaXJzID0gY29uZmlnLmRpcnMgPz8gW1xuICAgICAgJ3dvcmtmbG93cycsXG4gICAgICAnc3JjL3dvcmtmbG93cycsXG4gICAgICAncm91dGVzJyxcbiAgICAgICdzcmMvcm91dGVzJyxcbiAgICBdO1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gY29uZmlnLnByb2plY3RSb290ID8/IHJlc29sdmVQcm9qZWN0Um9vdCh3b3JraW5nRGlyKTtcbiAgICBjb25zdCByb3V0ZXNEaXIgPSBjb25maWcucm91dGVzRGlyXG4gICAgICA/IHJlc29sdmUod29ya2luZ0RpciwgY29uZmlnLnJvdXRlc0RpcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLmNyZWF0ZUJhc2VCdWlsZGVyQ29uZmlnKHtcbiAgICAgICAgd29ya2luZ0RpcixcbiAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgIGRpcnMsXG4gICAgICAgIHdhdGNoOiBjb25maWcud2F0Y2gsXG4gICAgICAgIGV4dGVybmFsUGFja2FnZXM6IFsuLi5TVkVMVEVLSVRfVklSVFVBTF9NT0RVTEVTXSxcbiAgICAgICAgc291cmNlbWFwOiBjb25maWcuc291cmNlbWFwLFxuICAgICAgfSksXG4gICAgICAuLi5jb25maWcsXG4gICAgICBkaXJzLFxuICAgICAgYnVpbGRUYXJnZXQ6ICdzdmVsdGVraXQnIGFzIGNvbnN0LFxuICAgICAgd29ya2luZ0RpcixcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogY29uZmlnLm1vZHVsZVNwZWNpZmllclJvb3QgPz8gd29ya2luZ0RpcixcbiAgICAgIGV4dGVybmFsUGFja2FnZXM6IFsuLi5TVkVMVEVLSVRfVklSVFVBTF9NT0RVTEVTXSxcbiAgICB9KTtcbiAgICB0aGlzLiNyb3V0ZXNEaXIgPSByb3V0ZXNEaXI7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3V0ZXNEaXIgPSBhd2FpdCB0aGlzLmxvYWRSb3V0ZXNEaXJlY3RvcnkoKTtcbiAgICBjb25zdCB3b3JrZmxvd0dlbmVyYXRlZERpciA9IGpvaW4ocm91dGVzRGlyLCAnLndlbGwta25vd24vd29ya2Zsb3cvdjEnKTtcblxuICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICBhd2FpdCBta2Rpcih3b3JrZmxvd0dlbmVyYXRlZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBBZGQgLmdpdGlnbm9yZSB0byBleGNsdWRlIGdlbmVyYXRlZCBmaWxlcyBmcm9tIHZlcnNpb24gY29udHJvbFxuICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBzdGFsZSBWMSBzdGVwIHJvdXRlIGRpcmVjdG9yeSAobWF5IHBlcnNpc3QgdmlhIFZlcmNlbCBidWlsZCBjYWNoZSlcbiAgICBhd2FpdCBybShqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnc3RlcCcpLCB7XG4gICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICBmb3JjZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIEdldCB3b3JrZmxvdyBhbmQgc3RlcCBmaWxlcyB0byBidW5kbGVcbiAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgY29uc3QgdHNjb25maWdQYXRoID0gYXdhaXQgdGhpcy5maW5kVHNDb25maWdQYXRoKCk7XG5cbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGZvciBmbG93IHJvdXRlXG4gICAgY29uc3QgZmxvd1JvdXRlRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cnKTtcbiAgICBhd2FpdCBta2RpcihmbG93Um91dGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVDb21iaW5lZEJ1bmRsZSh7XG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgc3RlcHNPdXRmaWxlOiBqb2luKGZsb3dSb3V0ZURpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLmpzJyksXG4gICAgICBmbG93T3V0ZmlsZTogam9pbihmbG93Um91dGVEaXIsICcrc2VydmVyLmpzJyksXG4gICAgICBmb3JtYXQ6ICdlc20nLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IGZhbHNlLFxuICAgICAgZXh0ZXJuYWxpemVOb25TdGVwczogdHJ1ZSxcbiAgICAgIHRzY29uZmlnUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIFBvc3QtcHJvY2VzcyB0aGUgZ2VuZXJhdGVkIGZpbGUgdG8gd3JhcCB3aXRoIFN2ZWx0ZUtpdCByZXF1ZXN0IGNvbnZlcnRlclxuICAgIGNvbnN0IHdvcmtmbG93c1JvdXRlRmlsZSA9IGpvaW4oZmxvd1JvdXRlRGlyLCAnK3NlcnZlci5qcycpO1xuICAgIGxldCB3b3JrZmxvd3NSb3V0ZUNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZSh3b3JrZmxvd3NSb3V0ZUZpbGUsICd1dGYtOCcpO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgZGVmYXVsdCBleHBvcnQgd2l0aCBTdmVsdGVLaXQtY29tcGF0aWJsZSBoYW5kbGVyXG4gICAgd29ya2Zsb3dzUm91dGVDb250ZW50ID0gd29ya2Zsb3dzUm91dGVDb250ZW50LnJlcGxhY2UoXG4gICAgICAvZXhwb3J0IGNvbnN0IFBPU1QgPSB3b3JrZmxvd0VudHJ5cG9pbnRcXCh3b3JrZmxvd0NvZGUoPzxvcHRpb25zPlteKV0qKVxcKTs/JC9tLFxuICAgICAgKF9tYXRjaCwgb3B0aW9ucyA9ICcnKSA9PiBgJHtOT1JNQUxJWkVfUkVRVUVTVF9DT0RFfVxuZXhwb3J0IGNvbnN0IFBPU1QgPSBhc3luYyAoe3JlcXVlc3R9KSA9PiB7XG4gIGNvbnN0IG5vcm1hbFJlcXVlc3QgPSBhd2FpdCBub3JtYWxpemVSZXF1ZXN0KHJlcXVlc3QpO1xuICByZXR1cm4gd29ya2Zsb3dFbnRyeXBvaW50KHdvcmtmbG93Q29kZSR7b3B0aW9uc30pKG5vcm1hbFJlcXVlc3QpO1xufWBcbiAgICApO1xuICAgIGF3YWl0IHdyaXRlRmlsZSh3b3JrZmxvd3NSb3V0ZUZpbGUsIHdvcmtmbG93c1JvdXRlQ29udGVudCk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va1JvdXRlKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB1bmlmaWVkIG1hbmlmZXN0XG4gICAgY29uc3Qgd29ya2Zsb3dCdW5kbGVQYXRoID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ2Zsb3cvK3NlcnZlci5qcycpO1xuICAgIGNvbnN0IG1hbmlmZXN0SnNvbiA9IGF3YWl0IHRoaXMuY3JlYXRlTWFuaWZlc3Qoe1xuICAgICAgd29ya2Zsb3dCdW5kbGVQYXRoLFxuICAgICAgbWFuaWZlc3REaXI6IHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgbWFuaWZlc3QsXG4gICAgfSk7XG5cbiAgICAvLyBFeHBvc2UgbWFuaWZlc3QgYXMgYSBzdGF0aWMgZmlsZSB3aGVuIFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVD0xLlxuICAgIC8vIFN2ZWx0ZUtpdCBzZXJ2ZXMgZmlsZXMgZnJvbSBzdGF0aWMvIGF0IHRoZSByb290IFVSTC5cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgdGhpcy5jb25maWcud29ya2luZ0RpcixcbiAgICAgICAgJ3N0YXRpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MSdcbiAgICAgICk7XG4gICAgICBhd2FpdCBta2RpcihzdGF0aWNNYW5pZmVzdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUoam9pbihzdGF0aWNNYW5pZmVzdERpciwgJy5naXRpZ25vcmUnKSwgJyonKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGNvcHlGaWxlKFxuICAgICAgICBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnbWFuaWZlc3QuanNvbicpLFxuICAgICAgICBqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnbWFuaWZlc3QuanNvbicpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgIHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgfSkge1xuICAgIC8vIENyZWF0ZSB3ZWJob29rIHJvdXRlOiAud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rL1t0b2tlbl0vK3NlcnZlci5qc1xuICAgIGNvbnN0IHdlYmhvb2tSb3V0ZUZpbGUgPSBqb2luKFxuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAnd2ViaG9vay9bdG9rZW5dLytzZXJ2ZXIuanMnXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlV2ViaG9va0J1bmRsZSh7XG4gICAgICBvdXRmaWxlOiB3ZWJob29rUm91dGVGaWxlLFxuICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gU3ZlbHRlS2l0IHdpbGwgaGFuZGxlIGJ1bmRsaW5nXG4gICAgfSk7XG5cbiAgICAvLyBQb3N0LXByb2Nlc3MgdGhlIGdlbmVyYXRlZCBmaWxlIHRvIHdyYXAgd2l0aCBTdmVsdGVLaXQgcmVxdWVzdCBjb252ZXJ0ZXJcbiAgICBsZXQgd2ViaG9va1JvdXRlQ29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHdlYmhvb2tSb3V0ZUZpbGUsICd1dGYtOCcpO1xuXG4gICAgLy8gVXBkYXRlIGhhbmRsZXIgc2lnbmF0dXJlIHRvIGFjY2VwdCB0b2tlbiBhcyBwYXJhbWV0ZXJcbiAgICB3ZWJob29rUm91dGVDb250ZW50ID0gd2ViaG9va1JvdXRlQ29udGVudC5yZXBsYWNlKFxuICAgICAgL2FzeW5jIGZ1bmN0aW9uIGhhbmRsZXJcXChyZXF1ZXN0XFwpIFxce1tcXHNcXFNdKj9jb25zdCB0b2tlbiA9IGRlY29kZVVSSUNvbXBvbmVudFxcKHBhdGhQYXJ0c1xcW3BhdGhQYXJ0c1xcLmxlbmd0aCAtIDFcXF1cXCk7LyxcbiAgICAgIGBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKHJlcXVlc3QsIHRva2VuKSB7YFxuICAgICk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIFVSTCBwYXJzaW5nIGNvZGUgc2luY2Ugd2UgZ2V0IHRva2VuIGZyb20gcGFyYW1zXG4gICAgd2ViaG9va1JvdXRlQ29udGVudCA9IHdlYmhvb2tSb3V0ZUNvbnRlbnQucmVwbGFjZShcbiAgICAgIC9jb25zdCB1cmwgPSBuZXcgVVJMXFwocmVxdWVzdFxcLnVybFxcKTtbXFxzXFxTXSo/Y29uc3QgcGF0aFBhcnRzID0gdXJsXFwucGF0aG5hbWVcXC5zcGxpdFxcKCdcXC8nXFwpO1tcXHNcXFNdKj9cXG4vLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgLy8gUmVwbGFjZSBhbGwgSFRUUCBtZXRob2QgZXhwb3J0cyB3aXRoIFN2ZWx0ZUtpdC1jb21wYXRpYmxlIGhhbmRsZXJzXG4gICAgd2ViaG9va1JvdXRlQ29udGVudCA9IHdlYmhvb2tSb3V0ZUNvbnRlbnQucmVwbGFjZShcbiAgICAgIC9leHBvcnQgY29uc3QgR0VUID0gaGFuZGxlcjtcXG5leHBvcnQgY29uc3QgUE9TVCA9IGhhbmRsZXI7XFxuZXhwb3J0IGNvbnN0IFBVVCA9IGhhbmRsZXI7XFxuZXhwb3J0IGNvbnN0IFBBVENIID0gaGFuZGxlcjtcXG5leHBvcnQgY29uc3QgREVMRVRFID0gaGFuZGxlcjtcXG5leHBvcnQgY29uc3QgSEVBRCA9IGhhbmRsZXI7XFxuZXhwb3J0IGNvbnN0IE9QVElPTlMgPSBoYW5kbGVyOy8sXG4gICAgICBgJHtOT1JNQUxJWkVfUkVRVUVTVF9DT0RFfVxuY29uc3QgY3JlYXRlU3ZlbHRlS2l0SGFuZGxlciA9IChtZXRob2QpID0+IGFzeW5jICh7IHJlcXVlc3QsIHBhcmFtcywgcGxhdGZvcm0gfSkgPT4ge1xuICBjb25zdCBub3JtYWxSZXF1ZXN0ID0gYXdhaXQgbm9ybWFsaXplUmVxdWVzdChyZXF1ZXN0KTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBoYW5kbGVyKG5vcm1hbFJlcXVlc3QsIHBhcmFtcy50b2tlbik7XG4gIHJldHVybiByZXNwb25zZTtcbn07XG5cbmV4cG9ydCBjb25zdCBHRVQgPSBjcmVhdGVTdmVsdGVLaXRIYW5kbGVyKCdHRVQnKTtcbmV4cG9ydCBjb25zdCBQT1NUID0gY3JlYXRlU3ZlbHRlS2l0SGFuZGxlcignUE9TVCcpO1xuZXhwb3J0IGNvbnN0IFBVVCA9IGNyZWF0ZVN2ZWx0ZUtpdEhhbmRsZXIoJ1BVVCcpO1xuZXhwb3J0IGNvbnN0IFBBVENIID0gY3JlYXRlU3ZlbHRlS2l0SGFuZGxlcignUEFUQ0gnKTtcbmV4cG9ydCBjb25zdCBERUxFVEUgPSBjcmVhdGVTdmVsdGVLaXRIYW5kbGVyKCdERUxFVEUnKTtcbmV4cG9ydCBjb25zdCBIRUFEID0gY3JlYXRlU3ZlbHRlS2l0SGFuZGxlcignSEVBRCcpO1xuZXhwb3J0IGNvbnN0IE9QVElPTlMgPSBjcmVhdGVTdmVsdGVLaXRIYW5kbGVyKCdPUFRJT05TJyk7YFxuICAgICk7XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUod2ViaG9va1JvdXRlRmlsZSwgd2ViaG9va1JvdXRlQ29udGVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSb3V0ZXNEaXJlY3RvcnkoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCByb3V0ZXNEaXIgPVxuICAgICAgdGhpcy4jcm91dGVzRGlyID8/IChhd2FpdCBsb2FkU3ZlbHRlS2l0Um91dGVzRGlyKHRoaXMuY29uZmlnLndvcmtpbmdEaXIpKTtcbiAgICBhd2FpdCBhc3NlcnREaXJlY3Rvcnkocm91dGVzRGlyKTtcbiAgICByZXR1cm4gcm91dGVzRGlyO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU3ZlbHRlS2l0Um91dGVzRGlyKFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGpvaW4od29ya2luZ0RpciwgJ3BhY2thZ2UuanNvbicpKTtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAc3ZlbHRlanMva2l0L3BhY2thZ2UuanNvbicpO1xuICBjb25zdCBsb2FkZXJQYXRoID0gam9pbihkaXJuYW1lKHBhY2thZ2VKc29uUGF0aCksICdzcmMvY29yZS9jb25maWcvaW5kZXguanMnKTtcblxuICBjb25zdCBjb25maWdNb2R1bGUgPSBhd2FpdCBpbXBvcnQocGF0aFRvRmlsZVVSTChsb2FkZXJQYXRoKS5ocmVmKTtcbiAgLy8gU3ZlbHRlS2l0IDIuNjIrIGBsb2FkX2NvbmZpZygpYCByZXNvbHZlcyBWaXRlIGNvbmZpZyBmaXJzdC4gQ2FsbGluZyBpdFxuICAvLyB3aGlsZSBgd29ya2Zsb3cvc3ZlbHRla2l0YCBpcyBpbXBvcnRlZCBmcm9tIHZpdGUuY29uZmlnLnRzIHJlY3Vyc2l2ZWx5XG4gIC8vIHJlbG9hZHMgdml0ZS5jb25maWcudHMgYW5kIGxlYXZlcyB0aGlzIHRvcC1sZXZlbCBidWlsZCB1bnJlc29sdmVkLlxuICBjb25zdCBjb25maWcgPVxuICAgIGNvbmZpZ01vZHVsZS5sb2FkX3N2ZWx0ZV9jb25maWcgIT0gbnVsbFxuICAgICAgPyBhd2FpdCBjb25maWdNb2R1bGUubG9hZF9zdmVsdGVfY29uZmlnKHdvcmtpbmdEaXIpXG4gICAgICA6IGF3YWl0IGNvbmZpZ01vZHVsZS5sb2FkX2NvbmZpZyh7IGN3ZDogd29ya2luZ0RpciB9KTtcbiAgY29uc3Qgcm91dGVzRGlyID0gY29uZmlnLmtpdD8uZmlsZXM/LnJvdXRlcztcbiAgaWYgKHJvdXRlc0RpciA9PSBudWxsIHx8IHR5cGVvZiByb3V0ZXNEaXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0V4cGVjdGVkIFN2ZWx0ZUtpdCBjb25maWcgbG9hZGVyIHRvIHJldHVybiBraXQuZmlsZXMucm91dGVzIGFzIGEgc3RyaW5nLidcbiAgICApO1xuICB9XG4gIHJldHVybiByb3V0ZXNEaXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydERpcmVjdG9yeShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5GX09LKTtcbiAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICBpZiAoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7cGF0aH1gKTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8EA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import path from 'node:path';
2
+ import { WORKFLOW_QUEUE_TRIGGER } from '@workflow/builders';
2
3
  import fs from 'fs-extra';
3
4
  import { SvelteKitBuilder } from './builder.js';
5
+ import { stripWorkflowQueueTriggers } from './vc-config.js';
4
6
  const builder = new SvelteKitBuilder();
5
7
  // This needs to be in the top-level as we need to create these
6
8
  // entries before svelte plugin is started or the entries are
@@ -11,45 +13,29 @@ process.on('beforeExit', () => {
11
13
  if (!process.env.VERCEL_DEPLOYMENT_ID) {
12
14
  return;
13
15
  }
16
+ // V2: Only the combined flow handler needs queue triggers.
17
+ // The separate step route was removed.
14
18
  for (const { file, config } of [
15
19
  {
16
20
  file: '.vercel/output/functions/.well-known/workflow/v1/flow.func/.vc-config.json',
17
21
  config: {
18
22
  maxDuration: 'max',
19
- experimentalTriggers: [
20
- {
21
- type: 'queue/v2beta',
22
- topic: '__wkf_workflow_*',
23
- consumer: 'default',
24
- retryAfterSeconds: 5,
25
- initialDelaySeconds: 0,
26
- },
27
- ],
28
- },
29
- },
30
- {
31
- file: '.vercel/output/functions/.well-known/workflow/v1/step.func/.vc-config.json',
32
- config: {
33
- maxDuration: 'max',
34
- experimentalTriggers: [
35
- {
36
- type: 'queue/v2beta',
37
- topic: '__wkf_step_*',
38
- consumer: 'default',
39
- retryAfterSeconds: 5,
40
- initialDelaySeconds: 0,
41
- },
42
- ],
23
+ experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],
43
24
  },
44
25
  },
45
26
  ]) {
27
+ const funcDir = path.dirname(file);
28
+ if (!fs.existsSync(funcDir)) {
29
+ continue;
30
+ }
46
31
  // Un-symlink these as they can't be shared due to different
47
32
  // experimental triggers config
48
- const toCopy = fs.readdirSync(path.dirname(file));
49
- fs.removeSync(path.dirname(file));
50
- fs.mkdirSync(path.dirname(file), { recursive: true });
33
+ const sourceFuncDir = path.join(funcDir.replace(/\.func$/, ''), '__data.json.func');
34
+ const toCopy = fs.readdirSync(funcDir);
35
+ fs.removeSync(funcDir);
36
+ fs.mkdirSync(funcDir, { recursive: true });
51
37
  for (const item of toCopy) {
52
- fs.copySync(path.join(path.dirname(file).replace(/\.func$/, ''), '__data.json.func', item), path.join(path.dirname(file), item));
38
+ fs.copySync(path.join(sourceFuncDir, item), path.join(funcDir, item));
53
39
  }
54
40
  // Update .vc-config.json with the new experimental triggers config
55
41
  const existingConfig = JSON.parse(fs.readFileSync(file, 'utf8'));
@@ -57,7 +43,10 @@ process.on('beforeExit', () => {
57
43
  ...existingConfig,
58
44
  ...config,
59
45
  }));
46
+ // The source function may be a shared catchall. It must not keep stale
47
+ // workflow queue triggers after the dedicated function is copied out.
48
+ stripWorkflowQueueTriggers(path.join(sourceFuncDir, '.vc-config.json'));
60
49
  }
61
50
  });
62
51
  export { workflowPlugin } from './plugin.js';
63
- //# sourceMappingURL=index.js.map
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVELE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBRXZDLCtEQUErRDtBQUMvRCw2REFBNkQ7QUFDN0QsdURBQXVEO0FBQ3ZELE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRXRCLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUM1Qix3REFBd0Q7SUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN0QyxPQUFPO0lBQ1QsQ0FBQztJQUNELDJEQUEyRDtJQUMzRCx1Q0FBdUM7SUFDdkMsS0FBSyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO1FBQzdCO1lBQ0UsSUFBSSxFQUFFLDRFQUE0RTtZQUNsRixNQUFNLEVBQUU7Z0JBQ04sV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLG9CQUFvQixFQUFFLENBQUMsc0JBQXNCLENBQUM7YUFDL0M7U0FDRjtLQUNGLEVBQUUsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixTQUFTO1FBQ1gsQ0FBQztRQUNELDREQUE0RDtRQUM1RCwrQkFBK0I7UUFDL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQzlCLGtCQUFrQixDQUNuQixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0MsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMxQixFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDakUsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLEdBQUcsY0FBYztZQUNqQixHQUFHLE1BQU07U0FDVixDQUFDLENBQ0gsQ0FBQztRQUVGLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiB9IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5pbXBvcnQgeyBTdmVsdGVLaXRCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IHN0cmlwV29ya2Zsb3dRdWV1ZVRyaWdnZXJzIH0gZnJvbSAnLi92Yy1jb25maWcuanMnO1xuXG5jb25zdCBidWlsZGVyID0gbmV3IFN2ZWx0ZUtpdEJ1aWxkZXIoKTtcblxuLy8gVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgdG9wLWxldmVsIGFzIHdlIG5lZWQgdG8gY3JlYXRlIHRoZXNlXG4vLyBlbnRyaWVzIGJlZm9yZSBzdmVsdGUgcGx1Z2luIGlzIHN0YXJ0ZWQgb3IgdGhlIGVudHJpZXMgYXJlXG4vLyBhIHJhY2UgdG8gYmUgY3JlYXRlZCBiZWZvcmUgc3ZlbHRlIGRpc2NvdmVycyBlbnRyaWVzXG5hd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbnByb2Nlc3Mub24oJ2JlZm9yZUV4aXQnLCAoKSA9PiB7XG4gIC8vIERvbid0IHBhdGNoIGZ1bmN0aW9ucyBvdXRwdXQgaWYgbm90IGluIFZlcmNlbCBhZGFwdGVyXG4gIGlmICghcHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gVjI6IE9ubHkgdGhlIGNvbWJpbmVkIGZsb3cgaGFuZGxlciBuZWVkcyBxdWV1ZSB0cmlnZ2Vycy5cbiAgLy8gVGhlIHNlcGFyYXRlIHN0ZXAgcm91dGUgd2FzIHJlbW92ZWQuXG4gIGZvciAoY29uc3QgeyBmaWxlLCBjb25maWcgfSBvZiBbXG4gICAge1xuICAgICAgZmlsZTogJy52ZXJjZWwvb3V0cHV0L2Z1bmN0aW9ucy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9mbG93LmZ1bmMvLnZjLWNvbmZpZy5qc29uJyxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBtYXhEdXJhdGlvbjogJ21heCcsXG4gICAgICAgIGV4cGVyaW1lbnRhbFRyaWdnZXJzOiBbV09SS0ZMT1dfUVVFVUVfVFJJR0dFUl0sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pIHtcbiAgICBjb25zdCBmdW5jRGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhmdW5jRGlyKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFVuLXN5bWxpbmsgdGhlc2UgYXMgdGhleSBjYW4ndCBiZSBzaGFyZWQgZHVlIHRvIGRpZmZlcmVudFxuICAgIC8vIGV4cGVyaW1lbnRhbCB0cmlnZ2VycyBjb25maWdcbiAgICBjb25zdCBzb3VyY2VGdW5jRGlyID0gcGF0aC5qb2luKFxuICAgICAgZnVuY0Rpci5yZXBsYWNlKC9cXC5mdW5jJC8sICcnKSxcbiAgICAgICdfX2RhdGEuanNvbi5mdW5jJ1xuICAgICk7XG4gICAgY29uc3QgdG9Db3B5ID0gZnMucmVhZGRpclN5bmMoZnVuY0Rpcik7XG4gICAgZnMucmVtb3ZlU3luYyhmdW5jRGlyKTtcbiAgICBmcy5ta2RpclN5bmMoZnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdG9Db3B5KSB7XG4gICAgICBmcy5jb3B5U3luYyhwYXRoLmpvaW4oc291cmNlRnVuY0RpciwgaXRlbSksIHBhdGguam9pbihmdW5jRGlyLCBpdGVtKSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIC52Yy1jb25maWcuanNvbiB3aXRoIHRoZSBuZXcgZXhwZXJpbWVudGFsIHRyaWdnZXJzIGNvbmZpZ1xuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZSwgJ3V0ZjgnKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgIGZpbGUsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIC4uLmV4aXN0aW5nQ29uZmlnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBUaGUgc291cmNlIGZ1bmN0aW9uIG1heSBiZSBhIHNoYXJlZCBjYXRjaGFsbC4gSXQgbXVzdCBub3Qga2VlcCBzdGFsZVxuICAgIC8vIHdvcmtmbG93IHF1ZXVlIHRyaWdnZXJzIGFmdGVyIHRoZSBkZWRpY2F0ZWQgZnVuY3Rpb24gaXMgY29waWVkIG91dC5cbiAgICBzdHJpcFdvcmtmbG93UXVldWVUcmlnZ2VycyhwYXRoLmpvaW4oc291cmNlRnVuY0RpciwgJy52Yy1jb25maWcuanNvbicpKTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IHdvcmtmbG93UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4uanMnO1xuIl19
package/dist/plugin.d.ts CHANGED
@@ -1,3 +1,12 @@
1
1
  import type { Plugin } from 'vite';
2
- export declare function workflowPlugin(): Plugin[];
2
+ export interface WorkflowPluginOptions {
3
+ /**
4
+ * Controls how source maps are emitted for workflow bundles. Accepts the
5
+ * same values as esbuild's `sourcemap` option: `true`/`'inline'` (default),
6
+ * `'linked'`, `'external'`, `'both'`, or `false` to omit source maps. Can
7
+ * also be set via the `WORKFLOW_SOURCEMAP` environment variable.
8
+ */
9
+ sourcemap?: boolean | 'inline' | 'linked' | 'external' | 'both';
10
+ }
11
+ export declare function workflowPlugin(options?: WorkflowPluginOptions): Plugin[];
3
12
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAczC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;CACjE;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,EAAE,CA6F5E"}
package/dist/plugin.js CHANGED
@@ -1,19 +1,137 @@
1
- import { createBuildQueue } from '@workflow/builders';
1
+ import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { createBuildQueue, ensureWorkflowTargetWorldEnv, resolveWorkflowTargetWorldAlias, WORKFLOW_NODE_COMPAT_BANNER, WORKFLOW_NODE_FILENAME_BANNER, WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS, WORKFLOW_OPTIONAL_TYPESCRIPT_ALIAS, WORKFLOW_WORLD_TARGET_MODULE, } from '@workflow/builders';
2
4
  import { workflowTransformPlugin } from '@workflow/rollup';
3
5
  import { workflowHotUpdatePlugin } from '@workflow/vite';
4
6
  import { SvelteKitBuilder } from './builder.js';
5
- export function workflowPlugin() {
6
- const builder = new SvelteKitBuilder();
7
+ export function workflowPlugin(options = {}) {
8
+ let builder;
7
9
  const enqueue = createBuildQueue();
8
10
  return [
9
11
  workflowTransformPlugin(),
10
12
  {
11
13
  name: 'workflow:sveltekit',
14
+ enforce: 'post',
15
+ config() {
16
+ const workflowTargetWorld = ensureWorkflowTargetWorldEnv();
17
+ const workflowTargetWorldAlias = resolveWorkflowTargetWorldAlias({
18
+ workingDir: process.cwd(),
19
+ targetWorld: workflowTargetWorld,
20
+ });
21
+ return {
22
+ define: {
23
+ 'process.env.WORKFLOW_TARGET_WORLD': JSON.stringify(workflowTargetWorld),
24
+ },
25
+ resolve: {
26
+ alias: {
27
+ [WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldAlias,
28
+ 'pg-native': WORKFLOW_OPTIONAL_PG_NATIVE_ALIAS,
29
+ typescript: WORKFLOW_OPTIONAL_TYPESCRIPT_ALIAS,
30
+ },
31
+ },
32
+ };
33
+ },
34
+ // SvelteKit bundles the server (including undici, via the world adapter)
35
+ // into ESM output. undici loads most node: builtins as ESM imports, but
36
+ // pulls in `node:http2` lazily via a bare `require('node:http2')` inside a
37
+ // try/catch — which the bundler leaves un-wired, so in the ESM bundle the
38
+ // require throws and undici silently falls back to a stub whose
39
+ // `http2.connect` is undefined. That breaks any HTTP/2 request (observed
40
+ // as the workflow flow-route callback failing with "fetch failed" ->
41
+ // runs never start). Provide a working CJS `require` for the *server*
42
+ // build so the real `node:http2` resolves.
43
+ //
44
+ // Detection runs in `configResolved` (not the `config` hook): SvelteKit
45
+ // does not set `env.isSsrBuild` for its server pass, but `build.ssr` is
46
+ // set on the resolved config. We gate to the SSR build because a
47
+ // `node:module` import in the client/browser bundle would break it.
48
+ //
49
+ // This is a Node-server-runtime-only shim. Note the deliberate global
50
+ // side effect: defining `globalThis.require` makes `typeof require` truthy
51
+ // for *every* bundled dependency in this ESM server output, so any library
52
+ // that feature-detects `require` will take its CJS path here. That is safe
53
+ // because (a) it never touches the client bundle, (b) the `typeof require
54
+ // === 'undefined'` guard makes it a no-op in CJS chunks where a real
55
+ // `require` already exists, and (c) the `require` we install is a working
56
+ // `createRequire`, so a library that switches to the require path gets a
57
+ // functional `require`, not a broken stub. The behavior to watch for is a
58
+ // bundled lib that, on seeing `require`, does `require()` of an ESM-only
59
+ // dependency on a Node version without `require(ESM)` support.
60
+ configResolved(config) {
61
+ if (config.command === 'serve') {
62
+ builder = new SvelteKitBuilder({
63
+ workingDir: config.root,
64
+ sourcemap: options.sourcemap,
65
+ });
66
+ }
67
+ if (!config.build?.ssr) {
68
+ return;
69
+ }
70
+ const banner = WORKFLOW_NODE_COMPAT_BANNER;
71
+ const rollupOptions = config.build.rollupOptions;
72
+ rollupOptions.output ??= {};
73
+ const output = rollupOptions.output;
74
+ const outputs = Array.isArray(output) ? output : [output];
75
+ for (const output of outputs) {
76
+ const existing = output.banner;
77
+ if (existing == null) {
78
+ output.banner = banner;
79
+ continue;
80
+ }
81
+ output.banner =
82
+ typeof existing === 'function'
83
+ ? async (chunk) => `${banner}\n${await existing(chunk)}`
84
+ : `${banner}\n${existing}`;
85
+ }
86
+ },
87
+ closeBundle() {
88
+ patchAdapterNodeServerChunks(process.cwd());
89
+ },
12
90
  },
13
91
  workflowHotUpdatePlugin({
14
- builder,
92
+ builder: () => builder,
15
93
  enqueue,
16
94
  }),
17
95
  ];
18
96
  }
19
- //# sourceMappingURL=plugin.js.map
97
+ function patchAdapterNodeServerChunks(cwd) {
98
+ const serverDir = join(cwd, 'build/server');
99
+ if (!existsSync(serverDir)) {
100
+ return;
101
+ }
102
+ const banner = WORKFLOW_NODE_FILENAME_BANNER;
103
+ const visit = (dir) => {
104
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
105
+ const file = join(dir, entry.name);
106
+ if (entry.isDirectory()) {
107
+ visit(file);
108
+ continue;
109
+ }
110
+ if (!entry.isFile() || !entry.name.endsWith('.js')) {
111
+ continue;
112
+ }
113
+ const source = readFileSync(file, 'utf-8');
114
+ // Only patch chunks that reference __filename/__dirname without
115
+ // declaring their own binding. Prepending the banner onto a chunk
116
+ // that already declares either identifier (const/let/var, e.g. a
117
+ // CJS-interop shim) would produce a duplicate top-level declaration
118
+ // and crash the server with a SyntaxError at startup.
119
+ //
120
+ // The `(?![\w$])` lookaheads matter: when adapter-node re-bundles the
121
+ // intermediate output, rollup renames colliding declarations to e.g.
122
+ // `__filename$1`. A bare `\b` boundary matches those ($ is not a word
123
+ // character), which made this skip chunks that declare only a RENAMED
124
+ // binding while still referencing the bare `__filename` (observed with
125
+ // the bundled `typescript` compiler pulled in via cosmiconfig — the
126
+ // server crashed at boot with "__filename is not defined").
127
+ const referencesFilename = /(?<![\w$])__(?:file|dir)name(?![\w$])/.test(source);
128
+ const declaresOwnBinding = /\b(?:const|let|var)\s+__(?:file|dir)name(?![\w$])/.test(source);
129
+ if (!referencesFilename || declaresOwnBinding) {
130
+ continue;
131
+ }
132
+ writeFileSync(file, `${banner}\n${source}`);
133
+ }
134
+ };
135
+ visit(serverDir);
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUNMLGdCQUFnQixFQUNoQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLDJCQUEyQixFQUMzQiw2QkFBNkIsRUFDN0IsaUNBQWlDLEVBQ2pDLGtDQUFrQyxFQUNsQyw0QkFBNEIsR0FDN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFZaEQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUFpQyxFQUFFO0lBQ2hFLElBQUksT0FBcUMsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRW5DLE9BQU87UUFDTCx1QkFBdUIsRUFBWTtRQUNuQztZQUNFLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsT0FBTyxFQUFFLE1BQU07WUFDZixNQUFNO2dCQUNKLE1BQU0sbUJBQW1CLEdBQUcsNEJBQTRCLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSx3QkFBd0IsR0FBRywrQkFBK0IsQ0FBQztvQkFDL0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7b0JBQ3pCLFdBQVcsRUFBRSxtQkFBbUI7aUJBQ2pDLENBQUMsQ0FBQztnQkFDSCxPQUFPO29CQUNMLE1BQU0sRUFBRTt3QkFDTixtQ0FBbUMsRUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztx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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICBjcmVhdGVCdWlsZFF1ZXVlLFxuICBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52LFxuICByZXNvbHZlV29ya2Zsb3dUYXJnZXRXb3JsZEFsaWFzLFxuICBXT1JLRkxPV19OT0RFX0NPTVBBVF9CQU5ORVIsXG4gIFdPUktGTE9XX05PREVfRklMRU5BTUVfQkFOTkVSLFxuICBXT1JLRkxPV19PUFRJT05BTF9QR19OQVRJVkVfQUxJQVMsXG4gIFdPUktGTE9XX09QVElPTkFMX1RZUEVTQ1JJUFRfQUxJQVMsXG4gIFdPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEUsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgeyB3b3JrZmxvd1RyYW5zZm9ybVBsdWdpbiB9IGZyb20gJ0B3b3JrZmxvdy9yb2xsdXAnO1xuaW1wb3J0IHsgd29ya2Zsb3dIb3RVcGRhdGVQbHVnaW4gfSBmcm9tICdAd29ya2Zsb3cvdml0ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgU3ZlbHRlS2l0QnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dQbHVnaW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBzb3VyY2UgbWFwcyBhcmUgZW1pdHRlZCBmb3Igd29ya2Zsb3cgYnVuZGxlcy4gQWNjZXB0cyB0aGVcbiAgICogc2FtZSB2YWx1ZXMgYXMgZXNidWlsZCdzIGBzb3VyY2VtYXBgIG9wdGlvbjogYHRydWVgL2AnaW5saW5lJ2AgKGRlZmF1bHQpLFxuICAgKiBgJ2xpbmtlZCdgLCBgJ2V4dGVybmFsJ2AsIGAnYm90aCdgLCBvciBgZmFsc2VgIHRvIG9taXQgc291cmNlIG1hcHMuIENhblxuICAgKiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dQbHVnaW4ob3B0aW9uczogV29ya2Zsb3dQbHVnaW5PcHRpb25zID0ge30pOiBQbHVnaW5bXSB7XG4gIGxldCBidWlsZGVyOiBTdmVsdGVLaXRCdWlsZGVyIHwgdW5kZWZpbmVkO1xuICBjb25zdCBlbnF1ZXVlID0gY3JlYXRlQnVpbGRRdWV1ZSgpO1xuXG4gIHJldHVybiBbXG4gICAgd29ya2Zsb3dUcmFuc2Zvcm1QbHVnaW4oKSBhcyBQbHVnaW4sXG4gICAge1xuICAgICAgbmFtZTogJ3dvcmtmbG93OnN2ZWx0ZWtpdCcsXG4gICAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgICBjb25maWcoKSB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGQgPSBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KCk7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyA9IHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICAgICAgICAgIHdvcmtpbmdEaXI6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgdGFyZ2V0V29ybGQ6IHdvcmtmbG93VGFyZ2V0V29ybGQsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgJ3Byb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCc6XG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHdvcmtmbG93VGFyZ2V0V29ybGQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZToge1xuICAgICAgICAgICAgYWxpYXM6IHtcbiAgICAgICAgICAgICAgW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdOiB3b3JrZmxvd1RhcmdldFdvcmxkQWxpYXMsXG4gICAgICAgICAgICAgICdwZy1uYXRpdmUnOiBXT1JLRkxPV19PUFRJT05BTF9QR19OQVRJVkVfQUxJQVMsXG4gICAgICAgICAgICAgIHR5cGVzY3JpcHQ6IFdPUktGTE9XX09QVElPTkFMX1RZUEVTQ1JJUFRfQUxJQVMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLy8gU3ZlbHRlS2l0IGJ1bmRsZXMgdGhlIHNlcnZlciAoaW5jbHVkaW5nIHVuZGljaSwgdmlhIHRoZSB3b3JsZCBhZGFwdGVyKVxuICAgICAgLy8gaW50byBFU00gb3V0cHV0LiB1bmRpY2kgbG9hZHMgbW9zdCBub2RlOiBidWlsdGlucyBhcyBFU00gaW1wb3J0cywgYnV0XG4gICAgICAvLyBwdWxscyBpbiBgbm9kZTpodHRwMmAgbGF6aWx5IHZpYSBhIGJhcmUgYHJlcXVpcmUoJ25vZGU6aHR0cDInKWAgaW5zaWRlIGFcbiAgICAgIC8vIHRyeS9jYXRjaCDigJQgd2hpY2ggdGhlIGJ1bmRsZXIgbGVhdmVzIHVuLXdpcmVkLCBzbyBpbiB0aGUgRVNNIGJ1bmRsZSB0aGVcbiAgICAgIC8vIHJlcXVpcmUgdGhyb3dzIGFuZCB1bmRpY2kgc2lsZW50bHkgZmFsbHMgYmFjayB0byBhIHN0dWIgd2hvc2VcbiAgICAgIC8vIGBodHRwMi5jb25uZWN0YCBpcyB1bmRlZmluZWQuIFRoYXQgYnJlYWtzIGFueSBIVFRQLzIgcmVxdWVzdCAob2JzZXJ2ZWRcbiAgICAgIC8vIGFzIHRoZSB3b3JrZmxvdyBmbG93LXJvdXRlIGNhbGxiYWNrIGZhaWxpbmcgd2l0aCBcImZldGNoIGZhaWxlZFwiIC0+XG4gICAgICAvLyBydW5zIG5ldmVyIHN0YXJ0KS4gUHJvdmlkZSBhIHdvcmtpbmcgQ0pTIGByZXF1aXJlYCBmb3IgdGhlICpzZXJ2ZXIqXG4gICAgICAvLyBidWlsZCBzbyB0aGUgcmVhbCBgbm9kZTpodHRwMmAgcmVzb2x2ZXMuXG4gICAgICAvL1xuICAgICAgLy8gRGV0ZWN0aW9uIHJ1bnMgaW4gYGNvbmZpZ1Jlc29sdmVkYCAobm90IHRoZSBgY29uZmlnYCBob29rKTogU3ZlbHRlS2l0XG4gICAgICAvLyBkb2VzIG5vdCBzZXQgYGVudi5pc1NzckJ1aWxkYCBmb3IgaXRzIHNlcnZlciBwYXNzLCBidXQgYGJ1aWxkLnNzcmAgaXNcbiAgICAgIC8vIHNldCBvbiB0aGUgcmVzb2x2ZWQgY29uZmlnLiBXZSBnYXRlIHRvIHRoZSBTU1IgYnVpbGQgYmVjYXVzZSBhXG4gICAgICAvLyBgbm9kZTptb2R1bGVgIGltcG9ydCBpbiB0aGUgY2xpZW50L2Jyb3dzZXIgYnVuZGxlIHdvdWxkIGJyZWFrIGl0LlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgaXMgYSBOb2RlLXNlcnZlci1ydW50aW1lLW9ubHkgc2hpbS4gTm90ZSB0aGUgZGVsaWJlcmF0ZSBnbG9iYWxcbiAgICAgIC8vIHNpZGUgZWZmZWN0OiBkZWZpbmluZyBgZ2xvYmFsVGhpcy5yZXF1aXJlYCBtYWtlcyBgdHlwZW9mIHJlcXVpcmVgIHRydXRoeVxuICAgICAgLy8gZm9yICpldmVyeSogYnVuZGxlZCBkZXBlbmRlbmN5IGluIHRoaXMgRVNNIHNlcnZlciBvdXRwdXQsIHNvIGFueSBsaWJyYXJ5XG4gICAgICAvLyB0aGF0IGZlYXR1cmUtZGV0ZWN0cyBgcmVxdWlyZWAgd2lsbCB0YWtlIGl0cyBDSlMgcGF0aCBoZXJlLiBUaGF0IGlzIHNhZmVcbiAgICAgIC8vIGJlY2F1c2UgKGEpIGl0IG5ldmVyIHRvdWNoZXMgdGhlIGNsaWVudCBidW5kbGUsIChiKSB0aGUgYHR5cGVvZiByZXF1aXJlXG4gICAgICAvLyA9PT0gJ3VuZGVmaW5lZCdgIGd1YXJkIG1ha2VzIGl0IGEgbm8tb3AgaW4gQ0pTIGNodW5rcyB3aGVyZSBhIHJlYWxcbiAgICAgIC8vIGByZXF1aXJlYCBhbHJlYWR5IGV4aXN0cywgYW5kIChjKSB0aGUgYHJlcXVpcmVgIHdlIGluc3RhbGwgaXMgYSB3b3JraW5nXG4gICAgICAvLyBgY3JlYXRlUmVxdWlyZWAsIHNvIGEgbGlicmFyeSB0aGF0IHN3aXRjaGVzIHRvIHRoZSByZXF1aXJlIHBhdGggZ2V0cyBhXG4gICAgICAvLyBmdW5jdGlvbmFsIGByZXF1aXJlYCwgbm90IGEgYnJva2VuIHN0dWIuIFRoZSBiZWhhdmlvciB0byB3YXRjaCBmb3IgaXMgYVxuICAgICAgLy8gYnVuZGxlZCBsaWIgdGhhdCwgb24gc2VlaW5nIGByZXF1aXJlYCwgZG9lcyBgcmVxdWlyZSgpYCBvZiBhbiBFU00tb25seVxuICAgICAgLy8gZGVwZW5kZW5jeSBvbiBhIE5vZGUgdmVyc2lvbiB3aXRob3V0IGByZXF1aXJlKEVTTSlgIHN1cHBvcnQuXG4gICAgICBjb25maWdSZXNvbHZlZChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5jb21tYW5kID09PSAnc2VydmUnKSB7XG4gICAgICAgICAgYnVpbGRlciA9IG5ldyBTdmVsdGVLaXRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdvcmtpbmdEaXI6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgc291cmNlbWFwOiBvcHRpb25zLnNvdXJjZW1hcCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLmJ1aWxkPy5zc3IpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYW5uZXIgPSBXT1JLRkxPV19OT0RFX0NPTVBBVF9CQU5ORVI7XG4gICAgICAgIGNvbnN0IHJvbGx1cE9wdGlvbnMgPSBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucztcbiAgICAgICAgcm9sbHVwT3B0aW9ucy5vdXRwdXQgPz89IHt9O1xuICAgICAgICBjb25zdCBvdXRwdXQgPSByb2xsdXBPcHRpb25zLm91dHB1dDtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IEFycmF5LmlzQXJyYXkob3V0cHV0KSA/IG91dHB1dCA6IFtvdXRwdXRdO1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBvdXRwdXRzKSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBvdXRwdXQuYmFubmVyO1xuICAgICAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7XG4gICAgICAgICAgICBvdXRwdXQuYmFubmVyID0gYmFubmVyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5iYW5uZXIgPVxuICAgICAgICAgICAgdHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgID8gYXN5bmMgKGNodW5rKSA9PiBgJHtiYW5uZXJ9XFxuJHthd2FpdCBleGlzdGluZyhjaHVuayl9YFxuICAgICAgICAgICAgICA6IGAke2Jhbm5lcn1cXG4ke2V4aXN0aW5nfWA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZUJ1bmRsZSgpIHtcbiAgICAgICAgcGF0Y2hBZGFwdGVyTm9kZVNlcnZlckNodW5rcyhwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3b3JrZmxvd0hvdFVwZGF0ZVBsdWdpbih7XG4gICAgICBidWlsZGVyOiAoKSA9PiBidWlsZGVyLFxuICAgICAgZW5xdWV1ZSxcbiAgICB9KSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hBZGFwdGVyTm9kZVNlcnZlckNodW5rcyhjd2Q6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBzZXJ2ZXJEaXIgPSBqb2luKGN3ZCwgJ2J1aWxkL3NlcnZlcicpO1xuICBpZiAoIWV4aXN0c1N5bmMoc2VydmVyRGlyKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGJhbm5lciA9IFdPUktGTE9XX05PREVfRklMRU5BTUVfQkFOTkVSO1xuXG4gIGNvbnN0IHZpc2l0ID0gKGRpcjogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgICAgY29uc3QgZmlsZSA9IGpvaW4oZGlyLCBlbnRyeS5uYW1lKTtcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHZpc2l0KGZpbGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghZW50cnkuaXNGaWxlKCkgfHwgIWVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5qcycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2UgPSByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04Jyk7XG4gICAgICAvLyBPbmx5IHBhdGNoIGNodW5rcyB0aGF0IHJlZmVyZW5jZSBfX2ZpbGVuYW1lL19fZGlybmFtZSB3aXRob3V0XG4gICAgICAvLyBkZWNsYXJpbmcgdGhlaXIgb3duIGJpbmRpbmcuIFByZXBlbmRpbmcgdGhlIGJhbm5lciBvbnRvIGEgY2h1bmtcbiAgICAgIC8vIHRoYXQgYWxyZWFkeSBkZWNsYXJlcyBlaXRoZXIgaWRlbnRpZmllciAoY29uc3QvbGV0L3ZhciwgZS5nLiBhXG4gICAgICAvLyBDSlMtaW50ZXJvcCBzaGltKSB3b3VsZCBwcm9kdWNlIGEgZHVwbGljYXRlIHRvcC1sZXZlbCBkZWNsYXJhdGlvblxuICAgICAgLy8gYW5kIGNyYXNoIHRoZSBzZXJ2ZXIgd2l0aCBhIFN5bnRheEVycm9yIGF0IHN0YXJ0dXAuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGAoPyFbXFx3JF0pYCBsb29rYWhlYWRzIG1hdHRlcjogd2hlbiBhZGFwdGVyLW5vZGUgcmUtYnVuZGxlcyB0aGVcbiAgICAgIC8vIGludGVybWVkaWF0ZSBvdXRwdXQsIHJvbGx1cCByZW5hbWVzIGNvbGxpZGluZyBkZWNsYXJhdGlvbnMgdG8gZS5nLlxuICAgICAgLy8gYF9fZmlsZW5hbWUkMWAuIEEgYmFyZSBgXFxiYCBib3VuZGFyeSBtYXRjaGVzIHRob3NlICgkIGlzIG5vdCBhIHdvcmRcbiAgICAgIC8vIGNoYXJhY3RlciksIHdoaWNoIG1hZGUgdGhpcyBza2lwIGNodW5rcyB0aGF0IGRlY2xhcmUgb25seSBhIFJFTkFNRURcbiAgICAgIC8vIGJpbmRpbmcgd2hpbGUgc3RpbGwgcmVmZXJlbmNpbmcgdGhlIGJhcmUgYF9fZmlsZW5hbWVgIChvYnNlcnZlZCB3aXRoXG4gICAgICAvLyB0aGUgYnVuZGxlZCBgdHlwZXNjcmlwdGAgY29tcGlsZXIgcHVsbGVkIGluIHZpYSBjb3NtaWNvbmZpZyDigJQgdGhlXG4gICAgICAvLyBzZXJ2ZXIgY3Jhc2hlZCBhdCBib290IHdpdGggXCJfX2ZpbGVuYW1lIGlzIG5vdCBkZWZpbmVkXCIpLlxuICAgICAgY29uc3QgcmVmZXJlbmNlc0ZpbGVuYW1lID0gLyg/PCFbXFx3JF0pX18oPzpmaWxlfGRpciluYW1lKD8hW1xcdyRdKS8udGVzdChcbiAgICAgICAgc291cmNlXG4gICAgICApO1xuICAgICAgY29uc3QgZGVjbGFyZXNPd25CaW5kaW5nID1cbiAgICAgICAgL1xcYig/OmNvbnN0fGxldHx2YXIpXFxzK19fKD86ZmlsZXxkaXIpbmFtZSg/IVtcXHckXSkvLnRlc3Qoc291cmNlKTtcbiAgICAgIGlmICghcmVmZXJlbmNlc0ZpbGVuYW1lIHx8IGRlY2xhcmVzT3duQmluZGluZykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgd3JpdGVGaWxlU3luYyhmaWxlLCBgJHtiYW5uZXJ9XFxuJHtzb3VyY2V9YCk7XG4gICAgfVxuICB9O1xuXG4gIHZpc2l0KHNlcnZlckRpcik7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export declare function stripWorkflowQueueTriggersFromConfig<TConfig extends Record<string, unknown>>(existingConfig: TConfig): TConfig;
2
+ export declare function stripWorkflowQueueTriggers(file: string): void;
3
+ //# sourceMappingURL=vc-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vc-config.d.ts","sourceRoot":"","sources":["../src/vc-config.ts"],"names":[],"mappings":"AAcA,wBAAgB,oCAAoC,CAClD,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,cAAc,EAAE,OAAO,GAAG,OAAO,CAqBlC;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,QAYtD"}
@@ -0,0 +1,40 @@
1
+ import { WORKFLOW_QUEUE_TRIGGER } from '@workflow/builders';
2
+ import fs from 'fs-extra';
3
+ const WORKFLOW_QUEUE_TOPICS = new Set([WORKFLOW_QUEUE_TRIGGER.topic]);
4
+ function isWorkflowQueueTrigger(trigger) {
5
+ if (typeof trigger !== 'object' || trigger === null) {
6
+ return false;
7
+ }
8
+ const topic = trigger.topic;
9
+ return typeof topic === 'string' && WORKFLOW_QUEUE_TOPICS.has(topic);
10
+ }
11
+ export function stripWorkflowQueueTriggersFromConfig(existingConfig) {
12
+ const experimentalTriggers = existingConfig.experimentalTriggers;
13
+ if (!Array.isArray(experimentalTriggers)) {
14
+ return existingConfig;
15
+ }
16
+ const filteredTriggers = experimentalTriggers.filter((trigger) => !isWorkflowQueueTrigger(trigger));
17
+ if (filteredTriggers.length === experimentalTriggers.length) {
18
+ return existingConfig;
19
+ }
20
+ const nextConfig = { ...existingConfig };
21
+ if (filteredTriggers.length > 0) {
22
+ nextConfig.experimentalTriggers = filteredTriggers;
23
+ }
24
+ else {
25
+ delete nextConfig.experimentalTriggers;
26
+ }
27
+ return nextConfig;
28
+ }
29
+ export function stripWorkflowQueueTriggers(file) {
30
+ if (!fs.existsSync(file)) {
31
+ return;
32
+ }
33
+ const existingConfig = JSON.parse(fs.readFileSync(file, 'utf8'));
34
+ const nextConfig = stripWorkflowQueueTriggersFromConfig(existingConfig);
35
+ if (nextConfig === existingConfig) {
36
+ return;
37
+ }
38
+ fs.writeFileSync(file, JSON.stringify(nextConfig));
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmMtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZjLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFMUIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFdEUsU0FBUyxzQkFBc0IsQ0FBQyxPQUFnQjtJQUM5QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUksT0FBK0IsQ0FBQyxLQUFLLENBQUM7SUFDckQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFVBQVUsb0NBQW9DLENBRWxELGNBQXVCO0lBQ3ZCLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxDQUFDLG9CQUFvQixDQUFDO0lBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQ2xELENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUM5QyxDQUFDO0lBQ0YsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUE0QixFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDbEUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsVUFBVSxDQUFDLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0lBQ3JELENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxVQUFVLENBQUMsb0JBQW9CLENBQUM7SUFDekMsQ0FBQztJQUVELE9BQU8sVUFBcUIsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUFDLElBQVk7SUFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLFVBQVUsR0FBRyxvQ0FBb0MsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RSxJQUFJLFVBQVUsS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUNsQyxPQUFPO0lBQ1QsQ0FBQztJQUVELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiB9IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5jb25zdCBXT1JLRkxPV19RVUVVRV9UT1BJQ1MgPSBuZXcgU2V0KFtXT1JLRkxPV19RVUVVRV9UUklHR0VSLnRvcGljXSk7XG5cbmZ1bmN0aW9uIGlzV29ya2Zsb3dRdWV1ZVRyaWdnZXIodHJpZ2dlcjogdW5rbm93bikge1xuICBpZiAodHlwZW9mIHRyaWdnZXIgIT09ICdvYmplY3QnIHx8IHRyaWdnZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB0b3BpYyA9ICh0cmlnZ2VyIGFzIHsgdG9waWM/OiB1bmtub3duIH0pLnRvcGljO1xuICByZXR1cm4gdHlwZW9mIHRvcGljID09PSAnc3RyaW5nJyAmJiBXT1JLRkxPV19RVUVVRV9UT1BJQ1MuaGFzKHRvcGljKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwV29ya2Zsb3dRdWV1ZVRyaWdnZXJzRnJvbUNvbmZpZzxcbiAgVENvbmZpZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPihleGlzdGluZ0NvbmZpZzogVENvbmZpZyk6IFRDb25maWcge1xuICBjb25zdCBleHBlcmltZW50YWxUcmlnZ2VycyA9IGV4aXN0aW5nQ29uZmlnLmV4cGVyaW1lbnRhbFRyaWdnZXJzO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZXJpbWVudGFsVHJpZ2dlcnMpKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlnO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyZWRUcmlnZ2VycyA9IGV4cGVyaW1lbnRhbFRyaWdnZXJzLmZpbHRlcihcbiAgICAodHJpZ2dlcikgPT4gIWlzV29ya2Zsb3dRdWV1ZVRyaWdnZXIodHJpZ2dlcilcbiAgKTtcbiAgaWYgKGZpbHRlcmVkVHJpZ2dlcnMubGVuZ3RoID09PSBleHBlcmltZW50YWxUcmlnZ2Vycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZXhpc3RpbmdDb25maWc7XG4gIH1cblxuICBjb25zdCBuZXh0Q29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uZXhpc3RpbmdDb25maWcgfTtcbiAgaWYgKGZpbHRlcmVkVHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgIG5leHRDb25maWcuZXhwZXJpbWVudGFsVHJpZ2dlcnMgPSBmaWx0ZXJlZFRyaWdnZXJzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbFRyaWdnZXJzO1xuICB9XG5cbiAgcmV0dXJuIG5leHRDb25maWcgYXMgVENvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwV29ya2Zsb3dRdWV1ZVRyaWdnZXJzKGZpbGU6IHN0cmluZykge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JykpO1xuICBjb25zdCBuZXh0Q29uZmlnID0gc3RyaXBXb3JrZmxvd1F1ZXVlVHJpZ2dlcnNGcm9tQ29uZmlnKGV4aXN0aW5nQ29uZmlnKTtcbiAgaWYgKG5leHRDb25maWcgPT09IGV4aXN0aW5nQ29uZmlnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnMud3JpdGVGaWxlU3luYyhmaWxlLCBKU09OLnN0cmluZ2lmeShuZXh0Q29uZmlnKSk7XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/sveltekit",
3
- "version": "5.0.0-beta.3",
3
+ "version": "5.0.0-beta.31",
4
4
  "description": "SvelteKit integration for Workflow SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,15 +24,15 @@
24
24
  "exsolve": "^1.0.8",
25
25
  "fs-extra": "^11.3.2",
26
26
  "pathe": "^2.0.3",
27
- "@workflow/rollup": "5.0.0-beta.3",
28
- "@workflow/builders": "5.0.0-beta.3",
29
- "@workflow/swc-plugin": "5.0.0-beta.3",
30
- "@workflow/vite": "5.0.0-beta.3"
27
+ "@workflow/builders": "5.0.0-beta.31",
28
+ "@workflow/rollup": "5.0.0-beta.31",
29
+ "@workflow/swc-plugin": "5.0.0-beta.5",
30
+ "@workflow/vite": "5.0.0-beta.31"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/fs-extra": "11.0.4",
34
34
  "@types/node": "22.19.0",
35
- "vite": "7.3.2",
35
+ "vite": "7.3.6",
36
36
  "@workflow/tsconfig": "5.0.0-beta.0"
37
37
  },
38
38
  "scripts": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants } from 'node:fs';\nimport {\n access,\n copyFile,\n mkdir,\n readFile,\n stat,\n writeFile,\n} from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport {\n BaseBuilder,\n NORMALIZE_REQUEST_CODE,\n type SvelteKitConfig,\n} from '@workflow/builders';\n\nconst SVELTEKIT_VIRTUAL_MODULES = [\n '$env/*', // All $env subpaths\n '$lib', // Exact $lib import\n '$lib/*', // All $lib subpaths\n '$app/*', // All $app subpaths\n];\n\nexport class SvelteKitBuilder extends BaseBuilder {\n constructor(config?: Partial<SvelteKitConfig>) {\n const workingDir = config?.workingDir || process.cwd();\n\n super({\n ...config,\n dirs: ['workflows', 'src/workflows', 'routes', 'src/routes'],\n buildTarget: 'sveltekit' as const,\n stepsBundlePath: '', // unused in base\n workflowsBundlePath: '', // unused in base\n webhookBundlePath: '', // unused in base\n workingDir,\n externalPackages: [...SVELTEKIT_VIRTUAL_MODULES],\n });\n }\n\n override async build(): Promise<void> {\n // Find SvelteKit routes directory (src/routes or routes)\n const routesDir = await this.findRoutesDirectory();\n const workflowGeneratedDir = join(routesDir, '.well-known/workflow/v1');\n\n // Ensure output directories exist\n await mkdir(workflowGeneratedDir, { recursive: true });\n\n // Add .gitignore to exclude generated files from version control\n if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {\n await writeFile(join(workflowGeneratedDir, '.gitignore'), '*');\n }\n\n // Get workflow and step files to bundle\n const inputFiles = await this.getInputFiles();\n const tsconfigPath = await this.findTsConfigPath();\n\n const options = {\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n };\n\n // Generate the three SvelteKit route handlers\n const stepsManifest = await this.buildStepsRoute(options);\n const workflowsManifest = await this.buildWorkflowsRoute(options);\n await this.buildWebhookRoute({ workflowGeneratedDir });\n\n // Merge manifests from both bundles\n const manifest = {\n steps: { ...stepsManifest.steps, ...workflowsManifest.steps },\n workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },\n classes: { ...stepsManifest.classes, ...workflowsManifest.classes },\n };\n\n // Generate unified manifest\n const workflowBundlePath = join(workflowGeneratedDir, 'flow/+server.js');\n const manifestJson = await this.createManifest({\n workflowBundlePath,\n manifestDir: workflowGeneratedDir,\n manifest,\n });\n\n // Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.\n // SvelteKit serves files from static/ at the root URL.\n if (this.shouldExposePublicManifest && manifestJson) {\n const staticManifestDir = join(\n this.config.workingDir,\n 'static/.well-known/workflow/v1'\n );\n await mkdir(staticManifestDir, { recursive: true });\n await copyFile(\n join(workflowGeneratedDir, 'manifest.json'),\n join(staticManifestDir, 'manifest.json')\n );\n }\n }\n\n private async buildStepsRoute({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n // Create steps route: .well-known/workflow/v1/step/+server.js\n const stepsRouteDir = join(workflowGeneratedDir, 'step');\n await mkdir(stepsRouteDir, { recursive: true });\n\n const { manifest } = await this.createStepsBundle({\n format: 'esm',\n inputFiles,\n outfile: join(stepsRouteDir, '+server.js'),\n externalizeNonSteps: true,\n tsconfigPath,\n });\n\n // Post-process the generated file to wrap with SvelteKit request converter\n const stepsRouteFile = join(stepsRouteDir, '+server.js');\n let stepsRouteContent = await readFile(stepsRouteFile, 'utf-8');\n\n // Replace the default export with SvelteKit-compatible handler\n stepsRouteContent = stepsRouteContent.replace(\n /export\\s*\\{\\s*stepEntrypoint\\s+as\\s+POST\\s*\\}\\s*;?$/m,\n `${NORMALIZE_REQUEST_CODE}\nexport const POST = async ({request}) => {\n const normalRequest = await normalizeRequest(request);\n return stepEntrypoint(normalRequest);\n}`\n );\n\n await writeFile(stepsRouteFile, stepsRouteContent);\n return manifest;\n }\n\n private async buildWorkflowsRoute({\n inputFiles,\n workflowGeneratedDir,\n tsconfigPath,\n }: {\n inputFiles: string[];\n workflowGeneratedDir: string;\n tsconfigPath?: string;\n }) {\n // Create workflows route: .well-known/workflow/v1/flow/+server.js\n const workflowsRouteDir = join(workflowGeneratedDir, 'flow');\n await mkdir(workflowsRouteDir, { recursive: true });\n\n const { manifest } = await this.createWorkflowsBundle({\n format: 'esm',\n outfile: join(workflowsRouteDir, '+server.js'),\n bundleFinalOutput: false,\n inputFiles,\n tsconfigPath,\n });\n\n // Post-process the generated file to wrap with SvelteKit request converter\n const workflowsRouteFile = join(workflowsRouteDir, '+server.js');\n let workflowsRouteContent = await readFile(workflowsRouteFile, 'utf-8');\n\n // Replace the default export with SvelteKit-compatible handler\n workflowsRouteContent = workflowsRouteContent.replace(\n /export const POST = workflowEntrypoint\\(workflowCode\\);?$/m,\n `${NORMALIZE_REQUEST_CODE}\nexport const POST = async ({request}) => {\n const normalRequest = await normalizeRequest(request);\n return workflowEntrypoint(workflowCode)(normalRequest);\n}`\n );\n await writeFile(workflowsRouteFile, workflowsRouteContent);\n\n return manifest;\n }\n\n private async buildWebhookRoute({\n workflowGeneratedDir,\n }: {\n workflowGeneratedDir: string;\n }) {\n // Create webhook route: .well-known/workflow/v1/webhook/[token]/+server.js\n const webhookRouteFile = join(\n workflowGeneratedDir,\n 'webhook/[token]/+server.js'\n );\n\n await this.createWebhookBundle({\n outfile: webhookRouteFile,\n bundle: false, // SvelteKit will handle bundling\n });\n\n // Post-process the generated file to wrap with SvelteKit request converter\n let webhookRouteContent = await readFile(webhookRouteFile, 'utf-8');\n\n // Update handler signature to accept token as parameter\n webhookRouteContent = webhookRouteContent.replace(\n /async function handler\\(request\\) \\{[\\s\\S]*?const token = decodeURIComponent\\(pathParts\\[pathParts\\.length - 1\\]\\);/,\n `async function handler(request, token) {`\n );\n\n // Remove the URL parsing code since we get token from params\n webhookRouteContent = webhookRouteContent.replace(\n /const url = new URL\\(request\\.url\\);[\\s\\S]*?const pathParts = url\\.pathname\\.split\\('\\/'\\);[\\s\\S]*?\\n/,\n ''\n );\n\n // Replace all HTTP method exports with SvelteKit-compatible handlers\n webhookRouteContent = webhookRouteContent.replace(\n /export const GET = handler;\\nexport const POST = handler;\\nexport const PUT = handler;\\nexport const PATCH = handler;\\nexport const DELETE = handler;\\nexport const HEAD = handler;\\nexport const OPTIONS = handler;/,\n `${NORMALIZE_REQUEST_CODE}\nconst createSvelteKitHandler = (method) => async ({ request, params, platform }) => {\n const normalRequest = await normalizeRequest(request);\n const response = await handler(normalRequest, params.token);\n return response;\n};\n\nexport const GET = createSvelteKitHandler('GET');\nexport const POST = createSvelteKitHandler('POST');\nexport const PUT = createSvelteKitHandler('PUT');\nexport const PATCH = createSvelteKitHandler('PATCH');\nexport const DELETE = createSvelteKitHandler('DELETE');\nexport const HEAD = createSvelteKitHandler('HEAD');\nexport const OPTIONS = createSvelteKitHandler('OPTIONS');`\n );\n\n await writeFile(webhookRouteFile, webhookRouteContent);\n }\n\n private async findRoutesDirectory(): Promise<string> {\n const routesDir = resolve(this.config.workingDir, 'src/routes');\n const rootRoutesDir = resolve(this.config.workingDir, 'routes');\n\n // Try src/routes first (standard SvelteKit convention)\n try {\n await access(routesDir, constants.F_OK);\n const routesStats = await stat(routesDir);\n if (!routesStats.isDirectory()) {\n throw new Error(`Path exists but is not a directory: ${routesDir}`);\n }\n return routesDir;\n } catch {\n // Try routes as fallback\n try {\n await access(rootRoutesDir, constants.F_OK);\n const rootRoutesStats = await stat(rootRoutesDir);\n if (!rootRoutesStats.isDirectory()) {\n throw new Error(\n `Path exists but is not a directory: ${rootRoutesDir}`\n );\n }\n return rootRoutesDir;\n } catch {\n throw new Error(\n 'Could not find SvelteKit routes directory. Expected either \"src/routes\" or \"routes\" to exist.'\n );\n }\n }\n }\n}\n"]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEvC,+DAA+D;AAC/D,6DAA6D;AAC7D,uDAAuD;AACvD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AAEtB,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;IAC5B,wDAAwD;IACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;QAC7B;YACE,IAAI,EAAE,4EAA4E;YAClF,MAAM,EAAE;gBACN,WAAW,EAAE,KAAK;gBAClB,oBAAoB,EAAE;oBACpB;wBACE,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,kBAAkB;wBACzB,QAAQ,EAAE,SAAS;wBACnB,iBAAiB,EAAE,CAAC;wBACpB,mBAAmB,EAAE,CAAC;qBACvB;iBACF;aACF;SACF;QACD;YACE,IAAI,EAAE,4EAA4E;YAClF,MAAM,EAAE;gBACN,WAAW,EAAE,KAAK;gBAClB,oBAAoB,EAAE;oBACpB;wBACE,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,cAAc;wBACrB,QAAQ,EAAE,SAAS;wBACnB,iBAAiB,EAAE,CAAC;wBACpB,mBAAmB,EAAE,CAAC;qBACvB;iBACF;aACF;SACF;KACF,EAAE,CAAC;QACF,4DAA4D;QAC5D,+BAA+B;QAC/B,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,EAAE,CAAC,QAAQ,CACT,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EACzC,kBAAkB,EAClB,IAAI,CACL,EACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CACpC,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACjE,EAAE,CAAC,aAAa,CACd,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC;YACb,GAAG,cAAc;YACjB,GAAG,MAAM;SACV,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC","sourcesContent":["import path from 'node:path';\nimport fs from 'fs-extra';\n\nimport { SvelteKitBuilder } from './builder.js';\n\nconst builder = new SvelteKitBuilder();\n\n// This needs to be in the top-level as we need to create these\n// entries before svelte plugin is started or the entries are\n// a race to be created before svelte discovers entries\nawait builder.build();\n\nprocess.on('beforeExit', () => {\n // Don't patch functions output if not in Vercel adapter\n if (!process.env.VERCEL_DEPLOYMENT_ID) {\n return;\n }\n for (const { file, config } of [\n {\n file: '.vercel/output/functions/.well-known/workflow/v1/flow.func/.vc-config.json',\n config: {\n maxDuration: 'max',\n experimentalTriggers: [\n {\n type: 'queue/v2beta',\n topic: '__wkf_workflow_*',\n consumer: 'default',\n retryAfterSeconds: 5,\n initialDelaySeconds: 0,\n },\n ],\n },\n },\n {\n file: '.vercel/output/functions/.well-known/workflow/v1/step.func/.vc-config.json',\n config: {\n maxDuration: 'max',\n experimentalTriggers: [\n {\n type: 'queue/v2beta',\n topic: '__wkf_step_*',\n consumer: 'default',\n retryAfterSeconds: 5,\n initialDelaySeconds: 0,\n },\n ],\n },\n },\n ]) {\n // Un-symlink these as they can't be shared due to different\n // experimental triggers config\n const toCopy = fs.readdirSync(path.dirname(file));\n fs.removeSync(path.dirname(file));\n fs.mkdirSync(path.dirname(file), { recursive: true });\n\n for (const item of toCopy) {\n fs.copySync(\n path.join(\n path.dirname(file).replace(/\\.func$/, ''),\n '__data.json.func',\n item\n ),\n path.join(path.dirname(file), item)\n );\n }\n\n // Update .vc-config.json with the new experimental triggers config\n const existingConfig = JSON.parse(fs.readFileSync(file, 'utf8'));\n fs.writeFileSync(\n file,\n JSON.stringify({\n ...existingConfig,\n ...config,\n })\n );\n }\n});\n\nexport { workflowPlugin } from './plugin.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,OAAO;QACL,uBAAuB,EAAY;QACnC;YACE,IAAI,EAAE,oBAAoB;SAC3B;QACD,uBAAuB,CAAC;YACtB,OAAO;YACP,OAAO;SACR,CAAC;KACH,CAAC;AACJ,CAAC","sourcesContent":["import { createBuildQueue } from '@workflow/builders';\nimport { workflowTransformPlugin } from '@workflow/rollup';\nimport { workflowHotUpdatePlugin } from '@workflow/vite';\nimport type { Plugin } from 'vite';\nimport { SvelteKitBuilder } from './builder.js';\n\nexport function workflowPlugin(): Plugin[] {\n const builder = new SvelteKitBuilder();\n const enqueue = createBuildQueue();\n\n return [\n workflowTransformPlugin() as Plugin,\n {\n name: 'workflow:sveltekit',\n },\n workflowHotUpdatePlugin({\n builder,\n enqueue,\n }),\n ];\n}\n"]}