@workflow/next 5.0.0-beta.2 → 5.0.0-beta.20
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-deferred.d.ts.map +1 -1
- package/dist/builder-deferred.js +416 -501
- package/dist/builder-eager.d.ts.map +1 -1
- package/dist/builder-eager.js +60 -76
- package/dist/builder.d.ts +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +4 -4
- package/dist/environment-flag.d.ts +2 -0
- package/dist/environment-flag.d.ts.map +1 -0
- package/dist/environment-flag.js +15 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +267 -10
- package/dist/loader.d.ts +6 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +59 -60
- package/dist/runtime.js +1 -1
- package/dist/socket-server.d.ts +20 -0
- package/dist/socket-server.d.ts.map +1 -1
- package/dist/socket-server.js +29 -2
- package/docs/api-reference/with-workflow.mdx +34 -2
- package/docs/next.mdx +5 -3
- package/package.json +4 -5
- package/dist/builder-deferred.js.map +0 -1
- package/dist/builder-eager.js.map +0 -1
- package/dist/builder.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/loader.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/socket-server.js.map +0 -1
- package/dist/step-copy-utils.d.ts +0 -19
- package/dist/step-copy-utils.d.ts.map +0 -1
- package/dist/step-copy-utils.js +0 -101
- package/dist/step-copy-utils.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder-eager.d.ts","sourceRoot":"","sources":["../src/builder-eager.ts"],"names":[],"mappings":"AAYA,wBAAsB,mBAAmB,iBAugBxC"}
|
package/dist/builder-eager.js
CHANGED
|
@@ -8,6 +8,7 @@ const node_fs_1 = require("node:fs");
|
|
|
8
8
|
const promises_1 = require("node:fs/promises");
|
|
9
9
|
const node_path_1 = require("node:path");
|
|
10
10
|
const watchpack_1 = __importDefault(require("watchpack"));
|
|
11
|
+
const socket_server_js_1 = require("./socket-server.js");
|
|
11
12
|
let CachedNextBuilderEager;
|
|
12
13
|
// Create the eager Next builder dynamically by extending the ESM BaseBuilder.
|
|
13
14
|
// Exported as getNextBuilderEager() to allow CommonJS modules to import from
|
|
@@ -16,16 +17,19 @@ async function getNextBuilderEager() {
|
|
|
16
17
|
if (CachedNextBuilderEager) {
|
|
17
18
|
return CachedNextBuilderEager;
|
|
18
19
|
}
|
|
19
|
-
const { BaseBuilder: BaseBuilderClass,
|
|
20
|
+
const { BaseBuilder: BaseBuilderClass, WORKFLOW_QUEUE_TRIGGER,
|
|
20
21
|
// biome-ignore lint/security/noGlobalEval: Need to use eval here to avoid TypeScript from transpiling the import statement into `require()`
|
|
21
22
|
} = (await eval('import("@workflow/builders")'));
|
|
22
23
|
class NextBuilder extends BaseBuilderClass {
|
|
23
24
|
async build() {
|
|
25
|
+
// Eager mode never starts a discovery socket server, so any leftover
|
|
26
|
+
// workflow-socket.json is from a previous deferred-mode build and
|
|
27
|
+
// would make the webpack loader connect to a dead port.
|
|
28
|
+
await (0, socket_server_js_1.cleanupStaleSocketInfoFiles)((0, node_path_1.join)(this.config.workingDir, this.config.distDir || '.next'));
|
|
24
29
|
const outputDir = await this.findAppDirectory();
|
|
25
30
|
const workflowGeneratedDir = (0, node_path_1.join)(outputDir, '.well-known/workflow/v1');
|
|
26
31
|
// Ensure output directories exist
|
|
27
32
|
await (0, promises_1.mkdir)(workflowGeneratedDir, { recursive: true });
|
|
28
|
-
// ignore the generated assets
|
|
29
33
|
await (0, promises_1.writeFile)((0, node_path_1.join)(workflowGeneratedDir, '.gitignore'), '*');
|
|
30
34
|
const inputFiles = await this.getInputFiles();
|
|
31
35
|
const tsconfigPath = await this.findTsConfigPath();
|
|
@@ -34,49 +38,45 @@ async function getNextBuilderEager() {
|
|
|
34
38
|
workflowGeneratedDir,
|
|
35
39
|
tsconfigPath,
|
|
36
40
|
};
|
|
37
|
-
|
|
38
|
-
const
|
|
41
|
+
// V2: Build combined route (replaces separate step + flow routes)
|
|
42
|
+
const combinedResult = await this.buildCombinedFunction(options);
|
|
39
43
|
await this.buildWebhookRoute({ workflowGeneratedDir });
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
...
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
const writeManifest = async (sourceManifest) => {
|
|
45
|
+
const manifest = {
|
|
46
|
+
steps: { ...sourceManifest?.steps },
|
|
47
|
+
workflows: { ...sourceManifest?.workflows },
|
|
48
|
+
classes: { ...sourceManifest?.classes },
|
|
49
|
+
};
|
|
50
|
+
// Write manifest
|
|
51
|
+
const workflowBundlePath = (0, node_path_1.join)(workflowGeneratedDir, 'flow/route.js');
|
|
52
|
+
const manifestJson = await this.createManifest({
|
|
53
|
+
workflowBundlePath,
|
|
54
|
+
manifestDir: workflowGeneratedDir,
|
|
55
|
+
manifest,
|
|
56
|
+
});
|
|
57
|
+
// Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.
|
|
58
|
+
if (this.shouldExposePublicManifest && manifestJson) {
|
|
59
|
+
const publicManifestDir = (0, node_path_1.join)(this.config.workingDir, 'public/.well-known/workflow/v1');
|
|
60
|
+
await (0, promises_1.mkdir)(publicManifestDir, { recursive: true });
|
|
61
|
+
if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {
|
|
62
|
+
await (0, promises_1.writeFile)((0, node_path_1.join)(publicManifestDir, '.gitignore'), '*');
|
|
63
|
+
}
|
|
64
|
+
await (0, promises_1.copyFile)((0, node_path_1.join)(workflowGeneratedDir, 'manifest.json'), (0, node_path_1.join)(publicManifestDir, 'manifest.json'));
|
|
65
|
+
}
|
|
51
66
|
};
|
|
52
|
-
|
|
53
|
-
const workflowBundlePath = (0, node_path_1.join)(workflowGeneratedDir, 'flow/route.js');
|
|
54
|
-
const manifestJson = await this.createManifest({
|
|
55
|
-
workflowBundlePath,
|
|
56
|
-
manifestDir: workflowGeneratedDir,
|
|
57
|
-
manifest,
|
|
58
|
-
});
|
|
59
|
-
// Expose manifest as a static file when WORKFLOW_PUBLIC_MANIFEST=1.
|
|
60
|
-
// Next.js serves files from public/ at the root URL.
|
|
61
|
-
if (this.shouldExposePublicManifest && manifestJson) {
|
|
62
|
-
const publicManifestDir = (0, node_path_1.join)(this.config.workingDir, 'public/.well-known/workflow/v1');
|
|
63
|
-
await (0, promises_1.mkdir)(publicManifestDir, { recursive: true });
|
|
64
|
-
await (0, promises_1.copyFile)((0, node_path_1.join)(workflowGeneratedDir, 'manifest.json'), (0, node_path_1.join)(publicManifestDir, 'manifest.json'));
|
|
65
|
-
}
|
|
67
|
+
await writeManifest(combinedResult?.manifest);
|
|
66
68
|
await this.writeFunctionsConfig(outputDir);
|
|
67
69
|
if (this.config.watch) {
|
|
68
|
-
|
|
70
|
+
// TODO: implement watch mode for combined bundle
|
|
71
|
+
// For now, fall back to full rebuild on file changes
|
|
72
|
+
let stepsCtx = combinedResult?.stepsContext;
|
|
73
|
+
if (!stepsCtx) {
|
|
69
74
|
throw new Error('Invariant: expected steps build context in watch mode');
|
|
70
75
|
}
|
|
71
|
-
|
|
72
|
-
!workflowsBundle?.bundleFinal) {
|
|
73
|
-
throw new Error('Invariant: expected workflows bundle in watch mode');
|
|
74
|
-
}
|
|
75
|
-
let stepsCtx = stepsBuildContext;
|
|
76
|
-
// These are safe to assert as non-null because we checked above
|
|
76
|
+
// Use stepsCtx for the watch rebuild (workflow interim ctx from combined)
|
|
77
77
|
let workflowsCtx = {
|
|
78
|
-
interimBundleCtx:
|
|
79
|
-
bundleFinal:
|
|
78
|
+
interimBundleCtx: combinedResult?.interimBundleCtx,
|
|
79
|
+
bundleFinal: combinedResult?.bundleFinal,
|
|
80
80
|
};
|
|
81
81
|
const normalizePath = (pathname) => pathname.replace(/\\/g, '/');
|
|
82
82
|
const knownFiles = new Set();
|
|
@@ -152,21 +152,20 @@ async function getNextBuilderEager() {
|
|
|
152
152
|
const newInputFiles = await this.getInputFiles();
|
|
153
153
|
options.inputFiles = newInputFiles;
|
|
154
154
|
await stepsCtx.dispose();
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
await workflowsCtx.interimBundleCtx.dispose();
|
|
156
|
+
const newCombined = await this.buildCombinedFunction(options);
|
|
157
|
+
if (!newCombined?.stepsContext) {
|
|
157
158
|
throw new Error('Invariant: expected steps build context after rebuild');
|
|
158
159
|
}
|
|
159
|
-
stepsCtx =
|
|
160
|
-
|
|
161
|
-
const newWorkflowsCtx = await this.buildWorkflowsFunction(options);
|
|
162
|
-
if (!newWorkflowsCtx?.interimBundleCtx ||
|
|
163
|
-
!newWorkflowsCtx?.bundleFinal) {
|
|
160
|
+
stepsCtx = newCombined.stepsContext;
|
|
161
|
+
if (!newCombined?.interimBundleCtx || !newCombined?.bundleFinal) {
|
|
164
162
|
throw new Error('Invariant: expected workflows bundle context after rebuild');
|
|
165
163
|
}
|
|
166
164
|
workflowsCtx = {
|
|
167
|
-
interimBundleCtx:
|
|
168
|
-
bundleFinal:
|
|
165
|
+
interimBundleCtx: newCombined.interimBundleCtx,
|
|
166
|
+
bundleFinal: newCombined.bundleFinal,
|
|
169
167
|
};
|
|
168
|
+
await writeManifest(newCombined.manifest);
|
|
170
169
|
};
|
|
171
170
|
const logBuildMessages = (result, label) => {
|
|
172
171
|
const logByType = (messages, method) => {
|
|
@@ -292,46 +291,31 @@ async function getNextBuilderEager() {
|
|
|
292
291
|
if (process.env.NODE_ENV === 'development') {
|
|
293
292
|
return;
|
|
294
293
|
}
|
|
294
|
+
// V2 combined config: single trigger handles both workflow and step execution.
|
|
295
|
+
// The step route no longer needs its own trigger since steps are executed
|
|
296
|
+
// inline by the combined handler or queued back to __wkf_workflow_* with stepId.
|
|
295
297
|
const generatedConfig = {
|
|
296
298
|
version: '0',
|
|
297
|
-
steps: {
|
|
298
|
-
maxDuration: 'max',
|
|
299
|
-
experimentalTriggers: [STEP_QUEUE_TRIGGER],
|
|
300
|
-
},
|
|
301
299
|
workflows: {
|
|
302
300
|
maxDuration: 'max',
|
|
303
301
|
experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],
|
|
304
302
|
},
|
|
305
303
|
};
|
|
306
|
-
// We write this file to the generated directory for
|
|
307
|
-
// the Next.js builder to consume
|
|
308
304
|
await (0, promises_1.writeFile)((0, node_path_1.join)(outputDir, '.well-known/workflow/v1/config.json'), JSON.stringify(generatedConfig, null, 2));
|
|
309
305
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
// which turbopack/webpack fail to analyze. If we externalize
|
|
318
|
-
// correctly this shouldn't be an issue although we might want
|
|
319
|
-
// to use cjs as alternative to avoid
|
|
306
|
+
/**
|
|
307
|
+
* V2: Build combined route that handles both workflow and step execution.
|
|
308
|
+
*/
|
|
309
|
+
async buildCombinedFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
|
|
310
|
+
const flowRouteDir = (0, node_path_1.join)(workflowGeneratedDir, 'flow');
|
|
311
|
+
await (0, promises_1.mkdir)(flowRouteDir, { recursive: true });
|
|
312
|
+
return await this.createCombinedBundle({
|
|
320
313
|
format: 'esm',
|
|
321
314
|
inputFiles,
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
tsconfigPath,
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
|
|
328
|
-
const workflowsRouteDir = (0, node_path_1.join)(workflowGeneratedDir, 'flow');
|
|
329
|
-
await (0, promises_1.mkdir)(workflowsRouteDir, { recursive: true });
|
|
330
|
-
return await this.createWorkflowsBundle({
|
|
331
|
-
format: 'esm',
|
|
332
|
-
outfile: (0, node_path_1.join)(workflowsRouteDir, 'route.js'),
|
|
315
|
+
stepsOutfile: (0, node_path_1.join)(flowRouteDir, '__step_registrations.js'),
|
|
316
|
+
flowOutfile: (0, node_path_1.join)(flowRouteDir, 'route.js'),
|
|
333
317
|
bundleFinalOutput: false,
|
|
334
|
-
|
|
318
|
+
externalizeNonSteps: true,
|
|
335
319
|
tsconfigPath,
|
|
336
320
|
});
|
|
337
321
|
}
|
|
@@ -389,4 +373,4 @@ async function getNextBuilderEager() {
|
|
|
389
373
|
CachedNextBuilderEager = NextBuilder;
|
|
390
374
|
return NextBuilder;
|
|
391
375
|
}
|
|
392
|
-
//# sourceMappingURL=builder-eager.js.map
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1lYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLWVhZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBWUEsa0RBdWdCQztBQW5oQkQscUNBQW9DO0FBQ3BDLCtDQUE0RTtBQUM1RSx5Q0FBbUQ7QUFFbkQsMERBQWtDO0FBQ2xDLHlEQUFpRTtBQUVqRSxJQUFJLHNCQUEyQixDQUFDO0FBRWhDLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQzdELEtBQUssVUFBVSxtQkFBbUI7SUFDdkMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1FBQzNCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sRUFDSixXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLHNCQUFzQjtJQUN0Qiw0SUFBNEk7TUFDN0ksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUNiLDhCQUE4QixDQUMvQixDQUF3QyxDQUFDO0lBRTFDLE1BQU0sV0FBWSxTQUFRLGdCQUFnQjtRQUN4QyxLQUFLLENBQUMsS0FBSztZQUNULHFFQUFxRTtZQUNyRSxrRUFBa0U7WUFDbEUsd0RBQXdEO1lBQ3hELE1BQU0sSUFBQSw4Q0FBMkIsRUFDL0IsSUFBQSxnQkFBSSxFQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUNyQixJQUFJLENBQUMsTUFBK0IsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUN6RCxDQUNGLENBQUM7WUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sb0JBQW9CLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRXhFLGtDQUFrQztZQUNsQyxNQUFNLElBQUEsZ0JBQUssRUFBQyxvQkFBb0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sSUFBQSxvQkFB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QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsa0ZBQWtGO1lBQ2xGLElBQUksTUFBTSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsK0NBQStDO2dCQUMvQyxNQUFNLElBQUEsZ0JBQUssRUFBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekMsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELElBQUksTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsdURBQXVEO2dCQUN2RCxNQUFNLElBQUEsZ0JBQUssRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IscUhBQXFILENBQ3RILENBQUM7UUFDSixDQUFDO0tBQ0Y7SUFFRCxzQkFBc0IsR0FBRyxXQUFXLENBQUM7SUFDckMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjb3B5RmlsZSwgbWtkaXIsIHN0YXQsIHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZXh0bmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWFuaWZlc3QgfSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IFdhdGNocGFjayBmcm9tICd3YXRjaHBhY2snO1xuaW1wb3J0IHsgY2xlYW51cFN0YWxlU29ja2V0SW5mb0ZpbGVzIH0gZnJvbSAnLi9zb2NrZXQtc2VydmVyLmpzJztcblxubGV0IENhY2hlZE5leHRCdWlsZGVyRWFnZXI6IGFueTtcblxuLy8gQ3JlYXRlIHRoZSBlYWdlciBOZXh0IGJ1aWxkZXIgZHluYW1pY2FsbHkgYnkgZXh0ZW5kaW5nIHRoZSBFU00gQmFzZUJ1aWxkZXIuXG4vLyBFeHBvcnRlZCBhcyBnZXROZXh0QnVpbGRlckVhZ2VyKCkgdG8gYWxsb3cgQ29tbW9uSlMgbW9kdWxlcyB0byBpbXBvcnQgZnJvbVxuLy8gdGhlIEVTTSBAd29ya2Zsb3cvYnVpbGRlcnMgcGFja2FnZSB2aWEgZHluYW1pYyBpbXBvcnQgYXQgcnVudGltZS5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROZXh0QnVpbGRlckVhZ2VyKCkge1xuICBpZiAoQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlcikge1xuICAgIHJldHVybiBDYWNoZWROZXh0QnVpbGRlckVhZ2VyO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIEJhc2VCdWlsZGVyOiBCYXNlQnVpbGRlckNsYXNzLFxuICAgIFdPUktGTE9XX1FVRVVFX1RSSUdHRVIsXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOiBOZWVkIHRvIHVzZSBldmFsIGhlcmUgdG8gYXZvaWQgVHlwZVNjcmlwdCBmcm9tIHRyYW5zcGlsaW5nIHRoZSBpbXBvcnQgc3RhdGVtZW50IGludG8gYHJlcXVpcmUoKWBcbiAgfSA9IChhd2FpdCBldmFsKFxuICAgICdpbXBvcnQoXCJAd29ya2Zsb3cvYnVpbGRlcnNcIiknXG4gICkpIGFzIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuXG4gIGNsYXNzIE5leHRCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXJDbGFzcyB7XG4gICAgYXN5bmMgYnVpbGQoKSB7XG4gICAgICAvLyBFYWdlciBtb2RlIG5ldmVyIHN0YXJ0cyBhIGRpc2NvdmVyeSBzb2NrZXQgc2VydmVyLCBzbyBhbnkgbGVmdG92ZXJcbiAgICAgIC8vIHdvcmtmbG93LXNvY2tldC5qc29uIGlzIGZyb20gYSBwcmV2aW91cyBkZWZlcnJlZC1tb2RlIGJ1aWxkIGFuZFxuICAgICAgLy8gd291bGQgbWFrZSB0aGUgd2VicGFjayBsb2FkZXIgY29ubmVjdCB0byBhIGRlYWQgcG9ydC5cbiAgICAgIGF3YWl0IGNsZWFudXBTdGFsZVNvY2tldEluZm9GaWxlcyhcbiAgICAgICAgam9pbihcbiAgICAgICAgICB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgICh0aGlzLmNvbmZpZyBhcyB7IGRpc3REaXI/OiBzdHJpbmcgfSkuZGlzdERpciB8fCAnLm5leHQnXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IG91dHB1dERpciA9IGF3YWl0IHRoaXMuZmluZEFwcERpcmVjdG9yeSgpO1xuICAgICAgY29uc3Qgd29ya2Zsb3dHZW5lcmF0ZWREaXIgPSBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxJyk7XG5cbiAgICAgIC8vIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3RcbiAgICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuXG4gICAgICBjb25zdCBpbnB1dEZpbGVzID0gYXdhaXQgdGhpcy5nZXRJbnB1dEZpbGVzKCk7XG4gICAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaW5wdXRGaWxlcyxcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFYyOiBCdWlsZCBjb21iaW5lZCByb3V0ZSAocmVwbGFjZXMgc2VwYXJhdGUgc3RlcCArIGZsb3cgcm91dGVzKVxuICAgICAgY29uc3QgY29tYmluZWRSZXN1bHQgPSBhd2FpdCB0aGlzLmJ1aWxkQ29tYmluZWRGdW5jdGlvbihvcHRpb25zKTtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRXZWJob29rUm91dGUoeyB3b3JrZmxvd0dlbmVyYXRlZERpciB9KTtcblxuICAgICAgY29uc3Qgd3JpdGVNYW5pZmVzdCA9IGFzeW5jIChcbiAgICAgICAgc291cmNlTWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3QgfCB1bmRlZmluZWRcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdCA9IHtcbiAgICAgICAgICBzdGVwczogeyAuLi5zb3VyY2VNYW5pZmVzdD8uc3RlcHMgfSxcbiAgICAgICAgICB3b3JrZmxvd3M6IHsgLi4uc291cmNlTWFuaWZlc3Q/LndvcmtmbG93cyB9LFxuICAgICAgICAgIGNsYXNzZXM6IHsgLi4uc291cmNlTWFuaWZlc3Q/LmNsYXNzZXMgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcml0ZSBtYW5pZmVzdFxuICAgICAgICBjb25zdCB3b3JrZmxvd0J1bmRsZVBhdGggPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy9yb3V0ZS5qcycpO1xuICAgICAgICBjb25zdCBtYW5pZmVzdEpzb24gPSBhd2FpdCB0aGlzLmNyZWF0ZU1hbmlmZXN0KHtcbiAgICAgICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICAgICAgbWFuaWZlc3REaXI6IHdvcmtmbG93R2VuZXJhdGVkRGlyLFxuICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBFeHBvc2UgbWFuaWZlc3QgYXMgYSBzdGF0aWMgZmlsZSB3aGVuIFdPUktGTE9XX1BVQkxJQ19NQU5JRkVTVD0xLlxuICAgICAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgICAgICBjb25zdCBwdWJsaWNNYW5pZmVzdERpciA9IGpvaW4oXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy53b3JraW5nRGlyLFxuICAgICAgICAgICAgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MSdcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IG1rZGlyKHB1YmxpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuVkVSQ0VMX0RFUExPWU1FTlRfSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKGpvaW4ocHVibGljTWFuaWZlc3REaXIsICcuZ2l0aWdub3JlJyksICcqJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGNvcHlGaWxlKFxuICAgICAgICAgICAgam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ21hbmlmZXN0Lmpzb24nKSxcbiAgICAgICAgICAgIGpvaW4ocHVibGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3cml0ZU1hbmlmZXN0KGNvbWJpbmVkUmVzdWx0Py5tYW5pZmVzdCk7XG5cbiAgICAgIGF3YWl0IHRoaXMud3JpdGVGdW5jdGlvbnNDb25maWcob3V0cHV0RGlyKTtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLndhdGNoKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudCB3YXRjaCBtb2RlIGZvciBjb21iaW5lZCBidW5kbGVcbiAgICAgICAgLy8gRm9yIG5vdywgZmFsbCBiYWNrIHRvIGZ1bGwgcmVidWlsZCBvbiBmaWxlIGNoYW5nZXNcbiAgICAgICAgbGV0IHN0ZXBzQ3R4ID0gY29tYmluZWRSZXN1bHQ/LnN0ZXBzQ29udGV4dDtcbiAgICAgICAgaWYgKCFzdGVwc0N0eCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdJbnZhcmlhbnQ6IGV4cGVjdGVkIHN0ZXBzIGJ1aWxkIGNvbnRleHQgaW4gd2F0Y2ggbW9kZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHN0ZXBzQ3R4IGZvciB0aGUgd2F0Y2ggcmVidWlsZCAod29ya2Zsb3cgaW50ZXJpbSBjdHggZnJvbSBjb21iaW5lZClcbiAgICAgICAgbGV0IHdvcmtmbG93c0N0eCA9IHtcbiAgICAgICAgICBpbnRlcmltQnVuZGxlQ3R4OiBjb21iaW5lZFJlc3VsdD8uaW50ZXJpbUJ1bmRsZUN0eCEsXG4gICAgICAgICAgYnVuZGxlRmluYWw6IGNvbWJpbmVkUmVzdWx0Py5idW5kbGVGaW5hbCEsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplUGF0aCA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICAgIHBhdGhuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgY29uc3Qga25vd25GaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICB0eXBlIFdhdGNocGFja1RpbWVJbmZvRW50cnkgPSB7XG4gICAgICAgICAgc2FmZVRpbWU6IG51bWJlcjtcbiAgICAgICAgICB0aW1lc3RhbXA/OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBwcmV2aW91c1RpbWVJbmZvID0gbmV3IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+KCk7XG5cbiAgICAgICAgY29uc3Qgd2F0Y2hhYmxlRXh0ZW5zaW9ucyA9IG5ldyBTZXQoW1xuICAgICAgICAgICcuanMnLFxuICAgICAgICAgICcuanN4JyxcbiAgICAgICAgICAnLnRzJyxcbiAgICAgICAgICAnLnRzeCcsXG4gICAgICAgICAgJy5tdHMnLFxuICAgICAgICAgICcuY3RzJyxcbiAgICAgICAgICAnLmNqcycsXG4gICAgICAgICAgJy5tanMnLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgaWdub3JlZFBhdGhGcmFnbWVudHMgPSBbXG4gICAgICAgICAgJy8uZ2l0LycsXG4gICAgICAgICAgJy9ub2RlX21vZHVsZXMvJyxcbiAgICAgICAgICAnLy5uZXh0LycsXG4gICAgICAgICAgJy8udHVyYm8vJyxcbiAgICAgICAgICAnLy52ZXJjZWwvJyxcbiAgICAgICAgICAnL2Rpc3QvJyxcbiAgICAgICAgICAnL2J1aWxkLycsXG4gICAgICAgICAgJy9vdXQvJyxcbiAgICAgICAgICAnLy5jYWNoZS8nLFxuICAgICAgICAgICcvLnlhcm4vJyxcbiAgICAgICAgICAnLy5wbnBtLXN0b3JlLycsXG4gICAgICAgICAgJy8ucGFyY2VsLWNhY2hlLycsXG4gICAgICAgICAgJy8ud2VsbC1rbm93bi93b3JrZmxvdy8nLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkR2VuZXJhdGVkRGlyID0gd29ya2Zsb3dHZW5lcmF0ZWREaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICBpZ25vcmVkUGF0aEZyYWdtZW50cy5wdXNoKG5vcm1hbGl6ZWRHZW5lcmF0ZWREaXIpO1xuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgbm9kZS5qcyBidWcgb24gTWFjT1Mgd2hpY2ggY2F1c2VzIGNsb3NpbmcgZmlsZSB3YXRjaGVycyB0byBiZSByZWFsbHkgc2xvdy5cbiAgICAgICAgLy8gVGhpcyBsaW1pdHMgdGhlIG51bWJlciBvZiB3YXRjaGVycyB0byBtaXRpZ2F0ZSB0aGUgaXNzdWUuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjk5NDlcbiAgICAgICAgcHJvY2Vzcy5lbnYuV0FUQ0hQQUNLX1dBVENIRVJfTElNSVQgPVxuICAgICAgICAgIHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gJzIwJyA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCB3YXRjaGVyID0gbmV3IFdhdGNocGFjayh7XG4gICAgICAgICAgLy8gV2F0Y2hwYWNrIGRlZmF1bHQgaXMgMjAwbXMgd2hpY2ggYWRkcyAyMDBtcyBvZiBkZWFkIHRpbWUgb24gYm9vdHVwLlxuICAgICAgICAgIGFnZ3JlZ2F0ZVRpbWVvdXQ6IDUsXG4gICAgICAgICAgaWdub3JlZDogKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aG5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uICYmICF3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZEdlbmVyYXRlZERpcikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGlnbm9yZWRQYXRoRnJhZ21lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUGF0aC5pbmNsdWRlcyhmcmFnbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlYWRUaW1lSW5mb0VudHJpZXMgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3RW50cmllcyA9IHdhdGNoZXIuZ2V0VGltZUluZm9FbnRyaWVzKCkgYXMgTWFwPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgV2F0Y2hwYWNrVGltZUluZm9FbnRyeVxuICAgICAgICAgID47XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT4oKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCBpbmZvXSBvZiByYXdFbnRyaWVzKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkRW50cmllcy5zZXQobm9ybWFsaXplUGF0aChwYXRoKSwgaW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBub3JtYWxpemVkRW50cmllcztcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgcmVidWlsZFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3QgZW5xdWV1ZSA9ICh0YXNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XG4gICAgICAgICAgcmVidWlsZFF1ZXVlID0gcmVidWlsZFF1ZXVlLnRoZW4odGFzaykuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcHJvY2VzcyBmaWxlIGNoYW5nZScsIGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVidWlsZFF1ZXVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZ1bGxSZWJ1aWxkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0lucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICAgICAgICBvcHRpb25zLmlucHV0RmlsZXMgPSBuZXdJbnB1dEZpbGVzO1xuXG4gICAgICAgICAgYXdhaXQgc3RlcHNDdHghLmRpc3Bvc2UoKTtcbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBuZXdDb21iaW5lZCA9IGF3YWl0IHRoaXMuYnVpbGRDb21iaW5lZEZ1bmN0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgIGlmICghbmV3Q29tYmluZWQ/LnN0ZXBzQ29udGV4dCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCBzdGVwcyBidWlsZCBjb250ZXh0IGFmdGVyIHJlYnVpbGQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGVwc0N0eCA9IG5ld0NvbWJpbmVkLnN0ZXBzQ29udGV4dDtcblxuICAgICAgICAgIGlmICghbmV3Q29tYmluZWQ/LmludGVyaW1CdW5kbGVDdHggfHwgIW5ld0NvbWJpbmVkPy5idW5kbGVGaW5hbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnSW52YXJpYW50OiBleHBlY3RlZCB3b3JrZmxvd3MgYnVuZGxlIGNvbnRleHQgYWZ0ZXIgcmVidWlsZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdvcmtmbG93c0N0eCA9IHtcbiAgICAgICAgICAgIGludGVyaW1CdW5kbGVDdHg6IG5ld0NvbWJpbmVkLmludGVyaW1CdW5kbGVDdHgsXG4gICAgICAgICAgICBidW5kbGVGaW5hbDogbmV3Q29tYmluZWQuYnVuZGxlRmluYWwsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IHdyaXRlTWFuaWZlc3QobmV3Q29tYmluZWQubWFuaWZlc3QpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGxvZ0J1aWxkTWVzc2FnZXMgPSAoXG4gICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICBlcnJvcnM/OiBpbXBvcnQoJ2VzYnVpbGQnKS5NZXNzYWdlW107XG4gICAgICAgICAgICB3YXJuaW5ncz86IGltcG9ydCgnZXNidWlsZCcpLk1lc3NhZ2VbXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhYmVsOiBzdHJpbmdcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nQnlUeXBlID0gKFxuICAgICAgICAgICAgbWVzc2FnZXM6IGltcG9ydCgnZXNidWlsZCcpLk1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG1ldGhvZDogJ2Vycm9yJyB8ICd3YXJuJ1xuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaWYgKCFtZXNzYWdlcyB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG1ldGhvZCA9PT0gJ2Vycm9yJyA/ICdlcnJvcnMnIDogJ3dhcm5pbmdzJztcbiAgICAgICAgICAgIGNvbnNvbGVbbWV0aG9kXShgJHtkZXNjcmlwdG9yfSB3aGlsZSByZWJ1aWxkaW5nICR7bGFiZWx9YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgY29uc29sZVttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBsb2dCeVR5cGUocmVzdWx0LmVycm9ycywgJ2Vycm9yJyk7XG4gICAgICAgICAgbG9nQnlUeXBlKHJlc3VsdC53YXJuaW5ncywgJ3dhcm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZWJ1aWxkRXhpc3RpbmdGaWxlcyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZWJ1aWx0U3RlcFN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBzdGVwc1Jlc3VsdCA9IGF3YWl0IHN0ZXBzQ3R4IS5yZWJ1aWxkKCk7XG4gICAgICAgICAgbG9nQnVpbGRNZXNzYWdlcyhzdGVwc1Jlc3VsdCwgJ3N0ZXBzIGJ1bmRsZScpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ1JlYnVpbHQgc3RlcHMgYnVuZGxlJyxcbiAgICAgICAgICAgIGAke0RhdGUubm93KCkgLSByZWJ1aWx0U3RlcFN0YXJ0fW1zYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCByZWJ1aWx0V29ya2Zsb3dTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgY29uc3Qgd29ya2Zsb3dSZXN1bHQgPSBhd2FpdCB3b3JrZmxvd3NDdHguaW50ZXJpbUJ1bmRsZUN0eC5yZWJ1aWxkKCk7XG4gICAgICAgICAgbG9nQnVpbGRNZXNzYWdlcyh3b3JrZmxvd1Jlc3VsdCwgJ3dvcmtmbG93cyBidW5kbGUnKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF3b3JrZmxvd1Jlc3VsdC5vdXRwdXRGaWxlcyB8fFxuICAgICAgICAgICAgd29ya2Zsb3dSZXN1bHQub3V0cHV0RmlsZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnTm8gb3V0cHV0IGdlbmVyYXRlZCB3aGlsZSByZWJ1aWxkaW5nIHdvcmtmbG93cyBidW5kbGUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB3b3JrZmxvd3NDdHguYnVuZGxlRmluYWwod29ya2Zsb3dSZXN1bHQub3V0cHV0RmlsZXNbMF0udGV4dCk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAnUmVidWlsdCB3b3JrZmxvdyBidW5kbGUnLFxuICAgICAgICAgICAgYCR7RGF0ZS5ub3coKSAtIHJlYnVpbHRXb3JrZmxvd1N0YXJ0fW1zYFxuICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaXNXYXRjaGFibGVGaWxlID0gKHBhdGg6IHN0cmluZykgPT5cbiAgICAgICAgICB3YXRjaGFibGVFeHRlbnNpb25zLmhhcyhleHRuYW1lKHBhdGgpKTtcblxuICAgICAgICBjb25zdCBnZXRDb21wYXJhYmxlVGltZXN0YW1wID0gKGVudHJ5OiBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5KSA9PlxuICAgICAgICAgIGVudHJ5LnRpbWVzdGFtcCA/PyBlbnRyeS5zYWZlVGltZTtcblxuICAgICAgICBjb25zdCBmaW5kUmVtb3ZlZEZpbGVzID0gKFxuICAgICAgICAgIGN1cnJlbnRFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PixcbiAgICAgICAgICBwcmV2aW91c0VudHJpZXM6IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHByZXZpb3VzRW50cmllcy5rZXlzKCkpIHtcbiAgICAgICAgICAgIGlmICghY3VycmVudEVudHJpZXMuaGFzKHBhdGgpICYmIGlzV2F0Y2hhYmxlRmlsZShwYXRoKSkge1xuICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZW1vdmVkO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGZpbmRBZGRlZEFuZE1vZGlmaWVkRmlsZXMgPSAoXG4gICAgICAgICAgY3VycmVudEVudHJpZXM6IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+LFxuICAgICAgICAgIHByZXZpb3VzRW50cmllczogTWFwPHN0cmluZywgV2F0Y2hwYWNrVGltZUluZm9FbnRyeT5cbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgbW9kaWZpZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCBpbmZvXSBvZiBjdXJyZW50RW50cmllcykge1xuICAgICAgICAgICAgaWYgKCFpc1dhdGNoYWJsZUZpbGUocGF0aCkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzID0gcHJldmlvdXNFbnRyaWVzLmdldChwYXRoKTtcbiAgICAgICAgICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgYWRkZWQucHVzaChwYXRoKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZ2V0Q29tcGFyYWJsZVRpbWVzdGFtcChpbmZvKSAhPT0gZ2V0Q29tcGFyYWJsZVRpbWVzdGFtcChwcmV2aW91cylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBtb2RpZmllZC5wdXNoKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7IGFkZGVkLCBtb2RpZmllZCB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRldGVybWluZUZpbGVDaGFuZ2VzID0gKFxuICAgICAgICAgIGN1cnJlbnRFbnRyaWVzOiBNYXA8c3RyaW5nLCBXYXRjaHBhY2tUaW1lSW5mb0VudHJ5PixcbiAgICAgICAgICBwcmV2aW91c0VudHJpZXM6IE1hcDxzdHJpbmcsIFdhdGNocGFja1RpbWVJbmZvRW50cnk+XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlbW92ZWRGaWxlcyA9IGZpbmRSZW1vdmVkRmlsZXMoXG4gICAgICAgICAgICBjdXJyZW50RW50cmllcyxcbiAgICAgICAgICAgIHByZXZpb3VzRW50cmllc1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCwgbW9kaWZpZWQgfSA9IGZpbmRBZGRlZEFuZE1vZGlmaWVkRmlsZXMoXG4gICAgICAgICAgICBjdXJyZW50RW50cmllcyxcbiAgICAgICAgICAgIHByZXZpb3VzRW50cmllc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkZWRGaWxlczogYWRkZWQsXG4gICAgICAgICAgICBtb2RpZmllZEZpbGVzOiBtb2RpZmllZCxcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBpc0luaXRpYWwgPSB0cnVlO1xuXG4gICAgICAgIHdhdGNoZXIub24oJ2FnZ3JlZ2F0ZWQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEVudHJpZXMgPSByZWFkVGltZUluZm9FbnRyaWVzKCk7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZEZpbGVzLCBtb2RpZmllZEZpbGVzLCByZW1vdmVkRmlsZXMgfSA9XG4gICAgICAgICAgICBkZXRlcm1pbmVGaWxlQ2hhbmdlcyhjdXJyZW50RW50cmllcywgcHJldmlvdXNUaW1lSW5mbyk7XG5cbiAgICAgICAgICBwcmV2aW91c1RpbWVJbmZvID0gY3VycmVudEVudHJpZXM7XG5cbiAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7XG4gICAgICAgICAgICBpc0luaXRpYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhZGRlZEZpbGVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgbW9kaWZpZWRGaWxlcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHJlbW92ZWRGaWxlcy5sZW5ndGggPT09IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlbW92YWwgb2YgcmVtb3ZlZEZpbGVzKSB7XG4gICAgICAgICAgICBrbm93bkZpbGVzLmRlbGV0ZShyZW1vdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBhZGRlZCBvZiBhZGRlZEZpbGVzKSB7XG4gICAgICAgICAgICBrbm93bkZpbGVzLmFkZChhZGRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW5xdWV1ZShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWRkZWRGaWxlcy5sZW5ndGggPiAwIHx8IHJlbW92ZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGZ1bGxSZWJ1aWxkKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGlmaWVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBhd2FpdCByZWJ1aWxkRXhpc3RpbmdGaWxlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB3YXRjaGVyLndhdGNoKHtcbiAgICAgICAgICBkaXJlY3RvcmllczogW3RoaXMuY29uZmlnLndvcmtpbmdEaXJdLFxuICAgICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldElucHV0RmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgY29uc3QgaW5wdXRGaWxlcyA9IGF3YWl0IHN1cGVyLmdldElucHV0RmlsZXMoKTtcbiAgICAgIHJldHVybiBpbnB1dEZpbGVzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAvLyBNYXRjaCBBcHAgUm91dGVyIGVudHJ5cG9pbnRzOiByb3V0ZS50cywgcGFnZS50cywgbGF5b3V0LnRzIGluIGFwcC8gb3Igc3JjL2FwcC8gZGlyZWN0b3JpZXNcbiAgICAgICAgLy8gTWF0Y2hlczogL2FwcC9wYWdlLnRzLCAvYXBwL2Rhc2hib2FyZC9wYWdlLnRzLCAvc3JjL2FwcC9yb3V0ZS50cywgZXRjLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgaXRlbS5tYXRjaChcbiAgICAgICAgICAgIC8oXnwuKlsvXFxcXF0pKGFwcHxzcmNbL1xcXFxdYXBwKShbL1xcXFxdKHJvdXRlfHBhZ2V8bGF5b3V0KVxcLnxbL1xcXFxdLipbL1xcXFxdKHJvdXRlfHBhZ2V8bGF5b3V0KVxcLikvXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYXRjaCBQYWdlcyBSb3V0ZXIgZW50cnlwb2ludHM6IGZpbGVzIGluIHBhZ2VzLyBvciBzcmMvcGFnZXMvXG4gICAgICAgIGlmIChpdGVtLm1hdGNoKC9bL1xcXFxdKHBhZ2VzfHNyY1svXFxcXF1wYWdlcylbL1xcXFxdLykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHdyaXRlRnVuY3Rpb25zQ29uZmlnKG91dHB1dERpcjogc3RyaW5nKSB7XG4gICAgICAvLyB3ZSBkb24ndCBydW4gdGhpcyBpbiBkZXZlbG9wbWVudCBtb2RlIGFzIGl0J3Mgbm90IG5lZWRlZFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVjIgY29tYmluZWQgY29uZmlnOiBzaW5nbGUgdHJpZ2dlciBoYW5kbGVzIGJvdGggd29ya2Zsb3cgYW5kIHN0ZXAgZXhlY3V0aW9uLlxuICAgICAgLy8gVGhlIHN0ZXAgcm91dGUgbm8gbG9uZ2VyIG5lZWRzIGl0cyBvd24gdHJpZ2dlciBzaW5jZSBzdGVwcyBhcmUgZXhlY3V0ZWRcbiAgICAgIC8vIGlubGluZSBieSB0aGUgY29tYmluZWQgaGFuZGxlciBvciBxdWV1ZWQgYmFjayB0byBfX3drZl93b3JrZmxvd18qIHdpdGggc3RlcElkLlxuICAgICAgY29uc3QgZ2VuZXJhdGVkQ29uZmlnID0ge1xuICAgICAgICB2ZXJzaW9uOiAnMCcsXG4gICAgICAgIHdvcmtmbG93czoge1xuICAgICAgICAgIG1heER1cmF0aW9uOiAnbWF4JyxcbiAgICAgICAgICBleHBlcmltZW50YWxUcmlnZ2VyczogW1dPUktGTE9XX1FVRVVFX1RSSUdHRVJdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgd3JpdGVGaWxlKFxuICAgICAgICBqb2luKG91dHB1dERpciwgJy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2NvbmZpZy5qc29uJyksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGdlbmVyYXRlZENvbmZpZywgbnVsbCwgMilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVjI6IEJ1aWxkIGNvbWJpbmVkIHJvdXRlIHRoYXQgaGFuZGxlcyBib3RoIHdvcmtmbG93IGFuZCBzdGVwIGV4ZWN1dGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIGJ1aWxkQ29tYmluZWRGdW5jdGlvbih7XG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICB0c2NvbmZpZ1BhdGgsXG4gICAgfToge1xuICAgICAgaW5wdXRGaWxlczogc3RyaW5nW107XG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcjogc3RyaW5nO1xuICAgICAgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IGZsb3dSb3V0ZURpciA9IGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdmbG93Jyk7XG4gICAgICBhd2FpdCBta2RpcihmbG93Um91dGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVDb21iaW5lZEJ1bmRsZSh7XG4gICAgICAgIGZvcm1hdDogJ2VzbScsXG4gICAgICAgIGlucHV0RmlsZXMsXG4gICAgICAgIHN0ZXBzT3V0ZmlsZTogam9pbihmbG93Um91dGVEaXIsICdfX3N0ZXBfcmVnaXN0cmF0aW9ucy5qcycpLFxuICAgICAgICBmbG93T3V0ZmlsZTogam9pbihmbG93Um91dGVEaXIsICdyb3V0ZS5qcycpLFxuICAgICAgICBidW5kbGVGaW5hbE91dHB1dDogZmFsc2UsXG4gICAgICAgIGV4dGVybmFsaXplTm9uU3RlcHM6IHRydWUsXG4gICAgICAgIHRzY29uZmlnUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRXZWJob29rUm91dGUoe1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgfToge1xuICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCB3ZWJob29rUm91dGVGaWxlID0gam9pbihcbiAgICAgICAgd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICAgICd3ZWJob29rL1t0b2tlbl0vcm91dGUuanMnXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXZWJob29rQnVuZGxlKHtcbiAgICAgICAgb3V0ZmlsZTogd2ViaG9va1JvdXRlRmlsZSxcbiAgICAgICAgYnVuZGxlOiBmYWxzZSwgLy8gTmV4dC5qcyBkb2Vzbid0IG5lZWQgYnVuZGxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEFwcERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgY29uc3QgYXBwRGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnYXBwJyk7XG4gICAgICBjb25zdCBzcmNBcHBEaXIgPSByZXNvbHZlKHRoaXMuY29uZmlnLndvcmtpbmdEaXIsICdzcmMvYXBwJyk7XG4gICAgICBjb25zdCBwYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3BhZ2VzJyk7XG4gICAgICBjb25zdCBzcmNQYWdlc0RpciA9IHJlc29sdmUodGhpcy5jb25maWcud29ya2luZ0RpciwgJ3NyYy9wYWdlcycpO1xuXG4gICAgICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgYSBwYXRoIGV4aXN0cyBhbmQgaXMgYSBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gYXN5bmMgKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgICAgICAgIGlmICghc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIGV4aXN0cyBidXQgaXMgbm90IGEgZGlyZWN0b3J5OiAke3BhdGh9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhIGRpcmVjdG9yeScpKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIGFwcCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBpZiAoYXdhaXQgaXNEaXJlY3RvcnkoYXBwRGlyKSkge1xuICAgICAgICByZXR1cm4gYXBwRGlyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzcmMvYXBwIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShzcmNBcHBEaXIpKSB7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGFwcCBkaXJlY3RvcnkgZXhpc3RzLCBjaGVjayBmb3IgcGFnZXMgZGlyZWN0b3J5IGFuZCBjcmVhdGUgYXBwIG5leHQgdG8gaXRcbiAgICAgIGlmIChhd2FpdCBpc0RpcmVjdG9yeShwYWdlc0RpcikpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFwcCBkaXJlY3RvcnkgbmV4dCB0byBwYWdlcyBkaXJlY3RvcnlcbiAgICAgICAgYXdhaXQgbWtkaXIoYXBwRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIGFwcERpcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5KHNyY1BhZ2VzRGlyKSkge1xuICAgICAgICAvLyBDcmVhdGUgc3JjL2FwcCBkaXJlY3RvcnkgbmV4dCB0byBzcmMvcGFnZXMgZGlyZWN0b3J5XG4gICAgICAgIGF3YWl0IG1rZGlyKHNyY0FwcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBzcmNBcHBEaXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIE5leHQuanMgYXBwIG9yIHBhZ2VzIGRpcmVjdG9yeS4gRXhwZWN0ZWQgb25lIG9mOiBcImFwcFwiLCBcInNyYy9hcHBcIiwgXCJwYWdlc1wiLCBvciBcInNyYy9wYWdlc1wiIHRvIGV4aXN0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQ2FjaGVkTmV4dEJ1aWxkZXJFYWdlciA9IE5leHRCdWlsZGVyO1xuICByZXR1cm4gTmV4dEJ1aWxkZXI7XG59XG4iXX0=
|
package/dist/builder.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const DEFERRED_BUILDER_MIN_VERSION = "16.2.0-canary.48";
|
|
2
|
-
export declare const WORKFLOW_DEFERRED_ENTRIES: readonly ["/.well-known/workflow/v1/flow", "/.well-known/workflow/v1/
|
|
2
|
+
export declare const WORKFLOW_DEFERRED_ENTRIES: readonly ["/.well-known/workflow/v1/flow", "/.well-known/workflow/v1/webhook/[token]"];
|
|
3
3
|
export declare function shouldUseDeferredBuilder(nextVersion: string): boolean;
|
|
4
4
|
export declare function getNextBuilder(nextVersion: string): Promise<any>;
|
|
5
5
|
//# sourceMappingURL=builder.d.ts.map
|
package/dist/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAE/D,eAAO,MAAM,yBAAyB,wFAG5B,CAAC;AAIX,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAgBrE;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,gBAMvD"}
|
package/dist/builder.js
CHANGED
|
@@ -9,19 +9,19 @@ exports.getNextBuilder = getNextBuilder;
|
|
|
9
9
|
const semver_1 = __importDefault(require("semver"));
|
|
10
10
|
const builder_deferred_js_1 = require("./builder-deferred.js");
|
|
11
11
|
const builder_eager_js_1 = require("./builder-eager.js");
|
|
12
|
+
const environment_flag_js_1 = require("./environment-flag.js");
|
|
12
13
|
exports.DEFERRED_BUILDER_MIN_VERSION = '16.2.0-canary.48';
|
|
13
14
|
exports.WORKFLOW_DEFERRED_ENTRIES = [
|
|
14
15
|
'/.well-known/workflow/v1/flow',
|
|
15
|
-
'/.well-known/workflow/v1/step',
|
|
16
16
|
'/.well-known/workflow/v1/webhook/[token]',
|
|
17
17
|
];
|
|
18
18
|
let warnedAboutFlagAndVersion = false;
|
|
19
19
|
function shouldUseDeferredBuilder(nextVersion) {
|
|
20
|
-
const flagEnabled =
|
|
20
|
+
const flagEnabled = (0, environment_flag_js_1.parseEnvironmentFlag)(process.env.WORKFLOW_NEXT_LAZY_DISCOVERY) ?? false;
|
|
21
21
|
const versionCompatible = semver_1.default.gte(nextVersion, exports.DEFERRED_BUILDER_MIN_VERSION);
|
|
22
22
|
if (flagEnabled && !versionCompatible && !warnedAboutFlagAndVersion) {
|
|
23
23
|
warnedAboutFlagAndVersion = true;
|
|
24
|
-
console.warn(`
|
|
24
|
+
console.warn(`lazyDiscovery requires Next.js >= ${exports.DEFERRED_BUILDER_MIN_VERSION} (found ${nextVersion}); falling back to eager workflow discovery.`);
|
|
25
25
|
}
|
|
26
26
|
return flagEnabled && versionCompatible;
|
|
27
27
|
}
|
|
@@ -31,4 +31,4 @@ async function getNextBuilder(nextVersion) {
|
|
|
31
31
|
}
|
|
32
32
|
return (0, builder_eager_js_1.getNextBuilderEager)();
|
|
33
33
|
}
|
|
34
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWNBLDREQWdCQztBQUVELHdDQU1DO0FBdENELG9EQUE0QjtBQUM1QiwrREFBK0Q7QUFDL0QseURBQXlEO0FBQ3pELCtEQUE2RDtBQUVoRCxRQUFBLDRCQUE0QixHQUFHLGtCQUFrQixDQUFDO0FBRWxELFFBQUEseUJBQXlCLEdBQUc7SUFDdkMsK0JBQStCO0lBQy9CLDBDQUEwQztDQUNsQyxDQUFDO0FBRVgsSUFBSSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsU0FBZ0Isd0JBQXdCLENBQUMsV0FBbUI7SUFDMUQsTUFBTSxXQUFXLEdBQ2YsSUFBQSwwQ0FBb0IsRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLElBQUksS0FBSyxDQUFDO0lBQzFFLE1BQU0saUJBQWlCLEdBQUcsZ0JBQU0sQ0FBQyxHQUFHLENBQ2xDLFdBQVcsRUFDWCxvQ0FBNEIsQ0FDN0IsQ0FBQztJQUVGLElBQUksV0FBVyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3BFLHlCQUF5QixHQUFHLElBQUksQ0FBQztRQUNqQyxPQUFPLENBQUMsSUFBSSxDQUNWLHFDQUFxQyxvQ0FBNEIsV0FBVyxXQUFXLDhDQUE4QyxDQUN0SSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sV0FBVyxJQUFJLGlCQUFpQixDQUFDO0FBQzFDLENBQUM7QUFFTSxLQUFLLFVBQVUsY0FBYyxDQUFDLFdBQW1CO0lBQ3RELElBQUksd0JBQXdCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLElBQUEsNENBQXNCLEdBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxJQUFBLHNDQUFtQixHQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGdldE5leHRCdWlsZGVyRGVmZXJyZWQgfSBmcm9tICcuL2J1aWxkZXItZGVmZXJyZWQuanMnO1xuaW1wb3J0IHsgZ2V0TmV4dEJ1aWxkZXJFYWdlciB9IGZyb20gJy4vYnVpbGRlci1lYWdlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVudmlyb25tZW50RmxhZyB9IGZyb20gJy4vZW52aXJvbm1lbnQtZmxhZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBERUZFUlJFRF9CVUlMREVSX01JTl9WRVJTSU9OID0gJzE2LjIuMC1jYW5hcnkuNDgnO1xuXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfREVGRVJSRURfRU5UUklFUyA9IFtcbiAgJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9mbG93JyxcbiAgJy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rL1t0b2tlbl0nLFxuXSBhcyBjb25zdDtcblxubGV0IHdhcm5lZEFib3V0RmxhZ0FuZFZlcnNpb24gPSBmYWxzZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFVzZURlZmVycmVkQnVpbGRlcihuZXh0VmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZsYWdFbmFibGVkID1cbiAgICBwYXJzZUVudmlyb25tZW50RmxhZyhwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZKSA/PyBmYWxzZTtcbiAgY29uc3QgdmVyc2lvbkNvbXBhdGlibGUgPSBzZW12ZXIuZ3RlKFxuICAgIG5leHRWZXJzaW9uLFxuICAgIERFRkVSUkVEX0JVSUxERVJfTUlOX1ZFUlNJT05cbiAgKTtcblxuICBpZiAoZmxhZ0VuYWJsZWQgJiYgIXZlcnNpb25Db21wYXRpYmxlICYmICF3YXJuZWRBYm91dEZsYWdBbmRWZXJzaW9uKSB7XG4gICAgd2FybmVkQWJvdXRGbGFnQW5kVmVyc2lvbiA9IHRydWU7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYGxhenlEaXNjb3ZlcnkgcmVxdWlyZXMgTmV4dC5qcyA+PSAke0RFRkVSUkVEX0JVSUxERVJfTUlOX1ZFUlNJT059IChmb3VuZCAke25leHRWZXJzaW9ufSk7IGZhbGxpbmcgYmFjayB0byBlYWdlciB3b3JrZmxvdyBkaXNjb3ZlcnkuYFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZmxhZ0VuYWJsZWQgJiYgdmVyc2lvbkNvbXBhdGlibGU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXROZXh0QnVpbGRlcihuZXh0VmVyc2lvbjogc3RyaW5nKSB7XG4gIGlmIChzaG91bGRVc2VEZWZlcnJlZEJ1aWxkZXIobmV4dFZlcnNpb24pKSB7XG4gICAgcmV0dXJuIGdldE5leHRCdWlsZGVyRGVmZXJyZWQoKTtcbiAgfVxuXG4gIHJldHVybiBnZXROZXh0QnVpbGRlckVhZ2VyKCk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-flag.d.ts","sourceRoot":"","sources":["../src/environment-flag.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,GAAG,SAAS,CAWrB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseEnvironmentFlag = parseEnvironmentFlag;
|
|
4
|
+
const FALSE_ENV_VALUES = new Set(['0', 'false', 'no', 'off']);
|
|
5
|
+
function parseEnvironmentFlag(rawValue) {
|
|
6
|
+
const normalizedValue = rawValue?.trim().toLowerCase();
|
|
7
|
+
if (!normalizedValue) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
if (FALSE_ENV_VALUES.has(normalizedValue)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtZmxhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbnZpcm9ubWVudC1mbGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsb0RBYUM7QUFmRCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUU5RCxTQUFnQixvQkFBb0IsQ0FDbEMsUUFBNEI7SUFFNUIsTUFBTSxlQUFlLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBGQUxTRV9FTlZfVkFMVUVTID0gbmV3IFNldChbJzAnLCAnZmFsc2UnLCAnbm8nLCAnb2ZmJ10pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbnZpcm9ubWVudEZsYWcoXG4gIHJhd1ZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSByYXdWYWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghbm9ybWFsaXplZFZhbHVlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChGQUxTRV9FTlZfVkFMVUVTLmhhcyhub3JtYWxpemVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,14 @@ export declare function withWorkflow(nextConfigOrFn: NextConfig | ((phase: strin
|
|
|
7
7
|
local?: {
|
|
8
8
|
port?: number;
|
|
9
9
|
};
|
|
10
|
+
/**
|
|
11
|
+
* Controls how source maps are emitted for workflow bundles. Accepts
|
|
12
|
+
* the same values as esbuild's `sourcemap` option: `true`/`'inline'`
|
|
13
|
+
* (default), `'linked'`, `'external'`, `'both'`, or `false` to omit
|
|
14
|
+
* source maps. Can also be set via the `WORKFLOW_SOURCEMAP`
|
|
15
|
+
* environment variable.
|
|
16
|
+
*/
|
|
17
|
+
sourcemap?: boolean | 'inline' | 'linked' | 'external' | 'both';
|
|
10
18
|
};
|
|
11
19
|
}): (phase: string, ctx: {
|
|
12
20
|
defaultConfig: NextConfig;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA0TvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAqCJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBA2PrC"}
|