@workflow/next 5.0.0-beta.3 → 5.0.0-beta.30

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/index.js CHANGED
@@ -1,11 +1,194 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.withWorkflow = withWorkflow;
40
+ const node_fs_1 = require("node:fs");
41
+ const promises_1 = require("node:fs/promises");
42
+ const node_path_1 = require("node:path");
43
+ const builders_1 = require("@workflow/builders");
7
44
  const semver_1 = __importDefault(require("semver"));
8
45
  const builder_js_1 = require("./builder.js");
46
+ const VERCEL_WORLD_PACKAGE = '@workflow/world-vercel';
47
+ const VERCEL_WORLD_DEPENDENCY_PACKAGES = [
48
+ '@vercel/queue',
49
+ '@vercel/oidc',
50
+ '@vercel/cli-auth',
51
+ '@napi-rs/keyring',
52
+ ];
53
+ const VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES = [
54
+ VERCEL_WORLD_PACKAGE,
55
+ ...VERCEL_WORLD_DEPENDENCY_PACKAGES,
56
+ ];
57
+ const WORKFLOW_SERVER_TRANSPILE_PACKAGES = [
58
+ 'workflow',
59
+ '@workflow/core',
60
+ '@workflow/serde',
61
+ '@workflow/errors',
62
+ '@workflow/utils',
63
+ '@workflow/ai',
64
+ ];
65
+ const useWorkflowPattern = /^\s*(['"])use workflow\1;?\s*$/m;
66
+ const useStepPattern = /^\s*(['"])use step\1;?\s*$/m;
67
+ const workflowSerdeImportPattern = /from\s+(['"])@workflow\/serde\1/;
68
+ const workflowSerdeSymbolPattern = /Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\1\s*\)/;
69
+ const workflowSerdeComputedPropertyPattern = /\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\]/;
70
+ const PSEUDO_EXTERNAL_PACKAGES = new Set(['server-only', 'client-only']);
71
+ const warnedAutoRemovedServerExternalPackages = new Set();
72
+ const BASE_PATH_SYMBOL = Symbol.for('@workflow/core/basePath');
73
+ const globalConfig = globalThis;
74
+ // Keep this local: @workflow/next is CommonJS, while @workflow/utils is ESM-only.
75
+ function setWorkflowBasePath(basePath) {
76
+ globalConfig[BASE_PATH_SYMBOL] = basePath ?? '';
77
+ }
78
+ function isPlainObject(value) {
79
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
80
+ }
81
+ function isResolvablePackageSpecifier(specifier) {
82
+ if (specifier.startsWith('.') || specifier.startsWith('/')) {
83
+ return false;
84
+ }
85
+ if (specifier.startsWith('$')) {
86
+ return false;
87
+ }
88
+ if (specifier.includes('*') || specifier.includes(':')) {
89
+ return false;
90
+ }
91
+ return true;
92
+ }
93
+ function detectWorkflowPatterns(source) {
94
+ const hasUseWorkflow = useWorkflowPattern.test(source);
95
+ const hasUseStep = useStepPattern.test(source);
96
+ const hasSerdeImport = workflowSerdeImportPattern.test(source);
97
+ const hasSerdeSymbol = workflowSerdeSymbolPattern.test(source);
98
+ const hasSerdeComputedProperty = workflowSerdeComputedPropertyPattern.test(source);
99
+ return {
100
+ hasUseWorkflow,
101
+ hasUseStep,
102
+ hasSerde: hasSerdeImport || hasSerdeSymbol || hasSerdeComputedProperty,
103
+ };
104
+ }
105
+ function getIssueLabels(detected) {
106
+ const issues = [];
107
+ if (detected.hasUseWorkflow) {
108
+ issues.push('"use workflow" functions');
109
+ }
110
+ if (detected.hasUseStep) {
111
+ issues.push('"use step" functions');
112
+ }
113
+ if (detected.hasSerde) {
114
+ issues.push('serialization classes');
115
+ }
116
+ return issues;
117
+ }
118
+ function hasWorkflowSerdeDependency(packageJson) {
119
+ if (!isPlainObject(packageJson)) {
120
+ return false;
121
+ }
122
+ const dependencies = isPlainObject(packageJson.dependencies)
123
+ ? packageJson.dependencies
124
+ : {};
125
+ const peerDependencies = isPlainObject(packageJson.peerDependencies)
126
+ ? packageJson.peerDependencies
127
+ : {};
128
+ return (Object.hasOwn(dependencies, '@workflow/serde') ||
129
+ Object.hasOwn(peerDependencies, '@workflow/serde'));
130
+ }
131
+ async function detectServerExternalPackage(packageName, workingDir) {
132
+ if (!isResolvablePackageSpecifier(packageName)) {
133
+ return null;
134
+ }
135
+ let hasUseWorkflow = false;
136
+ let hasUseStep = false;
137
+ let hasSerde = false;
138
+ try {
139
+ const packageJsonPath = require.resolve(`${packageName}/package.json`, {
140
+ paths: [workingDir],
141
+ });
142
+ const packageJsonSource = await (0, promises_1.readFile)(packageJsonPath, 'utf-8');
143
+ const packageJson = JSON.parse(packageJsonSource);
144
+ hasSerde = hasWorkflowSerdeDependency(packageJson);
145
+ }
146
+ catch {
147
+ // Best-effort only. Continue to source scanning.
148
+ }
149
+ try {
150
+ const entryPath = require.resolve(packageName, {
151
+ paths: [workingDir],
152
+ });
153
+ const source = await (0, promises_1.readFile)(entryPath, 'utf-8');
154
+ const patterns = detectWorkflowPatterns(source);
155
+ hasUseWorkflow = patterns.hasUseWorkflow;
156
+ hasUseStep = patterns.hasUseStep;
157
+ hasSerde ||= patterns.hasSerde;
158
+ }
159
+ catch {
160
+ // Best-effort only. Use whichever signal we already have.
161
+ }
162
+ if (!hasUseWorkflow && !hasUseStep && !hasSerde) {
163
+ return null;
164
+ }
165
+ return {
166
+ packageName,
167
+ hasUseWorkflow,
168
+ hasUseStep,
169
+ hasSerde,
170
+ };
171
+ }
172
+ function warnAboutAutoRemovedServerExternalPackages(detectedPackages) {
173
+ const newlyDetectedPackages = detectedPackages.filter(({ packageName }) => {
174
+ return !warnedAutoRemovedServerExternalPackages.has(packageName);
175
+ });
176
+ if (newlyDetectedPackages.length === 0) {
177
+ return;
178
+ }
179
+ for (const { packageName } of newlyDetectedPackages) {
180
+ warnedAutoRemovedServerExternalPackages.add(packageName);
181
+ }
182
+ const packageDescriptions = newlyDetectedPackages
183
+ .map((detected) => `"${detected.packageName}" (${getIssueLabels(detected).join(', ')})`)
184
+ .join(', ');
185
+ const packageNames = newlyDetectedPackages
186
+ .map((detected) => `"${detected.packageName}"`)
187
+ .join(', ');
188
+ console.warn(`\n⚠ Workflow found workflow code in serverExternalPackages: ${packageDescriptions}.` +
189
+ `\n Workflow removed the affected entries from serverExternalPackages for this build and is compiling the packages anyway.` +
190
+ `\n Remove ${packageNames} from serverExternalPackages in next.config to silence this warning.\n`);
191
+ }
9
192
  function resolveNextVersion(workingDir) {
10
193
  const errors = [];
11
194
  // Try resolving from the consuming project's working directory first.
@@ -36,28 +219,81 @@ function resolveNextVersion(workingDir) {
36
219
  }
37
220
  throw new AggregateError(errors, `Could not resolve Next.js version. Ensure \`next\` is installed in your project (working directory: ${workingDir}).`);
38
221
  }
222
+ function fileExists(path) {
223
+ try {
224
+ const stats = (0, node_fs_1.statSync)(path);
225
+ return stats.isFile();
226
+ }
227
+ catch {
228
+ return false;
229
+ }
230
+ }
231
+ function getWorkflowManifestCopyPaths({ projectDir, distDir, }) {
232
+ const manifestCandidates = [
233
+ (0, node_path_1.join)(projectDir, 'app/.well-known/workflow/v1/manifest.json'),
234
+ (0, node_path_1.join)(projectDir, 'src/app/.well-known/workflow/v1/manifest.json'),
235
+ (0, node_path_1.join)(projectDir, 'public/.well-known/workflow/v1/manifest.json'),
236
+ ];
237
+ const manifestPath = manifestCandidates.find(fileExists);
238
+ if (!manifestPath) {
239
+ return;
240
+ }
241
+ const resolvedDistDir = (0, node_path_1.isAbsolute)(distDir)
242
+ ? distDir
243
+ : (0, node_path_1.join)(projectDir, distDir);
244
+ const diagnosticsManifestPath = (0, node_path_1.join)(resolvedDistDir, 'diagnostics', 'workflows-manifest.json');
245
+ return { manifestPath, diagnosticsManifestPath };
246
+ }
247
+ async function copyWorkflowDiagnosticsManifest(metadata) {
248
+ const paths = getWorkflowManifestCopyPaths(metadata);
249
+ if (!paths) {
250
+ return;
251
+ }
252
+ const { manifestPath, diagnosticsManifestPath } = paths;
253
+ await (0, promises_1.mkdir)((0, node_path_1.dirname)(diagnosticsManifestPath), { recursive: true });
254
+ await (0, promises_1.copyFile)(manifestPath, diagnosticsManifestPath);
255
+ }
256
+ function copyWorkflowDiagnosticsManifestSync(metadata) {
257
+ const paths = getWorkflowManifestCopyPaths(metadata);
258
+ if (!paths) {
259
+ return;
260
+ }
261
+ const { manifestPath, diagnosticsManifestPath } = paths;
262
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(diagnosticsManifestPath), { recursive: true });
263
+ (0, node_fs_1.copyFileSync)(manifestPath, diagnosticsManifestPath);
264
+ }
265
+ function registerWorkflowDiagnosticsManifestCopy(metadata) {
266
+ const marker = '__workflowDiagnosticsManifestCopies';
267
+ const globalWithMarker = globalThis;
268
+ if (!globalWithMarker[marker]) {
269
+ globalWithMarker[marker] = [];
270
+ process.once('exit', () => {
271
+ for (const copyMetadata of globalWithMarker[marker] || []) {
272
+ copyWorkflowDiagnosticsManifestSync(copyMetadata);
273
+ }
274
+ });
275
+ }
276
+ globalWithMarker[marker].push(metadata);
277
+ }
39
278
  function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
40
- if (workflows?.lazyDiscovery) {
41
- process.env.WORKFLOW_NEXT_LAZY_DISCOVERY = '1';
279
+ const workflowTargetWorld = (0, builders_1.ensureWorkflowTargetWorldEnv)();
280
+ if (workflowTargetWorld === '@workflow/world-local') {
281
+ process.env.WORKFLOW_LOCAL_DATA_DIR ??= '.next/workflow-data';
42
282
  }
43
283
  if (!process.env.VERCEL_DEPLOYMENT_ID) {
44
- if (!process.env.WORKFLOW_TARGET_WORLD) {
45
- process.env.WORKFLOW_TARGET_WORLD = 'local';
46
- process.env.WORKFLOW_LOCAL_DATA_DIR = '.next/workflow-data';
47
- }
48
284
  const maybePort = workflows?.local?.port;
49
285
  if (maybePort) {
50
286
  process.env.PORT = maybePort.toString();
51
287
  }
52
288
  }
53
- else {
54
- if (!process.env.WORKFLOW_TARGET_WORLD) {
55
- process.env.WORKFLOW_TARGET_WORLD = 'vercel';
56
- }
57
- }
58
289
  return async function buildConfig(phase, ctx) {
290
+ if (phase === 'phase-development-server' ||
291
+ phase === 'phase-production-build') {
292
+ const { prewarmWorkflowSwcPluginCache } = await Promise.resolve().then(() => __importStar(require('./swc-plugin-cache.js')));
293
+ // Loader workers inherit this cwd and read from the same SWC cache.
294
+ prewarmWorkflowSwcPluginCache(process.cwd());
295
+ }
59
296
  const loaderPath = require.resolve('./loader');
60
- let runDeferredBuildFromCallback;
61
297
  let nextConfig;
62
298
  if (typeof nextConfigOrFn === 'function') {
63
299
  nextConfig = await nextConfigOrFn(phase, ctx);
@@ -67,6 +303,67 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
67
303
  }
68
304
  // shallow clone to avoid read-only on top-level
69
305
  nextConfig = Object.assign({}, nextConfig);
306
+ const workflowBasePath = nextConfig.basePath;
307
+ setWorkflowBasePath(workflowBasePath);
308
+ nextConfig.env = {
309
+ ...nextConfig.env,
310
+ WORKFLOW_TARGET_WORLD: workflowTargetWorld,
311
+ };
312
+ const workingDir = process.cwd();
313
+ const workflowTargetWorldWebpackAlias = (0, builders_1.resolveWorkflowTargetWorldAlias)({
314
+ workingDir,
315
+ targetWorld: workflowTargetWorld,
316
+ });
317
+ const workflowTargetWorldIsPath = (0, builders_1.isWorkflowTargetWorldPath)(workflowTargetWorld);
318
+ const workflowTargetWorldTranspilePackages = workflowTargetWorld === VERCEL_WORLD_PACKAGE || workflowTargetWorldIsPath
319
+ ? []
320
+ : [workflowTargetWorld];
321
+ nextConfig.serverExternalPackages = [
322
+ ...new Set([
323
+ ...(nextConfig.serverExternalPackages || []),
324
+ // Keep the Vercel world and its native-prone dependencies external so
325
+ // local builds do not try to parse @vercel/queue's keyring dependency
326
+ // tree.
327
+ ...VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES,
328
+ ]),
329
+ ];
330
+ nextConfig.transpilePackages = [
331
+ ...new Set([
332
+ ...(nextConfig.transpilePackages || []),
333
+ ...WORKFLOW_SERVER_TRANSPILE_PACKAGES,
334
+ ...workflowTargetWorldTranspilePackages,
335
+ ]),
336
+ ];
337
+ const existingCompiler = nextConfig.compiler ?? {};
338
+ const existingRunAfterProductionCompile = existingCompiler.runAfterProductionCompile;
339
+ const configuredServerExternalPackages = Array.isArray(nextConfig.serverExternalPackages)
340
+ ? nextConfig.serverExternalPackages
341
+ : [];
342
+ let effectiveServerExternalPackages = configuredServerExternalPackages;
343
+ if (configuredServerExternalPackages.length > 0) {
344
+ const detectedWorkflowPackages = [];
345
+ for (const packageName of configuredServerExternalPackages) {
346
+ if (PSEUDO_EXTERNAL_PACKAGES.has(packageName)) {
347
+ continue;
348
+ }
349
+ try {
350
+ const detected = await detectServerExternalPackage(packageName, process.cwd());
351
+ if (detected) {
352
+ detectedWorkflowPackages.push(detected);
353
+ }
354
+ }
355
+ catch {
356
+ // Best-effort only. Never block config generation.
357
+ }
358
+ }
359
+ if (detectedWorkflowPackages.length > 0) {
360
+ const removedPackages = new Set(detectedWorkflowPackages.map((detected) => detected.packageName));
361
+ effectiveServerExternalPackages =
362
+ configuredServerExternalPackages.filter((packageName) => !removedPackages.has(packageName));
363
+ nextConfig.serverExternalPackages = effectiveServerExternalPackages;
364
+ warnAboutAutoRemovedServerExternalPackages(detectedWorkflowPackages);
365
+ }
366
+ }
70
367
  // configure the loader if turbopack is being used
71
368
  if (!nextConfig.turbopack) {
72
369
  nextConfig.turbopack = {};
@@ -74,36 +371,57 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
74
371
  if (!nextConfig.turbopack.rules) {
75
372
  nextConfig.turbopack.rules = {};
76
373
  }
374
+ nextConfig.turbopack.resolveAlias = {
375
+ ...(nextConfig.turbopack.resolveAlias || {}),
376
+ [builders_1.WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldIsPath
377
+ ? workflowTargetWorldWebpackAlias
378
+ : workflowTargetWorld,
379
+ };
77
380
  const existingRules = nextConfig.turbopack.rules;
78
- const nextVersion = resolveNextVersion(process.cwd());
381
+ const nextVersion = resolveNextVersion(workingDir);
382
+ const configuredProjectRoot = nextConfig.outputFileTracingRoot ?? nextConfig.turbopack?.root;
383
+ const projectRoot = configuredProjectRoot
384
+ ? (0, builders_1.resolveConfiguredProjectRoot)(workingDir, configuredProjectRoot)
385
+ : (0, builders_1.resolveProjectRoot)(workingDir);
79
386
  const supportsTurboCondition = semver_1.default.gte(nextVersion, 'v16.0.0');
80
- const useDeferredBuilder = (0, builder_js_1.shouldUseDeferredBuilder)(nextVersion);
81
- // Deferred builder discovers files via loader socket notifications, so
82
- // turbopack content conditions are only needed with the eager builder.
83
- const shouldApplyTurboCondition = supportsTurboCondition && !useDeferredBuilder;
84
387
  const shouldWatch = process.env.NODE_ENV === 'development';
85
388
  let workflowBuilderPromise;
86
389
  const distDir = nextConfig.distDir || '.next';
390
+ nextConfig.compiler = {
391
+ ...existingCompiler,
392
+ runAfterProductionCompile: async (metadata) => {
393
+ if (existingRunAfterProductionCompile) {
394
+ await existingRunAfterProductionCompile(metadata);
395
+ }
396
+ await copyWorkflowDiagnosticsManifest(metadata);
397
+ registerWorkflowDiagnosticsManifestCopy(metadata);
398
+ },
399
+ };
87
400
  const getWorkflowBuilder = async () => {
88
401
  if (!workflowBuilderPromise) {
89
402
  workflowBuilderPromise = (async () => {
90
403
  const NextBuilder = await (0, builder_js_1.getNextBuilder)(nextVersion);
91
404
  return new NextBuilder({
92
405
  watch: shouldWatch,
93
- // discover workflows from pages/app entries
94
- dirs: ['pages', 'app', 'src/pages', 'src/app'],
95
- projectRoot: nextConfig.outputFileTracingRoot,
96
- workingDir: process.cwd(),
406
+ // getInputFiles filters the project to Next.js entrypoints
407
+ dirs: ['.'],
408
+ pageExtensions: nextConfig.pageExtensions ?? [
409
+ 'tsx',
410
+ 'ts',
411
+ 'jsx',
412
+ 'js',
413
+ ],
414
+ projectRoot,
415
+ moduleSpecifierRoot: workingDir,
416
+ workingDir,
97
417
  distDir,
418
+ basePath: workflowBasePath,
98
419
  diagnosticsDir: `${distDir}/diagnostics`,
99
420
  buildTarget: 'next',
100
421
  workflowsBundlePath: '', // not used in base
101
422
  stepsBundlePath: '', // not used in base
102
423
  webhookBundlePath: '', // node used in base
103
- suppressCreateWorkflowsBundleLogs: useDeferredBuilder,
104
- suppressCreateWorkflowsBundleWarnings: useDeferredBuilder,
105
- suppressCreateWebhookBundleLogs: useDeferredBuilder,
106
- suppressCreateManifestLogs: useDeferredBuilder,
424
+ sourcemap: workflows?.sourcemap,
107
425
  externalPackages: [
108
426
  // server-only and client-only are pseudo-packages handled by Next.js
109
427
  // during its build process. We mark them as external to prevent esbuild
@@ -111,47 +429,13 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
111
429
  // See: https://nextjs.org/docs/app/getting-started/server-and-client-components
112
430
  'server-only',
113
431
  'client-only',
114
- ...(nextConfig.serverExternalPackages || []),
432
+ ...effectiveServerExternalPackages,
115
433
  ],
116
434
  });
117
435
  })();
118
436
  }
119
437
  return workflowBuilderPromise;
120
438
  };
121
- if (useDeferredBuilder) {
122
- runDeferredBuildFromCallback = async () => {
123
- const workflowBuilder = await getWorkflowBuilder();
124
- if (typeof workflowBuilder.onBeforeDeferredEntries === 'function') {
125
- await workflowBuilder.onBeforeDeferredEntries();
126
- }
127
- };
128
- const existingExperimental = (nextConfig.experimental ?? {});
129
- const existingDeferredEntries = Array.isArray(existingExperimental.deferredEntries)
130
- ? existingExperimental.deferredEntries
131
- : [];
132
- const existingOnBeforeDeferredEntries = typeof existingExperimental.onBeforeDeferredEntries === 'function'
133
- ? existingExperimental.onBeforeDeferredEntries
134
- : undefined;
135
- nextConfig.experimental = {
136
- ...existingExperimental,
137
- // biome-ignore lint/suspicious/noTsIgnore: expect-error is wrong as it will work on valid version
138
- // @ts-ignore this is only available in canary Next.js
139
- deferredEntries: [
140
- ...new Set([
141
- ...existingDeferredEntries,
142
- ...builder_js_1.WORKFLOW_DEFERRED_ENTRIES,
143
- ]),
144
- ],
145
- onBeforeDeferredEntries: async (...args) => {
146
- if (existingOnBeforeDeferredEntries) {
147
- await existingOnBeforeDeferredEntries(...args);
148
- }
149
- if (runDeferredBuildFromCallback) {
150
- await runDeferredBuildFromCallback();
151
- }
152
- },
153
- };
154
- }
155
439
  for (const key of [
156
440
  '*.tsx',
157
441
  '*.ts',
@@ -163,7 +447,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
163
447
  '*.cts',
164
448
  ]) {
165
449
  nextConfig.turbopack.rules[key] = {
166
- ...(shouldApplyTurboCondition
450
+ ...(supportsTurboCondition
167
451
  ? {
168
452
  condition: {
169
453
  // Use 'all' to combine: must match content AND must NOT be in generated path
@@ -175,7 +459,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
175
459
  // Match files with workflow directives or custom serialization patterns
176
460
  // Uses backreferences (\2, \3) to ensure matching quote types
177
461
  {
178
- content: /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
462
+ content: /(use workflow|use step|@workflow\/core\/runtime\/world-target|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\))/,
179
463
  },
180
464
  ],
181
465
  },
@@ -187,7 +471,10 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
187
471
  // configure the loader for webpack
188
472
  const existingWebpackModify = nextConfig.webpack;
189
473
  nextConfig.webpack = (...args) => {
190
- const [webpackConfig] = args;
474
+ let [webpackConfig] = args;
475
+ webpackConfig = existingWebpackModify
476
+ ? (existingWebpackModify(...args) ?? webpackConfig)
477
+ : webpackConfig;
191
478
  if (!webpackConfig.module) {
192
479
  webpackConfig.module = {};
193
480
  }
@@ -200,9 +487,24 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
200
487
  test: /.*\.(mjs|cjs|cts|ts|tsx|js|jsx)$/,
201
488
  loader: loaderPath,
202
489
  });
203
- return existingWebpackModify
204
- ? existingWebpackModify(...args)
205
- : webpackConfig;
490
+ webpackConfig.resolve ||= {};
491
+ const existingAlias = webpackConfig.resolve.alias;
492
+ if (Array.isArray(existingAlias)) {
493
+ webpackConfig.resolve.alias = [
494
+ ...existingAlias,
495
+ {
496
+ name: builders_1.WORKFLOW_WORLD_TARGET_MODULE,
497
+ alias: workflowTargetWorldWebpackAlias,
498
+ },
499
+ ];
500
+ }
501
+ else {
502
+ webpackConfig.resolve.alias = {
503
+ ...(existingAlias || {}),
504
+ [builders_1.WORKFLOW_WORLD_TARGET_MODULE]: workflowTargetWorldWebpackAlias,
505
+ };
506
+ }
507
+ return webpackConfig;
206
508
  };
207
509
  // only run this in the main process so it only runs once
208
510
  // as Next.js uses child processes for different builds
@@ -215,4 +517,4 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
215
517
  return nextConfig;
216
518
  };
217
519
  }
218
- //# sourceMappingURL=index.js.map
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErVUEsb0NBdVRDO0FBdG9CRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFPNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBQ0YsTUFBTSxrQ0FBa0MsR0FBRztJQUN6QyxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLGNBQWM7Q0FDZixDQUFDO0FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsVUFDZSxDQUFDO0FBRXJD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LHVDQUE0Qjt3QkFDbEMsS0FBSyxFQUFFLCtCQUErQjtxQkFDdkM7aUJBQ0YsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRztvQkFDNUIsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7b0JBQ3hCLENBQUMsdUNBQTRCLENBQUMsRUFBRSwrQkFBK0I7aUJBQ2hFLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1FBQ0YseURBQXlEO1FBQ3pELHVEQUF1RDtRQUN2RCxJQUNFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkI7WUFDeEMsS0FBSyxLQUFLLHlCQUF5QixFQUNuQyxDQUFDO1lBQ0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO1lBRW5ELE1BQU0sZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29weUZpbGVTeW5jLCBta2RpclN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBjb3B5RmlsZSwgbWtkaXIsIHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7XG4gIGVuc3VyZVdvcmtmbG93VGFyZ2V0V29ybGRFbnYsXG4gIGlzV29ya2Zsb3dUYXJnZXRXb3JsZFBhdGgsXG4gIHJlc29sdmVDb25maWd1cmVkUHJvamVjdFJvb3QsXG4gIHJlc29sdmVQcm9qZWN0Um9vdCxcbiAgcmVzb2x2ZVdvcmtmbG93VGFyZ2V0V29ybGRBbGlhcyxcbiAgV09SS0ZMT1dfV09STERfVEFSR0VUX01PRFVMRSxcbn0gZnJvbSAnQHdvcmtmbG93L2J1aWxkZXJzJztcbmltcG9ydCB0eXBlIHsgTmV4dENvbmZpZyB9IGZyb20gJ25leHQnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZ2V0TmV4dEJ1aWxkZXIgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuXG5jb25zdCBWRVJDRUxfV09STERfUEFDS0FHRSA9ICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJztcbmNvbnN0IFZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTID0gW1xuICAnQHZlcmNlbC9xdWV1ZScsXG4gICdAdmVyY2VsL29pZGMnLFxuICAnQHZlcmNlbC9jbGktYXV0aCcsXG4gICdAbmFwaS1ycy9rZXlyaW5nJyxcbl07XG5jb25zdCBWRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTID0gW1xuICBWRVJDRUxfV09STERfUEFDS0FHRSxcbiAgLi4uVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMsXG5dO1xuY29uc3QgV09SS0ZMT1dfU0VSVkVSX1RSQU5TUElMRV9QQUNLQUdFUyA9IFtcbiAgJ3dvcmtmbG93JyxcbiAgJ0B3b3JrZmxvdy9jb3JlJyxcbiAgJ0B3b3JrZmxvdy9zZXJkZScsXG4gICdAd29ya2Zsb3cvZXJyb3JzJyxcbiAgJ0B3b3JrZmxvdy91dGlscycsXG4gICdAd29ya2Zsb3cvYWknLFxuXTtcbmNvbnN0IHVzZVdvcmtmbG93UGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugd29ya2Zsb3dcXDE7P1xccyokL207XG5jb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcbmNvbnN0IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuID0gL2Zyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwxLztcbmNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcbmNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCBQU0VVRE9fRVhURVJOQUxfUEFDS0FHRVMgPSBuZXcgU2V0KFsnc2VydmVyLW9ubHknLCAnY2xpZW50LW9ubHknXSk7XG5jb25zdCB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmNvbnN0IEJBU0VfUEFUSF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvY29yZS9iYXNlUGF0aCcpO1xuY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmXG4gIFJlY29yZDxzeW1ib2wsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbi8vIEtlZXAgdGhpcyBsb2NhbDogQHdvcmtmbG93L25leHQgaXMgQ29tbW9uSlMsIHdoaWxlIEB3b3JrZmxvdy91dGlscyBpcyBFU00tb25seS5cbmZ1bmN0aW9uIHNldFdvcmtmbG93QmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBnbG9iYWxDb25maWdbQkFTRV9QQVRIX1NZTUJPTF0gPSBiYXNlUGF0aCA/PyAnJztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2Uge1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihzcGVjaWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuaW5jbHVkZXMoJyonKSB8fCBzcGVjaWZpZXIuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBjb25zdCBoYXNVc2VXb3JrZmxvdyA9IHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1VzZVN0ZXAgPSB1c2VTdGVwUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID0gd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5ID1cbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZTogaGFzU2VyZGVJbXBvcnQgfHwgaGFzU2VyZGVTeW1ib2wgfHwgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZDogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGRldGVjdGVkLmhhc1VzZVdvcmtmbG93KSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHdvcmtmbG93XCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1VzZVN0ZXApIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugc3RlcFwiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNTZXJkZSkge1xuICAgIGlzc3Vlcy5wdXNoKCdzZXJpYWxpemF0aW9uIGNsYXNzZXMnKTtcbiAgfVxuICByZXR1cm4gaXNzdWVzO1xufVxuXG5mdW5jdGlvbiBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlzUGxhaW5PYmplY3QocGFja2FnZUpzb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuICBjb25zdCBwZWVyRGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llc1xuICAgIDoge307XG5cbiAgcmV0dXJuIChcbiAgICBPYmplY3QuaGFzT3duKGRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpIHx8XG4gICAgT2JqZWN0Lmhhc093bihwZWVyRGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJylcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UgfCBudWxsPiB7XG4gIGlmICghaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihwYWNrYWdlTmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBoYXNVc2VXb3JrZmxvdyA9IGZhbHNlO1xuICBsZXQgaGFzVXNlU3RlcCA9IGZhbHNlO1xuICBsZXQgaGFzU2VyZGUgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwYWNrYWdlTmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBwYWNrYWdlSnNvblNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uU291cmNlKSBhcyB1bmtub3duO1xuICAgIGhhc1NlcmRlID0gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb24pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBDb250aW51ZSB0byBzb3VyY2Ugc2Nhbm5pbmcuXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IHJlcXVpcmUucmVzb2x2ZShwYWNrYWdlTmFtZSwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgIGhhc1VzZVdvcmtmbG93ID0gcGF0dGVybnMuaGFzVXNlV29ya2Zsb3c7XG4gICAgaGFzVXNlU3RlcCA9IHBhdHRlcm5zLmhhc1VzZVN0ZXA7XG4gICAgaGFzU2VyZGUgfHw9IHBhdHRlcm5zLmhhc1NlcmRlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBVc2Ugd2hpY2hldmVyIHNpZ25hbCB3ZSBhbHJlYWR5IGhhdmUuXG4gIH1cblxuICBpZiAoIWhhc1VzZVdvcmtmbG93ICYmICFoYXNVc2VTdGVwICYmICFoYXNTZXJkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZSxcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoXG4gIGRldGVjdGVkUGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW11cbik6IHZvaWQge1xuICBjb25zdCBuZXdseURldGVjdGVkUGFja2FnZXMgPSBkZXRlY3RlZFBhY2thZ2VzLmZpbHRlcigoeyBwYWNrYWdlTmFtZSB9KSA9PiB7XG4gICAgcmV0dXJuICF3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IHsgcGFja2FnZU5hbWUgfSBvZiBuZXdseURldGVjdGVkUGFja2FnZXMpIHtcbiAgICB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VEZXNjcmlwdGlvbnMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKFxuICAgICAgKGRldGVjdGVkKSA9PlxuICAgICAgICBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiICgke2dldElzc3VlTGFiZWxzKGRldGVjdGVkKS5qb2luKCcsICcpfSlgXG4gICAgKVxuICAgIC5qb2luKCcsICcpO1xuICBjb25zdCBwYWNrYWdlTmFtZXMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKChkZXRlY3RlZCkgPT4gYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cImApXG4gICAgLmpvaW4oJywgJyk7XG5cbiAgY29uc29sZS53YXJuKFxuICAgIGBcXG7imqAgV29ya2Zsb3cgZm91bmQgd29ya2Zsb3cgY29kZSBpbiBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzOiAke3BhY2thZ2VEZXNjcmlwdGlvbnN9LmAgK1xuICAgICAgYFxcbiAgV29ya2Zsb3cgcmVtb3ZlZCB0aGUgYWZmZWN0ZWQgZW50cmllcyBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgZm9yIHRoaXMgYnVpbGQgYW5kIGlzIGNvbXBpbGluZyB0aGUgcGFja2FnZXMgYW55d2F5LmAgK1xuICAgICAgYFxcbiAgUmVtb3ZlICR7cGFja2FnZU5hbWVzfSBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgaW4gbmV4dC5jb25maWcgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuXFxuYFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcblxuICAvLyBUcnkgcmVzb2x2aW5nIGZyb20gdGhlIGNvbnN1bWluZyBwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnkgZmlyc3QuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb25vcmVwbyBzZXR1cHMgd2hlcmUgYG5leHRgIG1heSBub3QgYmUgaG9pc3RlZCB0byB0aGVcbiAgLy8gc2FtZSBsb2NhdGlvbiBhcyBgQHdvcmtmbG93L25leHRgLlxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnbmV4dC9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFja2FnZUpzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCkgYXMge1xuICAgICAgdmVyc2lvbj86IHVua25vd247XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZSdzIGxvY2F0aW9uLlxuICB0cnkge1xuICAgIGNvbnN0IHZlcnNpb24gPSAocmVxdWlyZSgnbmV4dC9wYWNrYWdlLmpzb24nKSBhcyB7IHZlcnNpb24/OiB1bmtub3duIH0pXG4gICAgICAudmVyc2lvbjtcbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICBlcnJvcnMsXG4gICAgYENvdWxkIG5vdCByZXNvbHZlIE5leHQuanMgdmVyc2lvbi4gRW5zdXJlIFxcYG5leHRcXGAgaXMgaW5zdGFsbGVkIGluIHlvdXIgcHJvamVjdCAod29ya2luZyBkaXJlY3Rvcnk6ICR7d29ya2luZ0Rpcn0pLmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmlsZUV4aXN0cyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0cy5pc0ZpbGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMoe1xuICBwcm9qZWN0RGlyLFxuICBkaXN0RGlyLFxufToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB7IG1hbmlmZXN0UGF0aDogc3RyaW5nOyBkaWFnbm9zdGljc01hbmlmZXN0UGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBtYW5pZmVzdENhbmRpZGF0ZXMgPSBbXG4gICAgam9pbihwcm9qZWN0RGlyLCAnYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdzcmMvYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICBdO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBtYW5pZmVzdENhbmRpZGF0ZXMuZmluZChmaWxlRXhpc3RzKTtcblxuICBpZiAoIW1hbmlmZXN0UGF0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkRGlzdERpciA9IGlzQWJzb2x1dGUoZGlzdERpcilcbiAgICA/IGRpc3REaXJcbiAgICA6IGpvaW4ocHJvamVjdERpciwgZGlzdERpcik7XG4gIGNvbnN0IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoID0gam9pbihcbiAgICByZXNvbHZlZERpc3REaXIsXG4gICAgJ2RpYWdub3N0aWNzJyxcbiAgICAnd29ya2Zsb3dzLW1hbmlmZXN0Lmpzb24nXG4gICk7XG4gIHJldHVybiB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY29weUZpbGUobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgbWtkaXJTeW5jKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29weUZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlcldvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcHkobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IG1hcmtlciA9ICdfX3dvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcGllcyc7XG4gIGNvbnN0IGdsb2JhbFdpdGhNYXJrZXIgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFttYXJrZXJdPzogQXJyYXk8eyBwcm9qZWN0RGlyOiBzdHJpbmc7IGRpc3REaXI6IHN0cmluZyB9PjtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSkge1xuICAgIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSA9IFtdO1xuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29weU1ldGFkYXRhIG9mIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSB8fCBbXSkge1xuICAgICAgICBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhjb3B5TWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdLnB1c2gobWV0YWRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtmbG93KFxuICBuZXh0Q29uZmlnT3JGbjpcbiAgICB8IE5leHRDb25maWdcbiAgICB8ICgoXG4gICAgICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgICAgIGN0eDogeyBkZWZhdWx0Q29uZmlnOiBOZXh0Q29uZmlnIH1cbiAgICAgICkgPT4gUHJvbWlzZTxOZXh0Q29uZmlnPiksXG4gIHtcbiAgICB3b3JrZmxvd3MsXG4gIH06IHtcbiAgICB3b3JrZmxvd3M/OiB7XG4gICAgICBsb2NhbD86IHtcbiAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENvbnRyb2xzIGhvdyBzb3VyY2UgbWFwcyBhcmUgZW1pdHRlZCBmb3Igd29ya2Zsb3cgYnVuZGxlcy4gQWNjZXB0c1xuICAgICAgICogdGhlIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb246IGB0cnVlYC9gJ2lubGluZSdgXG4gICAgICAgKiAoZGVmYXVsdCksIGAnbGlua2VkJ2AsIGAnZXh0ZXJuYWwnYCwgYCdib3RoJ2AsIG9yIGBmYWxzZWAgdG8gb21pdFxuICAgICAgICogc291cmNlIG1hcHMuIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgXG4gICAgICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICAgICAqL1xuICAgICAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuICAgIH07XG4gIH0gPSB7fVxuKSB7XG4gIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGQgPSBlbnN1cmVXb3JrZmxvd1RhcmdldFdvcmxkRW52KCk7XG4gIGlmICh3b3JrZmxvd1RhcmdldFdvcmxkID09PSAnQHdvcmtmbG93L3dvcmxkLWxvY2FsJykge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX0xPQ0FMX0RBVEFfRElSID8/PSAnLm5leHQvd29ya2Zsb3ctZGF0YSc7XG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ29uZmlnKFxuICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICApIHtcbiAgICBpZiAoXG4gICAgICBwaGFzZSA9PT0gJ3BoYXNlLWRldmVsb3BtZW50LXNlcnZlcicgfHxcbiAgICAgIHBoYXNlID09PSAncGhhc2UtcHJvZHVjdGlvbi1idWlsZCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcHJld2FybVdvcmtmbG93U3djUGx1Z2luQ2FjaGUgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgJy4vc3djLXBsdWdpbi1jYWNoZS5qcydcbiAgICAgICk7XG4gICAgICAvLyBMb2FkZXIgd29ya2VycyBpbmhlcml0IHRoaXMgY3dkIGFuZCByZWFkIGZyb20gdGhlIHNhbWUgU1dDIGNhY2hlLlxuICAgICAgcHJld2FybVdvcmtmbG93U3djUGx1Z2luQ2FjaGUocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVyUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnLi9sb2FkZXInKTtcbiAgICBsZXQgbmV4dENvbmZpZzogTmV4dENvbmZpZztcblxuICAgIGlmICh0eXBlb2YgbmV4dENvbmZpZ09yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG5leHRDb25maWcgPSBhd2FpdCBuZXh0Q29uZmlnT3JGbihwaGFzZSwgY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENvbmZpZyA9IG5leHRDb25maWdPckZuO1xuICAgIH1cbiAgICAvLyBzaGFsbG93IGNsb25lIHRvIGF2b2lkIHJlYWQtb25seSBvbiB0b3AtbGV2ZWxcbiAgICBuZXh0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgbmV4dENvbmZpZyk7XG4gICAgY29uc3Qgd29ya2Zsb3dCYXNlUGF0aCA9IG5leHRDb25maWcuYmFzZVBhdGg7XG4gICAgc2V0V29ya2Zsb3dCYXNlUGF0aCh3b3JrZmxvd0Jhc2VQYXRoKTtcbiAgICBuZXh0Q29uZmlnLmVudiA9IHtcbiAgICAgIC4uLm5leHRDb25maWcuZW52LFxuICAgICAgV09SS0ZMT1dfVEFSR0VUX1dPUkxEOiB3b3JrZmxvd1RhcmdldFdvcmxkLFxuICAgIH07XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgd29ya2Zsb3dUYXJnZXRXb3JsZFdlYnBhY2tBbGlhcyA9IHJlc29sdmVXb3JrZmxvd1RhcmdldFdvcmxkQWxpYXMoe1xuICAgICAgd29ya2luZ0RpcixcbiAgICAgIHRhcmdldFdvcmxkOiB3b3JrZmxvd1RhcmdldFdvcmxkLFxuICAgIH0pO1xuICAgIGNvbnN0IHdvcmtmbG93VGFyZ2V0V29ybGRJc1BhdGggPVxuICAgICAgaXNXb3JrZmxvd1RhcmdldFdvcmxkUGF0aCh3b3JrZmxvd1RhcmdldFdvcmxkKTtcbiAgICBjb25zdCB3b3JrZmxvd1RhcmdldFdvcmxkVHJhbnNwaWxlUGFja2FnZXMgPVxuICAgICAgd29ya2Zsb3dUYXJnZXRXb3JsZCA9PT0gVkVSQ0VMX1dPUkxEX1BBQ0tBR0UgfHwgd29ya2Zsb3dUYXJnZXRXb3JsZElzUGF0aFxuICAgICAgICA/IFtdXG4gICAgICAgIDogW3dvcmtmbG93VGFyZ2V0V29ybGRdO1xuICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAuLi4obmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIHx8IFtdKSxcbiAgICAgICAgLy8gS2VlcCB0aGUgVmVyY2VsIHdvcmxkIGFuZCBpdHMgbmF0aXZlLXByb25lIGRlcGVuZGVuY2llcyBleHRlcm5hbCBzb1xuICAgICAgICAvLyBsb2NhbCBidWlsZHMgZG8gbm90IHRyeSB0byBwYXJzZSBAdmVyY2VsL3F1ZXVlJ3Mga2V5cmluZyBkZXBlbmRlbmN5XG4gICAgICAgIC8vIHRyZWUuXG4gICAgICAgIC4uLlZFUkNFTF9XT1JMRF9TRVJWRVJfRVhURVJOQUxfUEFDS0FHRVMsXG4gICAgICBdKSxcbiAgICBdO1xuICAgIG5leHRDb25maWcudHJhbnNwaWxlUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcudHJhbnNwaWxlUGFja2FnZXMgfHwgW10pLFxuICAgICAgICAuLi5XT1JLRkxPV19TRVJWRVJfVFJBTlNQSUxFX1BBQ0tBR0VTLFxuICAgICAgICAuLi53b3JrZmxvd1RhcmdldFdvcmxkVHJhbnNwaWxlUGFja2FnZXMsXG4gICAgICBdKSxcbiAgICBdO1xuICAgIGNvbnN0IGV4aXN0aW5nQ29tcGlsZXIgPSBuZXh0Q29uZmlnLmNvbXBpbGVyID8/IHt9O1xuICAgIGNvbnN0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSA9IChcbiAgICAgIGV4aXN0aW5nQ29tcGlsZXIgYXMge1xuICAgICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlPzogKG1ldGFkYXRhOiB7XG4gICAgICAgICAgcHJvamVjdERpcjogc3RyaW5nO1xuICAgICAgICAgIGRpc3REaXI6IHN0cmluZztcbiAgICAgICAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICAgIH1cbiAgICApLnJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU7XG5cbiAgICBjb25zdCBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IEFycmF5LmlzQXJyYXkoXG4gICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICApXG4gICAgICA/IG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlc1xuICAgICAgOiBbXTtcbiAgICBsZXQgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuXG4gICAgaWYgKGNvbmZpZ3VyZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlczogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYWNrYWdlTmFtZSBvZiBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcykge1xuICAgICAgICBpZiAoUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTLmhhcyhwYWNrYWdlTmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGV0ZWN0ZWQgPSBhd2FpdCBkZXRlY3RTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UoXG4gICAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIHByb2Nlc3MuY3dkKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChkZXRlY3RlZCkge1xuICAgICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLnB1c2goZGV0ZWN0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gQmVzdC1lZmZvcnQgb25seS4gTmV2ZXIgYmxvY2sgY29uZmlnIGdlbmVyYXRpb24uXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWNrYWdlcyA9IG5ldyBTZXQoXG4gICAgICAgICAgZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzLm1hcCgoZGV0ZWN0ZWQpID0+IGRldGVjdGVkLnBhY2thZ2VOYW1lKVxuICAgICAgICApO1xuICAgICAgICBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID1cbiAgICAgICAgICBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5maWx0ZXIoXG4gICAgICAgICAgICAocGFja2FnZU5hbWUpID0+ICFyZW1vdmVkUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKVxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXM7XG4gICAgICAgIHdhcm5BYm91dEF1dG9SZW1vdmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyhkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGlmIHR1cmJvcGFjayBpcyBiZWluZyB1c2VkXG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjaykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcykge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMgPSB7fTtcbiAgICB9XG4gICAgbmV4dENvbmZpZy50dXJib3BhY2sucmVzb2x2ZUFsaWFzID0ge1xuICAgICAgLi4uKChuZXh0Q29uZmlnLnR1cmJvcGFjay5yZXNvbHZlQWxpYXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IHt9KSxcbiAgICAgIFtXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFXTogd29ya2Zsb3dUYXJnZXRXb3JsZElzUGF0aFxuICAgICAgICA/IHdvcmtmbG93VGFyZ2V0V29ybGRXZWJwYWNrQWxpYXNcbiAgICAgICAgOiB3b3JrZmxvd1RhcmdldFdvcmxkLFxuICAgIH07XG4gICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzIGFzIGFueTtcbiAgICBjb25zdCBuZXh0VmVyc2lvbiA9IHJlc29sdmVOZXh0VmVyc2lvbih3b3JraW5nRGlyKTtcbiAgICBjb25zdCBjb25maWd1cmVkUHJvamVjdFJvb3QgPVxuICAgICAgbmV4dENvbmZpZy5vdXRwdXRGaWxlVHJhY2luZ1Jvb3QgPz8gbmV4dENvbmZpZy50dXJib3BhY2s/LnJvb3Q7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBjb25maWd1cmVkUHJvamVjdFJvb3RcbiAgICAgID8gcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdCh3b3JraW5nRGlyLCBjb25maWd1cmVkUHJvamVjdFJvb3QpXG4gICAgICA6IHJlc29sdmVQcm9qZWN0Um9vdCh3b3JraW5nRGlyKTtcbiAgICBjb25zdCBzdXBwb3J0c1R1cmJvQ29uZGl0aW9uID0gc2VtdmVyLmd0ZShuZXh0VmVyc2lvbiwgJ3YxNi4wLjAnKTtcblxuICAgIGNvbnN0IHNob3VsZFdhdGNoID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gICAgbGV0IHdvcmtmbG93QnVpbGRlclByb21pc2U6IFByb21pc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaXN0RGlyID0gbmV4dENvbmZpZy5kaXN0RGlyIHx8ICcubmV4dCc7XG5cbiAgICBuZXh0Q29uZmlnLmNvbXBpbGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdDb21waWxlcixcbiAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU6IGFzeW5jIChtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKSB7XG4gICAgICAgICAgYXdhaXQgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhKTtcbiAgICAgICAgcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFdvcmtmbG93QnVpbGRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSkge1xuICAgICAgICB3b3JrZmxvd0J1aWxkZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBOZXh0QnVpbGRlciA9IGF3YWl0IGdldE5leHRCdWlsZGVyKG5leHRWZXJzaW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE5leHRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdhdGNoOiBzaG91bGRXYXRjaCxcbiAgICAgICAgICAgIC8vIGdldElucHV0RmlsZXMgZmlsdGVycyB0aGUgcHJvamVjdCB0byBOZXh0LmpzIGVudHJ5cG9pbnRzXG4gICAgICAgICAgICBkaXJzOiBbJy4nXSxcbiAgICAgICAgICAgIHBhZ2VFeHRlbnNpb25zOiBuZXh0Q29uZmlnLnBhZ2VFeHRlbnNpb25zID8/IFtcbiAgICAgICAgICAgICAgJ3RzeCcsXG4gICAgICAgICAgICAgICd0cycsXG4gICAgICAgICAgICAgICdqc3gnLFxuICAgICAgICAgICAgICAnanMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogd29ya2luZ0RpcixcbiAgICAgICAgICAgIHdvcmtpbmdEaXIsXG4gICAgICAgICAgICBkaXN0RGlyLFxuICAgICAgICAgICAgYmFzZVBhdGg6IHdvcmtmbG93QmFzZVBhdGgsXG4gICAgICAgICAgICBkaWFnbm9zdGljc0RpcjogYCR7ZGlzdERpcn0vZGlhZ25vc3RpY3NgLFxuICAgICAgICAgICAgYnVpbGRUYXJnZXQ6ICduZXh0JyxcbiAgICAgICAgICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzdGVwc0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICB3ZWJob29rQnVuZGxlUGF0aDogJycsIC8vIG5vZGUgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHdvcmtmbG93cz8uc291cmNlbWFwLFxuICAgICAgICAgICAgZXh0ZXJuYWxQYWNrYWdlczogW1xuICAgICAgICAgICAgICAvLyBzZXJ2ZXItb25seSBhbmQgY2xpZW50LW9ubHkgYXJlIHBzZXVkby1wYWNrYWdlcyBoYW5kbGVkIGJ5IE5leHQuanNcbiAgICAgICAgICAgICAgLy8gZHVyaW5nIGl0cyBidWlsZCBwcm9jZXNzLiBXZSBtYXJrIHRoZW0gYXMgZXh0ZXJuYWwgdG8gcHJldmVudCBlc2J1aWxkXG4gICAgICAgICAgICAgIC8vIGZyb20gZmFpbGluZyB3aGVuIGJ1bmRsaW5nIGNvZGUgdGhhdCBpbXBvcnRzIHRoZW0uXG4gICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2dldHRpbmctc3RhcnRlZC9zZXJ2ZXItYW5kLWNsaWVudC1jb21wb25lbnRzXG4gICAgICAgICAgICAgICdzZXJ2ZXItb25seScsXG4gICAgICAgICAgICAgICdjbGllbnQtb25seScsXG4gICAgICAgICAgICAgIC4uLmVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgICAgJyoudHN4JyxcbiAgICAgICcqLnRzJyxcbiAgICAgICcqLmpzeCcsXG4gICAgICAnKi5qcycsXG4gICAgICAnKi5tanMnLFxuICAgICAgJyoubXRzJyxcbiAgICAgICcqLmNqcycsXG4gICAgICAnKi5jdHMnLFxuICAgIF0pIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLihzdXBwb3J0c1R1cmJvQ29uZGl0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFVzZSAnYWxsJyB0byBjb21iaW5lOiBtdXN0IG1hdGNoIGNvbnRlbnQgQU5EIG11c3QgTk9UIGJlIGluIGdlbmVyYXRlZCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgJ2FsbCcgY29uZGl0aW9ucyBmcm9tIHVzZXIgY29uZmlnXG4gICAgICAgICAgICAgICAgYWxsOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5jb25kaXRpb24/LmFsbCB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBmcm9tIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICB7IG5vdDogeyBwYXRoOiAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLyB9IH0sXG4gICAgICAgICAgICAgICAgICAvLyBNYXRjaCBmaWxlcyB3aXRoIHdvcmtmbG93IGRpcmVjdGl2ZXMgb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgIC8vIFVzZXMgYmFja3JlZmVyZW5jZXMgKFxcMiwgXFwzKSB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxAd29ya2Zsb3dcXC9jb3JlXFwvcnVudGltZVxcL3dvcmxkLXRhcmdldHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKSkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBsb2FkZXJzOiBbLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8ubG9hZGVycyB8fCBbXSksIGxvYWRlclBhdGhdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBmb3Igd2VicGFja1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFja01vZGlmeSA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAoLi4uYXJncykgPT4ge1xuICAgICAgbGV0IFt3ZWJwYWNrQ29uZmlnXSA9IGFyZ3M7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gZXhpc3RpbmdXZWJwYWNrTW9kaWZ5XG4gICAgICAgID8gKGV4aXN0aW5nV2VicGFja01vZGlmeSguLi5hcmdzKSA/PyB3ZWJwYWNrQ29uZmlnKVxuICAgICAgICA6IHdlYnBhY2tDb25maWc7XG5cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIGxvYWRlcnMgaW4gd2VicGFjayBhcHBseSBib3R0b20tPnVwIHNvIGVuc3VyZVxuICAgICAgLy8gb3VycyBjb21lcyBiZWZvcmUgdGhlIGRlZmF1bHQgc3djIHRyYW5zZm9ybVxuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC8uKlxcLihtanN8Y2pzfGN0c3x0c3x0c3h8anN8anN4KSQvLFxuICAgICAgICBsb2FkZXI6IGxvYWRlclBhdGgsXG4gICAgICB9KTtcblxuICAgICAgd2VicGFja0NvbmZpZy5yZXNvbHZlIHx8PSB7fTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQWxpYXMgPSB3ZWJwYWNrQ29uZmlnLnJlc29sdmUuYWxpYXM7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZ0FsaWFzKSkge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLnJlc29sdmUuYWxpYXMgPSBbXG4gICAgICAgICAgLi4uZXhpc3RpbmdBbGlhcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBXT1JLRkxPV19XT1JMRF9UQVJHRVRfTU9EVUxFLFxuICAgICAgICAgICAgYWxpYXM6IHdvcmtmbG93VGFyZ2V0V29ybGRXZWJwYWNrQWxpYXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcucmVzb2x2ZS5hbGlhcyA9IHtcbiAgICAgICAgICAuLi4oZXhpc3RpbmdBbGlhcyB8fCB7fSksXG4gICAgICAgICAgW1dPUktGTE9XX1dPUkxEX1RBUkdFVF9NT0RVTEVdOiB3b3JrZmxvd1RhcmdldFdvcmxkV2VicGFja0FsaWFzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2VicGFja0NvbmZpZztcbiAgICB9O1xuICAgIC8vIG9ubHkgcnVuIHRoaXMgaW4gdGhlIG1haW4gcHJvY2VzcyBzbyBpdCBvbmx5IHJ1bnMgb25jZVxuICAgIC8vIGFzIE5leHQuanMgdXNlcyBjaGlsZCBwcm9jZXNzZXMgZm9yIGRpZmZlcmVudCBidWlsZHNcbiAgICBpZiAoXG4gICAgICAhcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUICYmXG4gICAgICBwaGFzZSAhPT0gJ3BoYXNlLXByb2R1Y3Rpb24tc2VydmVyJ1xuICAgICkge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyID0gYXdhaXQgZ2V0V29ya2Zsb3dCdWlsZGVyKCk7XG5cbiAgICAgIGF3YWl0IHdvcmtmbG93QnVpbGRlci5idWlsZCgpO1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUID0gJzEnO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q29uZmlnO1xuICB9O1xufVxuIl19
package/dist/loader.d.ts CHANGED
@@ -1,9 +1,15 @@
1
+ export declare function injectWorkflowTargetWorldImport(source: string, buildersModule?: Pick<typeof import('@workflow/builders'), 'ensureWorkflowTargetWorldEnv' | 'WORKFLOW_WORLD_TARGET_MODULE'>): Promise<string>;
2
+ export declare function getLoaderSourceMapOptions(filename: string, sourceMap: any): {
3
+ inputSourceMap: any;
4
+ sourceMaps: boolean;
5
+ inlineSourcesContent: boolean;
6
+ };
1
7
  type WorkflowLoaderContext = {
2
8
  resourcePath: string;
3
9
  async?: () => (error: Error | null, content?: string, sourceMap?: any) => void;
4
10
  addDependency?: (dependency: string) => void;
5
11
  addBuildDependency?: (dependency: string) => void;
6
12
  };
7
- export default function workflowLoader(this: WorkflowLoaderContext, source: string | Buffer, sourceMap: any): string | Promise<string> | void;
13
+ export default function workflowLoader(this: WorkflowLoaderContext, source: string | Buffer, sourceMap: any): string | Promise<string> | undefined;
8
14
  export {};
9
15
  //# sourceMappingURL=loader.d.ts.map