@workflow/builders 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.
Files changed (134) hide show
  1. package/dist/apply-swc-transform.d.ts +7 -2
  2. package/dist/apply-swc-transform.d.ts.map +1 -1
  3. package/dist/apply-swc-transform.js +10 -4
  4. package/dist/base-builder-logging.test.d.ts +2 -0
  5. package/dist/base-builder-logging.test.d.ts.map +1 -0
  6. package/dist/base-builder-logging.test.js +99 -0
  7. package/dist/base-builder.d.ts +127 -13
  8. package/dist/base-builder.d.ts.map +1 -1
  9. package/dist/base-builder.js +812 -102
  10. package/dist/build-queue.js +1 -1
  11. package/dist/config-helpers.d.ts +4 -1
  12. package/dist/config-helpers.d.ts.map +1 -1
  13. package/dist/config-helpers.js +63 -1
  14. package/dist/config-helpers.test.d.ts +2 -0
  15. package/dist/config-helpers.test.d.ts.map +1 -0
  16. package/dist/config-helpers.test.js +17 -0
  17. package/dist/constants.d.ts +31 -5
  18. package/dist/constants.d.ts.map +1 -1
  19. package/dist/constants.js +71 -19
  20. package/dist/constants.test.d.ts +2 -0
  21. package/dist/constants.test.d.ts.map +1 -0
  22. package/dist/constants.test.js +40 -0
  23. package/dist/discover-entries-esbuild-plugin.d.ts +3 -1
  24. package/dist/discover-entries-esbuild-plugin.d.ts.map +1 -1
  25. package/dist/discover-entries-esbuild-plugin.js +24 -4
  26. package/dist/discover-entries-esbuild-plugin.test.js +1 -1
  27. package/dist/esbuild-tsconfig.js +1 -1
  28. package/dist/esbuild-tsconfig.test.js +1 -1
  29. package/dist/external-package-warning.test.d.ts +2 -0
  30. package/dist/external-package-warning.test.d.ts.map +1 -0
  31. package/dist/external-package-warning.test.js +219 -0
  32. package/dist/fast-discovery.d.ts +20 -0
  33. package/dist/fast-discovery.d.ts.map +1 -0
  34. package/dist/fast-discovery.js +774 -0
  35. package/dist/fast-discovery.test.d.ts +2 -0
  36. package/dist/fast-discovery.test.d.ts.map +1 -0
  37. package/dist/fast-discovery.test.js +336 -0
  38. package/dist/get-input-files.test.js +34 -2
  39. package/dist/index.d.ts +8 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +9 -4
  42. package/dist/module-specifier.d.ts +20 -2
  43. package/dist/module-specifier.d.ts.map +1 -1
  44. package/dist/module-specifier.js +92 -17
  45. package/dist/module-specifier.test.js +45 -3
  46. package/dist/node-compat-banner.d.ts +15 -0
  47. package/dist/node-compat-banner.d.ts.map +1 -0
  48. package/dist/node-compat-banner.js +15 -0
  49. package/dist/node-module-esbuild-plugin.d.ts.map +1 -1
  50. package/dist/node-module-esbuild-plugin.js +73 -23
  51. package/dist/node-module-esbuild-plugin.test.js +97 -1
  52. package/dist/optional-otel-api.d.ts +14 -0
  53. package/dist/optional-otel-api.d.ts.map +1 -0
  54. package/dist/optional-otel-api.js +14 -0
  55. package/dist/optional-pg-native-alias.d.ts +2 -0
  56. package/dist/optional-pg-native-alias.d.ts.map +1 -0
  57. package/dist/optional-pg-native-alias.js +3 -0
  58. package/dist/optional-pg-native.d.ts +3 -0
  59. package/dist/optional-pg-native.d.ts.map +1 -0
  60. package/dist/optional-pg-native.js +3 -0
  61. package/dist/optional-typescript-alias.d.ts +2 -0
  62. package/dist/optional-typescript-alias.d.ts.map +1 -0
  63. package/dist/optional-typescript-alias.js +3 -0
  64. package/dist/optional-typescript.d.ts +3 -0
  65. package/dist/optional-typescript.d.ts.map +1 -0
  66. package/dist/optional-typescript.js +9 -0
  67. package/dist/pseudo-package-esbuild-plugin.js +1 -1
  68. package/dist/pseudo-package-esbuild-plugin.test.js +1 -1
  69. package/dist/request-converter.js +1 -1
  70. package/dist/resolve-sourcemap.test.d.ts +2 -0
  71. package/dist/resolve-sourcemap.test.d.ts.map +1 -0
  72. package/dist/resolve-sourcemap.test.js +194 -0
  73. package/dist/serde-checker.js +1 -1
  74. package/dist/standalone.d.ts +0 -3
  75. package/dist/standalone.d.ts.map +1 -1
  76. package/dist/standalone.js +12 -41
  77. package/dist/step-source-registration.test.d.ts +2 -0
  78. package/dist/step-source-registration.test.d.ts.map +1 -0
  79. package/dist/step-source-registration.test.js +82 -0
  80. package/dist/swc-esbuild-plugin.d.ts +10 -0
  81. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  82. package/dist/swc-esbuild-plugin.js +116 -14
  83. package/dist/swc-esbuild-plugin.test.js +370 -6
  84. package/dist/transform-utils.d.ts.map +1 -1
  85. package/dist/transform-utils.js +45 -6
  86. package/dist/transform-utils.test.js +78 -6
  87. package/dist/types.d.ts +38 -2
  88. package/dist/types.d.ts.map +1 -1
  89. package/dist/types.js +1 -1
  90. package/dist/vercel-build-output-api.d.ts +0 -2
  91. package/dist/vercel-build-output-api.d.ts.map +1 -1
  92. package/dist/vercel-build-output-api.js +31 -59
  93. package/dist/workflow-alias.js +1 -1
  94. package/dist/workflow-alias.test.js +1 -1
  95. package/dist/workflows-extractor.js +8 -3
  96. package/dist/workflows-extractor.test.d.ts +2 -0
  97. package/dist/workflows-extractor.test.d.ts.map +1 -0
  98. package/dist/workflows-extractor.test.js +70 -0
  99. package/dist/world-target.d.ts +20 -0
  100. package/dist/world-target.d.ts.map +1 -0
  101. package/dist/world-target.js +74 -0
  102. package/dist/world-target.test.d.ts +2 -0
  103. package/dist/world-target.test.d.ts.map +1 -0
  104. package/dist/world-target.test.js +106 -0
  105. package/package.json +9 -7
  106. package/dist/apply-swc-transform.js.map +0 -1
  107. package/dist/base-builder.js.map +0 -1
  108. package/dist/build-queue.js.map +0 -1
  109. package/dist/config-helpers.js.map +0 -1
  110. package/dist/constants.js.map +0 -1
  111. package/dist/discover-entries-esbuild-plugin.js.map +0 -1
  112. package/dist/discover-entries-esbuild-plugin.test.js.map +0 -1
  113. package/dist/esbuild-tsconfig.js.map +0 -1
  114. package/dist/esbuild-tsconfig.test.js.map +0 -1
  115. package/dist/get-input-files.test.js.map +0 -1
  116. package/dist/index.js.map +0 -1
  117. package/dist/module-specifier.js.map +0 -1
  118. package/dist/module-specifier.test.js.map +0 -1
  119. package/dist/node-module-esbuild-plugin.js.map +0 -1
  120. package/dist/node-module-esbuild-plugin.test.js.map +0 -1
  121. package/dist/pseudo-package-esbuild-plugin.js.map +0 -1
  122. package/dist/pseudo-package-esbuild-plugin.test.js.map +0 -1
  123. package/dist/request-converter.js.map +0 -1
  124. package/dist/serde-checker.js.map +0 -1
  125. package/dist/standalone.js.map +0 -1
  126. package/dist/swc-esbuild-plugin.js.map +0 -1
  127. package/dist/swc-esbuild-plugin.test.js.map +0 -1
  128. package/dist/transform-utils.js.map +0 -1
  129. package/dist/transform-utils.test.js.map +0 -1
  130. package/dist/types.js.map +0 -1
  131. package/dist/vercel-build-output-api.js.map +0 -1
  132. package/dist/workflow-alias.js.map +0 -1
  133. package/dist/workflow-alias.test.js.map +0 -1
  134. package/dist/workflows-extractor.js.map +0 -1
@@ -15,20 +15,59 @@ export const workflowSerdeSymbolPattern = /Symbol\.for\s*\(\s*(['"])workflow-(?:
15
15
  // e.g.: static [WORKFLOW_SERIALIZE](instance) { ... }
16
16
  // This catches cases where the symbols are imported and used (even if bundled/re-exported)
17
17
  export const workflowSerdeComputedPropertyPattern = /\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\]/;
18
+ const templateLiteralPattern = /`(?:\\[\s\S]|[^`\\])*`/g;
19
+ const commentPattern = /\/\*[\s\S]*?\*\/|\/\/[^\r\n]*/g;
20
+ const directiveLinePattern = /^\s*(['"])(use workflow|use step)\1;?\s*$/;
21
+ const stringDirectiveLinePattern = /^\s*(['"])[^'"]+\1;?\s*$/;
18
22
  // Pattern to detect generated workflow route files that should be excluded
19
23
  // These files are generated by the build process and should not be re-processed
20
24
  export const generatedWorkflowPathPattern = /[/\\]\.well-known[/\\]workflow[/\\]/;
25
+ function hasDirective(source, directive) {
26
+ let previousMeaningfulLine;
27
+ for (const line of source.split(/\r?\n/)) {
28
+ const trimmedLine = line.trim();
29
+ if (trimmedLine === '') {
30
+ continue;
31
+ }
32
+ const directiveMatch = directiveLinePattern.exec(trimmedLine);
33
+ if (directiveMatch) {
34
+ if (directiveMatch[2] === directive &&
35
+ (previousMeaningfulLine === undefined ||
36
+ previousMeaningfulLine.endsWith('{') ||
37
+ stringDirectiveLinePattern.test(previousMeaningfulLine))) {
38
+ return true;
39
+ }
40
+ previousMeaningfulLine = trimmedLine;
41
+ continue;
42
+ }
43
+ previousMeaningfulLine = trimmedLine;
44
+ }
45
+ return false;
46
+ }
21
47
  /**
22
48
  * Detects workflow-related patterns in source code.
23
49
  * @param source - The source code to analyze
24
50
  * @returns Object with flags for each detected pattern
25
51
  */
26
52
  export function detectWorkflowPatterns(source) {
27
- const hasUseWorkflow = useWorkflowPattern.test(source);
28
- const hasUseStep = useStepPattern.test(source);
29
- const hasSerdeImport = workflowSerdeImportPattern.test(source);
30
- const hasSerdeSymbol = workflowSerdeSymbolPattern.test(source);
31
- const hasSerdeComputedProperty = workflowSerdeComputedPropertyPattern.test(source);
53
+ const hasDirectiveSubstring = source.includes('use workflow') || source.includes('use step');
54
+ const sourceForDirectives = hasDirectiveSubstring && (source.includes('`') || source.includes('/'))
55
+ ? source
56
+ .replace(templateLiteralPattern, (match) => match.replace(/[^\r\n]/g, ' '))
57
+ .replace(commentPattern, (match) => match.replace(/[^\r\n]/g, ' '))
58
+ : source;
59
+ const hasUseWorkflow = source.includes('use workflow') &&
60
+ hasDirective(sourceForDirectives, 'use workflow');
61
+ const hasUseStep = source.includes('use step') &&
62
+ hasDirective(sourceForDirectives, 'use step');
63
+ const hasSerdeImport = source.includes('@workflow/serde') &&
64
+ workflowSerdeImportPattern.test(source);
65
+ const hasSerdeSymbol = (source.includes('workflow-serialize') ||
66
+ source.includes('workflow-deserialize')) &&
67
+ workflowSerdeSymbolPattern.test(source);
68
+ const hasSerdeComputedProperty = (source.includes('WORKFLOW_SERIALIZE') ||
69
+ source.includes('WORKFLOW_DESERIALIZE')) &&
70
+ workflowSerdeComputedPropertyPattern.test(source);
32
71
  return {
33
72
  hasUseWorkflow,
34
73
  hasUseStep,
@@ -74,4 +113,4 @@ export function shouldTransformFile(filePath, patterns) {
74
113
  * and WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE computed property usage
75
114
  */
76
115
  export const turbopackContentPattern = /(use workflow|use step|from\s+(['"])@workflow\/serde\2|Symbol\.for\s*\(\s*(['"])workflow-(?:serialize|deserialize)\3\s*\)|\[\s*WORKFLOW_(?:SERIALIZE|DESERIALIZE)\s*\])/;
77
- //# sourceMappingURL=transform-utils.js.map
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zZm9ybS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCwwR0FBMEc7QUFDMUcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsaUNBQWlDLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLDZCQUE2QixDQUFDO0FBRTVELDBFQUEwRTtBQUMxRSw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUFFNUUsaUdBQWlHO0FBQ2pHLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FDckMsb0VBQW9FLENBQUM7QUFFdkUseUZBQXlGO0FBQ3pGLHNEQUFzRDtBQUN0RCwyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQy9DLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sc0JBQXNCLEdBQUcseUJBQXlCLENBQUM7QUFDekQsTUFBTSxjQUFjLEdBQUcsZ0NBQWdDLENBQUM7QUFDeEQsTUFBTSxvQkFBb0IsR0FBRywyQ0FBMkMsQ0FBQztBQUN6RSxNQUFNLDBCQUEwQixHQUFHLDBCQUEwQixDQUFDO0FBRTlELDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQ3ZDLHFDQUFxQyxDQUFDO0FBRXhDLFNBQVMsWUFBWSxDQUFDLE1BQWMsRUFBRSxTQUFzQztJQUMxRSxJQUFJLHNCQUEwQyxDQUFDO0lBRS9DLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QixTQUFTO1FBQ1gsQ0FBQztR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LElBQUksdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FDbEMseUtBQXlLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNoYXJlZCB1dGlsaXRpZXMgZm9yIGRldGVjdGluZyBmaWxlcyB0aGF0IG5lZWQgd29ya2Zsb3cgdHJhbnNmb3JtYXRpb24uXG4gKiBVc2VkIGJ5IGJ1aWxkZXJzLCByb2xsdXAgcGx1Z2luLCBOZXh0LmpzIGxvYWRlciwgYW5kIHZpdGUgcGx1Z2luLlxuICovXG5cbi8vIE1hdGNoZXM6ICd1c2Ugd29ya2Zsb3cnOyBcInVzZSB3b3JrZmxvd1wiOyAndXNlIHN0ZXAnOyBcInVzZSBzdGVwXCI7IGF0IGxpbmUgc3RhcnQgd2l0aCBvcHRpb25hbCB3aGl0ZXNwYWNlXG5leHBvcnQgY29uc3QgdXNlV29ya2Zsb3dQYXR0ZXJuID0gL15cXHMqKFsnXCJdKXVzZSB3b3JrZmxvd1xcMTs/XFxzKiQvbTtcbmV4cG9ydCBjb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcblxuLy8gTWF0Y2hlcyBpbXBvcnRzIGZyb20gJ0B3b3JrZmxvdy9zZXJkZScgKGZvciBjdXN0b20gY2xhc3Mgc2VyaWFsaXphdGlvbilcbi8vIGUuZy46IGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5leHBvcnQgY29uc3Qgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4gPSAvZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDEvO1xuXG4vLyBNYXRjaGVzIGRpcmVjdCB1c2FnZSBvZiBTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKSBvciBTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXG4vLyBlLmcuOiBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpXShpbnN0YW5jZSkgeyAuLi4gfVxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcblxuLy8gTWF0Y2hlcyB1c2FnZSBvZiBXT1JLRkxPV19TRVJJQUxJWkUgb3IgV09SS0ZMT1dfREVTRVJJQUxJWkUgYXMgY29tcHV0ZWQgcHJvcGVydHkgbmFtZXNcbi8vIGUuZy46IHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkgeyAuLi4gfVxuLy8gVGhpcyBjYXRjaGVzIGNhc2VzIHdoZXJlIHRoZSBzeW1ib2xzIGFyZSBpbXBvcnRlZCBhbmQgdXNlZCAoZXZlbiBpZiBidW5kbGVkL3JlLWV4cG9ydGVkKVxuZXhwb3J0IGNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCB0ZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuID0gL2AoPzpcXFxcW1xcc1xcU118W15gXFxcXF0pKmAvZztcbmNvbnN0IGNvbW1lbnRQYXR0ZXJuID0gL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvW15cXHJcXG5dKi9nO1xuY29uc3QgZGlyZWN0aXZlTGluZVBhdHRlcm4gPSAvXlxccyooWydcIl0pKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcClcXDE7P1xccyokLztcbmNvbnN0IHN0cmluZ0RpcmVjdGl2ZUxpbmVQYXR0ZXJuID0gL15cXHMqKFsnXCJdKVteJ1wiXStcXDE7P1xccyokLztcblxuLy8gUGF0dGVybiB0byBkZXRlY3QgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkXG4vLyBUaGVzZSBmaWxlcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBidWlsZCBwcm9jZXNzIGFuZCBzaG91bGQgbm90IGJlIHJlLXByb2Nlc3NlZFxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlZFdvcmtmbG93UGF0aFBhdHRlcm4gPVxuICAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLztcblxuZnVuY3Rpb24gaGFzRGlyZWN0aXZlKHNvdXJjZTogc3RyaW5nLCBkaXJlY3RpdmU6ICd1c2Ugd29ya2Zsb3cnIHwgJ3VzZSBzdGVwJykge1xuICBsZXQgcHJldmlvdXNNZWFuaW5nZnVsTGluZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBzb3VyY2Uuc3BsaXQoL1xccj9cXG4vKSkge1xuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgaWYgKHRyaW1tZWRMaW5lID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aXZlTWF0Y2ggPSBkaXJlY3RpdmVMaW5lUGF0dGVybi5leGVjKHRyaW1tZWRMaW5lKTtcbiAgICBpZiAoZGlyZWN0aXZlTWF0Y2gpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZGlyZWN0aXZlTWF0Y2hbMl0gPT09IGRpcmVjdGl2ZSAmJlxuICAgICAgICAocHJldmlvdXNNZWFuaW5nZnVsTGluZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgcHJldmlvdXNNZWFuaW5nZnVsTGluZS5lbmRzV2l0aCgneycpIHx8XG4gICAgICAgICAgc3RyaW5nRGlyZWN0aXZlTGluZVBhdHRlcm4udGVzdChwcmV2aW91c01lYW5pbmdmdWxMaW5lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHByZXZpb3VzTWVhbmluZ2Z1bExpbmUgPSB0cmltbWVkTGluZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHByZXZpb3VzTWVhbmluZ2Z1bExpbmUgPSB0cmltbWVkTGluZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdvcmtmbG93LXJlbGF0ZWQgcGF0dGVybnMgaW4gc291cmNlIGNvZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICAvKiogRmlsZSBjb250YWlucyAndXNlIHdvcmtmbG93JyBkaXJlY3RpdmUgKi9cbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIC8qKiBGaWxlIGNvbnRhaW5zICd1c2Ugc3RlcCcgZGlyZWN0aXZlICovXG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIC8qKiBGaWxlIGNvbnRhaW5zIEB3b3JrZmxvdy9zZXJkZSBpbXBvcnQgKi9cbiAgaGFzU2VyZGVJbXBvcnQ6IGJvb2xlYW47XG4gIC8qKiBGaWxlIGNvbnRhaW5zIFN5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpIG9yIFN5bWJvbC5mb3IoJ3dvcmtmbG93LWRlc2VyaWFsaXplJykgKi9cbiAgaGFzU2VyZGVTeW1ib2w6IGJvb2xlYW47XG4gIC8qKiBGaWxlIGNvbnRhaW5zIGFueSBkaXJlY3RpdmUgKCd1c2Ugd29ya2Zsb3cnIG9yICd1c2Ugc3RlcCcpICovXG4gIGhhc0RpcmVjdGl2ZTogYm9vbGVhbjtcbiAgLyoqIEZpbGUgY29udGFpbnMgYW55IHNlcmRlIHBhdHRlcm4gKGltcG9ydCBvciBTeW1ib2wuZm9yKSAqL1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdvcmtmbG93LXJlbGF0ZWQgcGF0dGVybnMgaW4gc291cmNlIGNvZGUuXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBjb2RlIHRvIGFuYWx5emVcbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIGZsYWdzIGZvciBlYWNoIGRldGVjdGVkIHBhdHRlcm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlOiBzdHJpbmcpOiBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGNvbnN0IGhhc0RpcmVjdGl2ZVN1YnN0cmluZyA9XG4gICAgc291cmNlLmluY2x1ZGVzKCd1c2Ugd29ya2Zsb3cnKSB8fCBzb3VyY2UuaW5jbHVkZXMoJ3VzZSBzdGVwJyk7XG4gIGNvbnN0IHNvdXJjZUZvckRpcmVjdGl2ZXMgPVxuICAgIGhhc0RpcmVjdGl2ZVN1YnN0cmluZyAmJiAoc291cmNlLmluY2x1ZGVzKCdgJykgfHwgc291cmNlLmluY2x1ZGVzKCcvJykpXG4gICAgICA/IHNvdXJjZVxuICAgICAgICAgIC5yZXBsYWNlKHRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4sIChtYXRjaCkgPT5cbiAgICAgICAgICAgIG1hdGNoLnJlcGxhY2UoL1teXFxyXFxuXS9nLCAnICcpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRQYXR0ZXJuLCAobWF0Y2gpID0+IG1hdGNoLnJlcGxhY2UoL1teXFxyXFxuXS9nLCAnICcpKVxuICAgICAgOiBzb3VyY2U7XG4gIGNvbnN0IGhhc1VzZVdvcmtmbG93ID1cbiAgICBzb3VyY2UuaW5jbHVkZXMoJ3VzZSB3b3JrZmxvdycpICYmXG4gICAgaGFzRGlyZWN0aXZlKHNvdXJjZUZvckRpcmVjdGl2ZXMsICd1c2Ugd29ya2Zsb3cnKTtcbiAgY29uc3QgaGFzVXNlU3RlcCA9XG4gICAgc291cmNlLmluY2x1ZGVzKCd1c2Ugc3RlcCcpICYmXG4gICAgaGFzRGlyZWN0aXZlKHNvdXJjZUZvckRpcmVjdGl2ZXMsICd1c2Ugc3RlcCcpO1xuICBjb25zdCBoYXNTZXJkZUltcG9ydCA9XG4gICAgc291cmNlLmluY2x1ZGVzKCdAd29ya2Zsb3cvc2VyZGUnKSAmJlxuICAgIHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVTeW1ib2wgPVxuICAgIChzb3VyY2UuaW5jbHVkZXMoJ3dvcmtmbG93LXNlcmlhbGl6ZScpIHx8XG4gICAgICBzb3VyY2UuaW5jbHVkZXMoJ3dvcmtmbG93LWRlc2VyaWFsaXplJykpICYmXG4gICAgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUNvbXB1dGVkUHJvcGVydHkgPVxuICAgIChzb3VyY2UuaW5jbHVkZXMoJ1dPUktGTE9XX1NFUklBTElaRScpIHx8XG4gICAgICBzb3VyY2UuaW5jbHVkZXMoJ1dPUktGTE9XX0RFU0VSSUFMSVpFJykpICYmXG4gICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKTtcblxuICByZXR1cm4ge1xuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGVJbXBvcnQsXG4gICAgaGFzU2VyZGVTeW1ib2wsXG4gICAgaGFzRGlyZWN0aXZlOiBoYXNVc2VXb3JrZmxvdyB8fCBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlOiBoYXNTZXJkZUltcG9ydCB8fCBoYXNTZXJkZVN5bWJvbCB8fCBoYXNTZXJkZUNvbXB1dGVkUHJvcGVydHksXG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhIGZpbGUgcGF0aCBpcyBhIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlLlxuICogQHBhcmFtIGZpbGVQYXRoIC0gVGhlIGZpbGUgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBpcyBhIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkV29ya2Zsb3dQYXRoUGF0dGVybi50ZXN0KGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZmlsZSBzaG91bGQgYmUgdHJhbnNmb3JtZWQgYmFzZWQgb24gaXRzIHBhdGggYW5kIGNvbnRlbnQgcGF0dGVybnMuXG4gKlxuICogTG9naWM6XG4gKiAtIEdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBhcmUgbmV2ZXIgdHJhbnNmb3JtZWRcbiAqIC0gRmlsZXMgd2l0aCBkaXJlY3RpdmVzICgndXNlIHdvcmtmbG93JyBvciAndXNlIHN0ZXAnKSBhcmUgYWx3YXlzIHRyYW5zZm9ybWVkXG4gKiAtIEZpbGVzIHdpdGggc2VyZGUgcGF0dGVybnMgYXJlIGFsd2F5cyB0cmFuc2Zvcm1lZDsgdGhlIFNXQyBwbHVnaW4gcGVyZm9ybXNcbiAqICAgQVNULWxldmVsIGV4dHJhY3Rpb24vZmlsdGVyaW5nIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYWN0dWFsbHkgZGVmaW5lXG4gKiAgIHNlcmRlIGNsYXNzZXNcbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgZmlsZSBwYXRoIHRvIGNoZWNrXG4gKiBAcGFyYW0gcGF0dGVybnMgLSBUaGUgZGV0ZWN0ZWQgcGF0dGVybnMgZnJvbSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKClcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIHRyYW5zZm9ybWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRUcmFuc2Zvcm1GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwYXR0ZXJuczogV29ya2Zsb3dQYXR0ZXJuTWF0Y2hcbik6IGJvb2xlYW4ge1xuICAvLyBOZXZlciB0cmFuc2Zvcm0gZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzXG4gIGlmIChpc0dlbmVyYXRlZFdvcmtmbG93RmlsZShmaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcGF0dGVybnMuaGFzRGlyZWN0aXZlIHx8IHBhdHRlcm5zLmhhc1NlcmRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIHJlZ2V4IHBhdHRlcm4gZm9yIHR1cmJvcGFjayBjb250ZW50IG1hdGNoaW5nLlxuICogVXNlcyBiYWNrcmVmZXJlbmNlcyB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXMuXG4gKiBNYXRjaGVzOiAndXNlIHdvcmtmbG93JywgJ3VzZSBzdGVwJywgQHdvcmtmbG93L3NlcmRlIGltcG9ydHMsIFN5bWJvbC5mb3Igc2VyaWFsaXphdGlvbiBzeW1ib2xzLFxuICogYW5kIFdPUktGTE9XX1NFUklBTElaRS9XT1JLRkxPV19ERVNFUklBTElaRSBjb21wdXRlZCBwcm9wZXJ0eSB1c2FnZVxuICovXG5leHBvcnQgY29uc3QgdHVyYm9wYWNrQ29udGVudFBhdHRlcm4gPVxuICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKXxcXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0pLztcbiJdfQ==
@@ -261,11 +261,7 @@ describe('transform-utils patterns', () => {
261
261
  expect(result.hasUseStep).toBe(true);
262
262
  expect(result.hasSerde).toBe(true);
263
263
  });
264
- it('regexp detection matches directives inside template literals (false positive)', () => {
265
- // detectWorkflowPatterns uses regexp and will match directive-like
266
- // strings inside template literals. The discover-entries plugin
267
- // handles this by using the SWC plugin manifest (AST-level) for
268
- // directive discovery instead of relying on regexp alone.
264
+ it('does not detect directives inside template literals', () => {
269
265
  const source = `'use client';
270
266
  const CODE_SNIPPET = \`import { sleep } from "workflow";
271
267
 
@@ -275,6 +271,82 @@ export async function handleUserSignup(email: string) {
275
271
  }
276
272
  \`;
277
273
  export default function Page() { return null; }
274
+ `;
275
+ const result = detectWorkflowPatterns(source);
276
+ expect(result.hasUseWorkflow).toBe(false);
277
+ expect(result.hasDirective).toBe(false);
278
+ });
279
+ it('does not detect single-quoted step directives inside template literals', () => {
280
+ const source = `const CODE_SNIPPET = \`
281
+ export async function doThing() {
282
+ 'use step';
283
+ }
284
+ \`;
285
+ `;
286
+ const result = detectWorkflowPatterns(source);
287
+ expect(result.hasUseStep).toBe(false);
288
+ expect(result.hasDirective).toBe(false);
289
+ });
290
+ it('does not detect directives inside comments', () => {
291
+ const source = `/*
292
+ export async function run() {
293
+ "use workflow";
294
+ }
295
+ */
296
+
297
+ // 'use step';
298
+ export const value = 1;
299
+ `;
300
+ const result = detectWorkflowPatterns(source);
301
+ expect(result.hasUseWorkflow).toBe(false);
302
+ expect(result.hasUseStep).toBe(false);
303
+ expect(result.hasDirective).toBe(false);
304
+ });
305
+ it('does not detect directive-looking strings inside multiline calls', () => {
306
+ const source = `console.log(
307
+ "use step"
308
+ );
309
+
310
+ console.log(
311
+ 'use workflow'
312
+ );
313
+ `;
314
+ const result = detectWorkflowPatterns(source);
315
+ expect(result.hasUseWorkflow).toBe(false);
316
+ expect(result.hasUseStep).toBe(false);
317
+ expect(result.hasDirective).toBe(false);
318
+ });
319
+ it('does not detect quoted directive-looking strings inside multiline calls', () => {
320
+ const source = `console.log(
321
+ '"use step"'
322
+ );
323
+
324
+ console.log(
325
+ "'use step'"
326
+ );
327
+ `;
328
+ const result = detectWorkflowPatterns(source);
329
+ expect(result.hasUseStep).toBe(false);
330
+ expect(result.hasDirective).toBe(false);
331
+ });
332
+ it('still detects real directives after template literals', () => {
333
+ const source = `const CODE_SNIPPET = \`
334
+ "use workflow";
335
+ \`;
336
+
337
+ export async function run() {
338
+ "use workflow";
339
+ }
340
+ `;
341
+ const result = detectWorkflowPatterns(source);
342
+ expect(result.hasUseWorkflow).toBe(true);
343
+ expect(result.hasDirective).toBe(true);
344
+ });
345
+ it('still detects directives after other directive prologue entries', () => {
346
+ const source = `export async function run() {
347
+ "use strict";
348
+ "use workflow";
349
+ }
278
350
  `;
279
351
  const result = detectWorkflowPatterns(source);
280
352
  expect(result.hasUseWorkflow).toBe(true);
@@ -319,4 +391,4 @@ export default function Page() { return null; }
319
391
  });
320
392
  });
321
393
  });
322
- //# sourceMappingURL=transform-utils.test.js.map
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLXV0aWxzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsb0NBQW9DLEVBQ3BDLDBCQUEwQixFQUMxQiwwQkFBMEIsR0FDM0IsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLENBQUMsa0JB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O2dCQUNwQixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxNQUFNLENBQ0osbUJBQW1CLENBQ2pCLHdEQUF3RCxFQUN4RCxFQUFFLEdBQUcsVUFBVSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUN4RCxDQUNGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsR0FBRyxFQUFFO1lBQ3ZFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQge1xuICBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zLFxuICBzaG91bGRUcmFuc2Zvcm1GaWxlLFxuICB1c2VTdGVwUGF0dGVybixcbiAgdXNlV29ya2Zsb3dQYXR0ZXJuLFxuICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4sXG4gIHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLFxuICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybixcbn0gZnJvbSAnLi90cmFuc2Zvcm0tdXRpbHMuanMnO1xuXG5kZXNjcmliZSgndHJhbnNmb3JtLXV0aWxzIHBhdHRlcm5zJywgKCkgPT4ge1xuICBkZXNjcmliZSgndXNlV29ya2Zsb3dQYXR0ZXJuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbWF0Y2ggXCJ1c2Ugd29ya2Zsb3dcIiB3aXRoIHNpbmdsZSBxdW90ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodXNlV29ya2Zsb3dQYXR0ZXJuLnRlc3QoYCd1c2Ugd29ya2Zsb3cnO2ApKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KGAndXNlIHdvcmtmbG93J2ApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBcInVzZSB3b3JrZmxvd1wiIHdpdGggZG91YmxlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgXCJ1c2Ugd29ya2Zsb3dcIjtgKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgXCJ1c2Ugd29ya2Zsb3dcImApKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgICAndXNlIHdvcmtmbG93JztgKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgXFx0XCJ1c2Ugd29ya2Zsb3dcIjtgKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1hdGNoIGlubGluZSB1c2FnZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChgY29uc3QgeCA9ICd1c2Ugd29ya2Zsb3cnO2ApKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VzZVN0ZXBQYXR0ZXJuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbWF0Y2ggXCJ1c2Ugc3RlcFwiIHdpdGggc2luZ2xlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VTdGVwUGF0dGVybi50ZXN0KGAndXNlIHN0ZXAnO2ApKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHVzZVN0ZXBQYXR0ZXJuLnRlc3QoYCd1c2Ugc3RlcCdgKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggXCJ1c2Ugc3RlcFwiIHdpdGggZG91YmxlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1c2VTdGVwUGF0dGVybi50ZXN0KGBcInVzZSBzdGVwXCI7YCkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QodXNlU3RlcFBhdHRlcm4udGVzdChgXCJ1c2Ugc3RlcFwiYCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIG1hdGNoIGltcG9ydCBmcm9tIEB3b3JrZmxvdy9zZXJkZSB3aXRoIHNpbmdsZSBxdW90ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaW1wb3J0IGZyb20gQHdvcmtmbG93L3NlcmRlIHdpdGggZG91YmxlIHF1b3RlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUgfSBmcm9tIFwiQHdvcmtmbG93L3NlcmRlXCI7YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGltcG9ydCB3aXRoIG11bHRpcGxlIHNwZWNpZmllcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgaW1wb3J0IHsgV09SS0ZMT1dfU0VSSUFMSVpFLCBXT1JLRkxPV19ERVNFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGltcG9ydCB3aXRoIHR5cGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgaW1wb3J0IHR5cGUgeyBTZXJpYWxpemF0aW9uU3ltYm9sIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1hdGNoIHNpbWlsYXIgYnV0IGRpZmZlcmVudCBwYWNrYWdlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChgaW1wb3J0IHsgeCB9IGZyb20gJ0BvdGhlci9zZXJkZSc7YClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3QoXG4gICAgICAgICAgYGltcG9ydCB7IHggfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUtdXRpbHMnO2BcbiAgICAgICAgKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbWF0Y2ggU3ltYm9sLmZvciB3aXRoIHdvcmtmbG93LXNlcmlhbGl6ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpXShpbnN0YW5jZSkge31gO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggU3ltYm9sLmZvciB3aXRoIHdvcmtmbG93LWRlc2VyaWFsaXplJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctZGVzZXJpYWxpemUnKV0oZGF0YSkge31gO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggd2l0aCBkb3VibGUgcXVvdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYHN0YXRpYyBbU3ltYm9sLmZvcihcIndvcmtmbG93LXNlcmlhbGl6ZVwiKV0oaW5zdGFuY2UpIHt9YDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIHdpdGggd2hpdGVzcGFjZSB2YXJpYXRpb25zJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KGBTeW1ib2wuZm9yKCAnd29ya2Zsb3ctc2VyaWFsaXplJyApYClcbiAgICAgICkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChgU3ltYm9sLmZvcignd29ya2Zsb3ctZGVzZXJpYWxpemUnKWApXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGluIGEgZnVsbCBjbGFzcyBkZWZpbml0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYFxuICAgICAgICBleHBvcnQgY2xhc3MgUG9pbnQge1xuICAgICAgICAgIGNvbnN0cnVjdG9yKHgsIHkpIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB4OiBpbnN0YW5jZS54LCB5OiBpbnN0YW5jZS55IH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXShkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KGRhdGEueCwgZGF0YS55KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggb3RoZXIgU3ltYm9sLmZvciB1c2FnZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChgU3ltYm9sLmZvcignb3RoZXItc3ltYm9sJylgKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChgU3ltYm9sLmZvcignd29ya2Zsb3ctc29tZXRoaW5nLWVsc2UnKWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbWF0Y2ggbm9uLVN5bWJvbC5mb3IgcGF0dGVybnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChgJ3dvcmtmbG93LXNlcmlhbGl6ZSdgKSkudG9CZShcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChgd29ya2Zsb3ctZGVzZXJpYWxpemVgKSkudG9CZShcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb21iaW5lZCBkZXRlY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgZmlsZSB1c2luZyBpbXBvcnRlZCBzeW1ib2xzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYFxuICAgICAgICBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUsIFdPUktGTE9XX0RFU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcblxuICAgICAgICBleHBvcnQgY2xhc3MgTXlDbGFzcyB7XG4gICAgICAgICAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogaW5zdGFuY2UudmFsdWUgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE15Q2xhc3MoZGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICAgIC8vIE5vdGU6IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuIHdvbid0IG1hdGNoIGhlcmUgYmVjYXVzZSB0aGUgc3ltYm9sc1xuICAgICAgLy8gYXJlIHJlZmVyZW5jZWQgYnkgaWRlbnRpZmllciwgbm90IGRpcmVjdGx5IGFzIFN5bWJvbC5mb3IoKVxuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBmaWxlIHVzaW5nIGRpcmVjdCBTeW1ib2wuZm9yJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYFxuICAgICAgICBleHBvcnQgY2xhc3MgUG9pbnQge1xuICAgICAgICAgIHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB4OiBpbnN0YW5jZS54IH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1kZXNlcmlhbGl6ZScpXShkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KGRhdGEueCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgZmlsZSB3aXRoIGJvdGggcGF0dGVybnMnLCAoKSA9PiB7XG4gICAgICAvLyBUaGlzIHdvdWxkIGJlIHVudXN1YWwgYnV0IHZhbGlkXG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5cbiAgICAgICAgZXhwb3J0IGNsYXNzIFBvaW50IHtcbiAgICAgICAgICAvLyBVc2luZyBpbXBvcnRlZCBzeW1ib2xcbiAgICAgICAgICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHg6IGluc3RhbmNlLnggfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVc2luZyBkaXJlY3QgU3ltYm9sLmZvclxuICAgICAgICAgIHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctZGVzZXJpYWxpemUnKV0oZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludChkYXRhLngpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGV4cGVjdCh3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgbWF0Y2ggW1dPUktGTE9XX1NFUklBTElaRV0gY29tcHV0ZWQgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlKSB7fWA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggW1dPUktGTE9XX0RFU0VSSUFMSVpFXSBjb21wdXRlZCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhKSB7fWA7XG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggd2l0aCB3aGl0ZXNwYWNlIGluc2lkZSBicmFja2V0cycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3QoYFsgV09SS0ZMT1dfU0VSSUFMSVpFIF1gKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgWyAgV09SS0ZMT1dfREVTRVJJQUxJWkUgIF1gKVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBpbiBidW5kbGVkIGNvZGUgd2hlcmUgc3ltYm9scyBhcmUgaW1wb3J0ZWQgZnJvbSBjaHVua3MnLCAoKSA9PiB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBwYXR0ZXJuIHNlZW4gaW4gYnVuZGxlZCBwYWNrYWdlcyBsaWtlIGp1c3QtYmFzaFxuICAgICAgY29uc3Qgc291cmNlID0gYFxuICAgICAgICBpbXBvcnQge1xuICAgICAgICAgIFdPUktGTE9XX0RFU0VSSUFMSVpFLFxuICAgICAgICAgIFdPUktGTE9XX1NFUklBTElaRVxuICAgICAgICB9IGZyb20gXCIuL2NodW5rcy9jaHVuay00NTMzMjNRWS5qc1wiO1xuXG4gICAgICAgIHZhciBCYXNoID0gY2xhc3MgX0Jhc2gge1xuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZnM6IGluc3RhbmNlLmZzIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKHNlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKF9CYXNoLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgICBmczogeyB2YWx1ZTogc2VyaWFsaXplZC5mcyB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICBgO1xuICAgICAgZXhwZWN0KHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KHNvdXJjZSkpLnRvQmUodHJ1ZSk7XG4gICAgICAvLyBOb3RlOiBpbXBvcnQgcGF0dGVybiB3b24ndCBtYXRjaCBiZWNhdXNlIGl0J3MgZnJvbSBhIGNodW5rLCBub3QgQHdvcmtmbG93L3NlcmRlXG4gICAgICBleHBlY3Qod29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1hdGNoIHBhcnRpYWwgbmFtZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybi50ZXN0KGBbV09SS0ZMT1dfU0VSSUFMSVpFX0VYVFJBXWApXG4gICAgICApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KFxuICAgICAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChgW01ZX1dPUktGTE9XX1NFUklBTElaRV1gKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IG1hdGNoIHN0cmluZyBsaXRlcmFscycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3QoYFsnV09SS0ZMT1dfU0VSSUFMSVpFJ11gKVxuICAgICAgKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3QoYFtcIldPUktGTE9XX0RFU0VSSUFMSVpFXCJdYClcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZXRlY3RXb3JrZmxvd1BhdHRlcm5zJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZGV0ZWN0IGhhc1NlcmRlIGZvciBAd29ya2Zsb3cvc2VyZGUgaW1wb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7YDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzU2VyZGUpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1NlcmRlSW1wb3J0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZXRlY3QgaGFzU2VyZGUgZm9yIFN5bWJvbC5mb3IgcGF0dGVybicsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LXNlcmlhbGl6ZScpXShpbnN0YW5jZSkge31gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzU2VyZGVTeW1ib2wpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBoYXNTZXJkZSBmb3IgY29tcHV0ZWQgcHJvcGVydHkgcGF0dGVybicsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2UpIHt9YDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzU2VyZGUpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBoYXNTZXJkZSBmb3IgYnVuZGxlZCB0aGlyZC1wYXJ0eSBwYWNrYWdlcycsICgpID0+IHtcbiAgICAgIC8vIFNpbXVsYXRlcyBidW5kbGVkIG91dHB1dCBmcm9tIHBhY2thZ2VzIGxpa2UganVzdC1iYXNoXG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGltcG9ydCB7XG4gICAgICAgICAgV09SS0ZMT1dfREVTRVJJQUxJWkUsXG4gICAgICAgICAgV09SS0ZMT1dfU0VSSUFMSVpFXG4gICAgICAgIH0gZnJvbSBcIi4vY2h1bmtzL2NodW5rLUFCQzEyMy5qc1wiO1xuXG4gICAgICAgIHZhciBNeUNsYXNzID0gY2xhc3Mge1xuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogaW5zdGFuY2UuZGF0YSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShzZXJpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE15Q2xhc3Moc2VyaWFsaXplZC5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICBgO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGRldGVjdCBoYXNTZXJkZSBmb3IgdW5yZWxhdGVkIGNvZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgIGV4cG9ydCBjbGFzcyBSZWd1bGFyQ2xhc3Mge1xuICAgICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRldGVjdCBib3RoIGRpcmVjdGl2ZSBhbmQgc2VyZGUgcGF0dGVybnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgXG4gICAgICAgICd1c2Ugc3RlcCc7XG4gICAgICAgIGltcG9ydCB7IFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG4gICAgICAgIFxuICAgICAgICBleHBvcnQgY2xhc3MgUG9pbnQge1xuICAgICAgICAgIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgeDogaW5zdGFuY2UueCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRGlyZWN0aXZlKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VTdGVwKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNTZXJkZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBkZXRlY3QgZGlyZWN0aXZlcyBpbnNpZGUgdGVtcGxhdGUgbGl0ZXJhbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgJ3VzZSBjbGllbnQnO1xuY29uc3QgQ09ERV9TTklQUEVUID0gXFxgaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwid29ya2Zsb3dcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVVzZXJTaWdudXAoZW1haWw6IHN0cmluZykge1xuICBcInVzZSB3b3JrZmxvd1wiO1xuICBjb25zdCB1c2VyID0gYXdhaXQgY3JlYXRlVXNlcihlbWFpbCk7XG59XG5cXGA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWdlKCkgeyByZXR1cm4gbnVsbDsgfVxuYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlV29ya2Zsb3cpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGRldGVjdCBzaW5nbGUtcXVvdGVkIHN0ZXAgZGlyZWN0aXZlcyBpbnNpZGUgdGVtcGxhdGUgbGl0ZXJhbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgY29uc3QgQ09ERV9TTklQUEVUID0gXFxgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9UaGluZygpIHtcbiAgJ3VzZSBzdGVwJztcbn1cblxcYDtcbmA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVN0ZXApLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGRldGVjdCBkaXJlY3RpdmVzIGluc2lkZSBjb21tZW50cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGAvKlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcbn1cbiovXG5cbi8vICd1c2Ugc3RlcCc7XG5leHBvcnQgY29uc3QgdmFsdWUgPSAxO1xuYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlV29ya2Zsb3cpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VTdGVwKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRGlyZWN0aXZlKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBkZXRlY3QgZGlyZWN0aXZlLWxvb2tpbmcgc3RyaW5ncyBpbnNpZGUgbXVsdGlsaW5lIGNhbGxzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYGNvbnNvbGUubG9nKFxuICBcInVzZSBzdGVwXCJcbik7XG5cbmNvbnNvbGUubG9nKFxuICAndXNlIHdvcmtmbG93J1xuKTtcbmA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVdvcmtmbG93KS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlU3RlcCkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc0RpcmVjdGl2ZSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgZGV0ZWN0IHF1b3RlZCBkaXJlY3RpdmUtbG9va2luZyBzdHJpbmdzIGluc2lkZSBtdWx0aWxpbmUgY2FsbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBgY29uc29sZS5sb2coXG4gICdcInVzZSBzdGVwXCInXG4pO1xuXG5jb25zb2xlLmxvZyhcbiAgXCIndXNlIHN0ZXAnXCJcbik7XG5gO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNVc2VTdGVwKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzRGlyZWN0aXZlKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGlsbCBkZXRlY3RzIHJlYWwgZGlyZWN0aXZlcyBhZnRlciB0ZW1wbGF0ZSBsaXRlcmFscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IGBjb25zdCBDT0RFX1NOSVBQRVQgPSBcXGBcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcblxcYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bigpIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcbn1cbmA7XG4gICAgICBjb25zdCByZXN1bHQgPSBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc1VzZVdvcmtmbG93KS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdC5oYXNEaXJlY3RpdmUpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3RpbGwgZGV0ZWN0cyBkaXJlY3RpdmVzIGFmdGVyIG90aGVyIGRpcmVjdGl2ZSBwcm9sb2d1ZSBlbnRyaWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW4oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICBcInVzZSB3b3JrZmxvd1wiO1xufVxuYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuaGFzVXNlV29ya2Zsb3cpLnRvQmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0Lmhhc0RpcmVjdGl2ZSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZFRyYW5zZm9ybUZpbGUnLCAoKSA9PiB7XG4gICAgY29uc3Qgbm9QYXR0ZXJucyA9IHtcbiAgICAgIGhhc1VzZVdvcmtmbG93OiBmYWxzZSxcbiAgICAgIGhhc1VzZVN0ZXA6IGZhbHNlLFxuICAgICAgaGFzU2VyZGVJbXBvcnQ6IGZhbHNlLFxuICAgICAgaGFzU2VyZGVTeW1ib2w6IGZhbHNlLFxuICAgICAgaGFzRGlyZWN0aXZlOiBmYWxzZSxcbiAgICAgIGhhc1NlcmRlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgaXQoJ2V4Y2x1ZGVzIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBldmVuIHdpdGggZGlyZWN0aXZlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgc2hvdWxkVHJhbnNmb3JtRmlsZSgnL2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9yb3V0ZS50cycsIHtcbiAgICAgICAgICAuLi5ub1BhdHRlcm5zLFxuICAgICAgICAgIGhhc1VzZVdvcmtmbG93OiB0cnVlLFxuICAgICAgICAgIGhhc0RpcmVjdGl2ZTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgndHJhbnNmb3JtcyBmaWxlcyB3aXRoIGRpcmVjdGl2ZSBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgc2hvdWxkVHJhbnNmb3JtRmlsZSgnL2FwcC93b3JrZmxvd3MvbXktd29ya2Zsb3cudHMnLCB7XG4gICAgICAgICAgLi4ubm9QYXR0ZXJucyxcbiAgICAgICAgICBoYXNVc2VXb3JrZmxvdzogdHJ1ZSxcbiAgICAgICAgICBoYXNEaXJlY3RpdmU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgndHJhbnNmb3JtcyBmaWxlcyB3aXRoIHNlcmRlIHBhdHRlcm5zJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICBzaG91bGRUcmFuc2Zvcm1GaWxlKCcvYXBwL2xpYi9teS1jbGFzcy50cycsIHtcbiAgICAgICAgICAuLi5ub1BhdHRlcm5zLFxuICAgICAgICAgIGhhc1NlcmRlSW1wb3J0OiB0cnVlLFxuICAgICAgICAgIGhhc1NlcmRlOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RyYW5zZm9ybXMgU0RLIGZpbGVzIHdpdGggc2VyZGUgcGF0dGVybnMgKG5vIGxvbmdlciBleGNsdWRlZCknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHNob3VsZFRyYW5zZm9ybUZpbGUoXG4gICAgICAgICAgJy9hcHAvbm9kZV9tb2R1bGVzL0B3b3JrZmxvdy9jb3JlL2Rpc3Qvc2VyaWFsaXphdGlvbi5qcycsXG4gICAgICAgICAgeyAuLi5ub1BhdHRlcm5zLCBoYXNTZXJkZVN5bWJvbDogdHJ1ZSwgaGFzU2VyZGU6IHRydWUgfVxuICAgICAgICApXG4gICAgICApLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdHJhbnNmb3JtIGZpbGVzIHdpdGhvdXQgZGlyZWN0aXZlcyBvciBzZXJkZSBwYXR0ZXJucycsICgpID0+IHtcbiAgICAgIGV4cGVjdChzaG91bGRUcmFuc2Zvcm1GaWxlKCcvYXBwL2xpYi91dGlscy50cycsIG5vUGF0dGVybnMpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
package/dist/types.d.ts CHANGED
@@ -1,5 +1,16 @@
1
1
  export declare const validBuildTargets: readonly ["standalone", "vercel-build-output-api", "next", "nest", "sveltekit", "astro"];
2
2
  export type BuildTarget = (typeof validBuildTargets)[number];
3
+ /**
4
+ * Source map emission mode for generated workflow bundles. Matches esbuild's
5
+ * `sourcemap` option vocabulary:
6
+ *
7
+ * - `true` / `'linked'`: write a separate `.map` file and add a `sourceMappingURL` comment
8
+ * - `'inline'`: emit a base64-encoded source map at the end of the bundle
9
+ * - `'external'`: write a separate `.map` file without the comment
10
+ * - `'both'`: emit both inline and external source maps
11
+ * - `false`: omit source maps entirely
12
+ */
13
+ export type SourcemapMode = boolean | 'inline' | 'linked' | 'external' | 'both';
3
14
  /**
4
15
  * Common configuration options shared across all builder types.
5
16
  */
@@ -8,21 +19,46 @@ interface BaseWorkflowConfig {
8
19
  dirs: string[];
9
20
  workingDir: string;
10
21
  /**
11
- * Project root used for package and workspace module-specifier resolution
12
- * during SWC transforms. Defaults to `workingDir`.
22
+ * Project root used for tracing, discovery, and tsconfig lookup during SWC
23
+ * transforms. Defaults to `workingDir`.
13
24
  */
14
25
  projectRoot?: string;
26
+ /**
27
+ * Project root used for package and workspace module-specifier resolution
28
+ * during SWC transforms. Defaults to `projectRoot` when set, otherwise
29
+ * `workingDir`.
30
+ */
31
+ moduleSpecifierRoot?: string;
15
32
  clientBundlePath?: string;
16
33
  externalPackages?: string[];
17
34
  workflowManifestPath?: string;
18
35
  debugFilePrefix?: string;
19
36
  diagnosticsDir?: string;
20
37
  distDir?: string;
38
+ basePath?: string;
21
39
  suppressCreateWorkflowsBundleLogs?: boolean;
22
40
  suppressCreateWorkflowsBundleWarnings?: boolean;
23
41
  suppressCreateWebhookBundleLogs?: boolean;
24
42
  suppressCreateManifestLogs?: boolean;
25
43
  runtime?: string;
44
+ /**
45
+ * Controls how source maps are emitted for workflow bundles. Accepts the
46
+ * same values as esbuild's `sourcemap` option.
47
+ *
48
+ * Default is `'inline'` for the step bundle and intermediate workflow
49
+ * bundle (gives readable stack traces for step errors and workflow VM
50
+ * errors). Setting `false` omits source maps entirely, which produces
51
+ * smaller bundles — useful for staying under the Vercel 250MB function
52
+ * limit — at the cost of stack traces that reference generated code.
53
+ *
54
+ * `'external'` and `'linked'` write a separate `.map` file; use these
55
+ * when you want to ship source maps to observability tooling but keep
56
+ * them out of the function bundle.
57
+ *
58
+ * Can also be set via the `WORKFLOW_SOURCEMAP` environment variable;
59
+ * config wins over env var, env var wins over the default.
60
+ */
61
+ sourcemap?: SourcemapMode;
26
62
  }
27
63
  /**
28
64
  * Configuration for standalone (CLI-based) builds.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,0FAOpB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,cAAc,CAAC,EAAE,MAAM,CAAC;IAIxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAG5C,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAGhD,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAG1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAGrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,WAAW,EAAE,YAAY,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,WAAW,EAAE,yBAAyB,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,WAAW,EAAE,WAAW,CAAC;IAEzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,WAAW,EAAE,OAAO,CAAC;IAErB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,uBAAuB,GACvB,UAAU,GACV,UAAU,GACV,eAAe,GACf,WAAW,CAAC;AAEhB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,IAAI,WAAW,CAEvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,0FAOpB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhF;;GAEG;AACH,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAK7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,eAAe,CAAC,EAAE,MAAM,CAAC;IAIzB,cAAc,CAAC,EAAE,MAAM,CAAC;IAIxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAIlB,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAG5C,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAGhD,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAG1C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAGrC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,WAAW,EAAE,YAAY,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,WAAW,EAAE,yBAAyB,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,WAAW,EAAE,WAAW,CAAC;IAEzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,WAAW,EAAE,OAAO,CAAC;IAErB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,WAAW,EAAE,MAAM,CAAC;IAEpB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,uBAAuB,GACvB,UAAU,GACV,UAAU,GACV,eAAe,GACf,WAAW,CAAC;AAEhB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,IAAI,WAAW,CAEvB"}
package/dist/types.js CHANGED
@@ -9,4 +9,4 @@ export const validBuildTargets = [
9
9
  export function isValidBuildTarget(target) {
10
10
  return !!target && validBuildTargets.includes(target);
11
11
  }
12
- //# sourceMappingURL=types.js.map
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsWUFBWTtJQUNaLHlCQUF5QjtJQUN6QixNQUFNO0lBQ04sTUFBTTtJQUNOLFdBQVc7SUFDWCxPQUFPO0NBQ0MsQ0FBQztBQXlLWCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE1BQTBCO0lBRTFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBcUIsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmFsaWRCdWlsZFRhcmdldHMgPSBbXG4gICdzdGFuZGFsb25lJyxcbiAgJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJyxcbiAgJ25leHQnLFxuICAnbmVzdCcsXG4gICdzdmVsdGVraXQnLFxuICAnYXN0cm8nLFxuXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkVGFyZ2V0ID0gKHR5cGVvZiB2YWxpZEJ1aWxkVGFyZ2V0cylbbnVtYmVyXTtcblxuLyoqXG4gKiBTb3VyY2UgbWFwIGVtaXNzaW9uIG1vZGUgZm9yIGdlbmVyYXRlZCB3b3JrZmxvdyBidW5kbGVzLiBNYXRjaGVzIGVzYnVpbGQnc1xuICogYHNvdXJjZW1hcGAgb3B0aW9uIHZvY2FidWxhcnk6XG4gKlxuICogLSBgdHJ1ZWAgLyBgJ2xpbmtlZCdgOiB3cml0ZSBhIHNlcGFyYXRlIGAubWFwYCBmaWxlIGFuZCBhZGQgYSBgc291cmNlTWFwcGluZ1VSTGAgY29tbWVudFxuICogLSBgJ2lubGluZSdgOiBlbWl0IGEgYmFzZTY0LWVuY29kZWQgc291cmNlIG1hcCBhdCB0aGUgZW5kIG9mIHRoZSBidW5kbGVcbiAqIC0gYCdleHRlcm5hbCdgOiB3cml0ZSBhIHNlcGFyYXRlIGAubWFwYCBmaWxlIHdpdGhvdXQgdGhlIGNvbW1lbnRcbiAqIC0gYCdib3RoJ2A6IGVtaXQgYm90aCBpbmxpbmUgYW5kIGV4dGVybmFsIHNvdXJjZSBtYXBzXG4gKiAtIGBmYWxzZWA6IG9taXQgc291cmNlIG1hcHMgZW50aXJlbHlcbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlbWFwTW9kZSA9IGJvb2xlYW4gfCAnaW5saW5lJyB8ICdsaW5rZWQnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcblxuLyoqXG4gKiBDb21tb24gY29uZmlndXJhdGlvbiBvcHRpb25zIHNoYXJlZCBhY3Jvc3MgYWxsIGJ1aWxkZXIgdHlwZXMuXG4gKi9cbmludGVyZmFjZSBCYXNlV29ya2Zsb3dDb25maWcge1xuICB3YXRjaD86IGJvb2xlYW47XG4gIGRpcnM6IHN0cmluZ1tdO1xuICB3b3JraW5nRGlyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcm9qZWN0IHJvb3QgdXNlZCBmb3IgdHJhY2luZywgZGlzY292ZXJ5LCBhbmQgdHNjb25maWcgbG9va3VwIGR1cmluZyBTV0NcbiAgICogdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHdvcmtpbmdEaXJgLlxuICAgKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3Qgcm9vdCB1c2VkIGZvciBwYWNrYWdlIGFuZCB3b3Jrc3BhY2UgbW9kdWxlLXNwZWNpZmllciByZXNvbHV0aW9uXG4gICAqIGR1cmluZyBTV0MgdHJhbnNmb3Jtcy4gRGVmYXVsdHMgdG8gYHByb2plY3RSb290YCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gICAqIGB3b3JraW5nRGlyYC5cbiAgICovXG4gIG1vZHVsZVNwZWNpZmllclJvb3Q/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWxseSBnZW5lcmF0ZSBhIGNsaWVudCBsaWJyYXJ5IGZvciB3b3JrZmxvdyBleGVjdXRpb24uIFRoZSBwcmVmZXJyZWRcbiAgLy8gbWV0aG9kIG9mIHVzaW5nIHdvcmtmbG93IGlzIHRvIHVzZSBhIGxvYWRlciB3aXRoaW4gYSBmcmFtZXdvcmsgKGxpa2VcbiAgLy8gTmV4dEpTKSB0aGF0IHJlc29sdmVzIGNsaWVudCBiaW5kaW5ncyBvbiB0aGUgZmx5LlxuICBjbGllbnRCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIGV4dGVybmFsUGFja2FnZXM/OiBzdHJpbmdbXTtcblxuICB3b3JrZmxvd01hbmlmZXN0UGF0aD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBwcmVmaXggZm9yIGRlYnVnIGZpbGVzIChlLmcuLCBcIl9cIiBmb3IgQXN0cm8gdG8gaWdub3JlIHRoZW0pXG4gIGRlYnVnRmlsZVByZWZpeD86IHN0cmluZztcblxuICAvLyBPcHRpb25hbCBkaXJlY3Rvcnkgd2hlcmUgZGlhZ25vc3RpY3MgYXJ0aWZhY3RzIHNob3VsZCBiZSB3cml0dGVuLlxuICAvLyBUaGUgd29ya2Zsb3cgbWFuaWZlc3QgaXMgd3JpdHRlbiB0byB3b3JrZmxvd3MtbWFuaWZlc3QuanNvbiBpbnNpZGUgdGhpcyBkaXIuXG4gIGRpYWdub3N0aWNzRGlyPzogc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGZyYW1ld29yayBvdXRwdXQgZGlyZWN0b3J5LCB1c2VkIGJ5IGJ1aWxkZXJzIHRoYXQgbWlycm9yIGZyYW1ld29ya1xuICAvLyBhcnRpZmFjdCBsb2NhdGlvbnMuXG4gIGRpc3REaXI/OiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgcm91dGUgcHJlZml4IGZvciBhcHBzIGRlcGxveWVkIGJlbG93IHRoZSBvcmlnaW4gcm9vdC5cbiAgYmFzZVBhdGg/OiBzdHJpbmc7XG5cbiAgLy8gU3VwcHJlc3MgaW5mb3JtYXRpb25hbCBsb2dzIGVtaXR0ZWQgYnkgY3JlYXRlV29ya2Zsb3dzQnVuZGxlKClcbiAgLy8gKGUuZy4gaW50ZXJtZWRpYXRlL2ZpbmFsIHdvcmtmbG93IGJ1bmRsZSB0aW1pbmcgbG9ncykuXG4gIHN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlTG9ncz86IGJvb2xlYW47XG5cbiAgLy8gU3VwcHJlc3MgZXNidWlsZCB3YXJuaW5ncyBlbWl0dGVkIGJ5IGNyZWF0ZVdvcmtmbG93c0J1bmRsZSgpLlxuICBzdXBwcmVzc0NyZWF0ZVdvcmtmbG93c0J1bmRsZVdhcm5pbmdzPzogYm9vbGVhbjtcblxuICAvLyBTdXBwcmVzcyBpbmZvcm1hdGlvbmFsIGxvZ3MgZW1pdHRlZCBieSBjcmVhdGVXZWJob29rQnVuZGxlKCkuXG4gIHN1cHByZXNzQ3JlYXRlV2ViaG9va0J1bmRsZUxvZ3M/OiBib29sZWFuO1xuXG4gIC8vIFN1cHByZXNzIGluZm9ybWF0aW9uYWwgbG9ncyBlbWl0dGVkIGJ5IGNyZWF0ZU1hbmlmZXN0KCkuXG4gIHN1cHByZXNzQ3JlYXRlTWFuaWZlc3RMb2dzPzogYm9vbGVhbjtcblxuICAvLyBOb2RlLmpzIHJ1bnRpbWUgdmVyc2lvbiBmb3IgVmVyY2VsIEZ1bmN0aW9ucyAoZS5nLiwgXCJub2RlanMyMi54XCIsIFwibm9kZWpzMjQueFwiKVxuICBydW50aW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHMgdGhlXG4gICAqIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb24uXG4gICAqXG4gICAqIERlZmF1bHQgaXMgYCdpbmxpbmUnYCBmb3IgdGhlIHN0ZXAgYnVuZGxlIGFuZCBpbnRlcm1lZGlhdGUgd29ya2Zsb3dcbiAgICogYnVuZGxlIChnaXZlcyByZWFkYWJsZSBzdGFjayB0cmFjZXMgZm9yIHN0ZXAgZXJyb3JzIGFuZCB3b3JrZmxvdyBWTVxuICAgKiBlcnJvcnMpLiBTZXR0aW5nIGBmYWxzZWAgb21pdHMgc291cmNlIG1hcHMgZW50aXJlbHksIHdoaWNoIHByb2R1Y2VzXG4gICAqIHNtYWxsZXIgYnVuZGxlcyDigJQgdXNlZnVsIGZvciBzdGF5aW5nIHVuZGVyIHRoZSBWZXJjZWwgMjUwTUIgZnVuY3Rpb25cbiAgICogbGltaXQg4oCUIGF0IHRoZSBjb3N0IG9mIHN0YWNrIHRyYWNlcyB0aGF0IHJlZmVyZW5jZSBnZW5lcmF0ZWQgY29kZS5cbiAgICpcbiAgICogYCdleHRlcm5hbCdgIGFuZCBgJ2xpbmtlZCdgIHdyaXRlIGEgc2VwYXJhdGUgYC5tYXBgIGZpbGU7IHVzZSB0aGVzZVxuICAgKiB3aGVuIHlvdSB3YW50IHRvIHNoaXAgc291cmNlIG1hcHMgdG8gb2JzZXJ2YWJpbGl0eSB0b29saW5nIGJ1dCBrZWVwXG4gICAqIHRoZW0gb3V0IG9mIHRoZSBmdW5jdGlvbiBidW5kbGUuXG4gICAqXG4gICAqIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgIGVudmlyb25tZW50IHZhcmlhYmxlO1xuICAgKiBjb25maWcgd2lucyBvdmVyIGVudiB2YXIsIGVudiB2YXIgd2lucyBvdmVyIHRoZSBkZWZhdWx0LlxuICAgKi9cbiAgc291cmNlbWFwPzogU291cmNlbWFwTW9kZTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzdGFuZGFsb25lIChDTEktYmFzZWQpIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFsb25lQ29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJztcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBidWlsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyY2VsQnVpbGRPdXRwdXRDb25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpJztcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBOZXh0LmpzIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0Q29uZmlnIGV4dGVuZHMgQmFzZVdvcmtmbG93Q29uZmlnIHtcbiAgYnVpbGRUYXJnZXQ6ICduZXh0JztcbiAgLy8gTmV4dC5qcyBidWlsZGVyIGNvbXB1dGVzIHBhdGhzIGR5bmFtaWNhbGx5LCBzbyB0aGVzZSBhcmUgbm90IHVzZWRcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBTdmVsdGVLaXQgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN2ZWx0ZUtpdENvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnc3ZlbHRla2l0JztcbiAgLy8gU3ZlbHRlS2l0IGJ1aWxkZXIgY29tcHV0ZXMgcGF0aHMgZHluYW1pY2FsbHksIHNvIHRoZXNlIGFyZSBub3QgdXNlZFxuICBzdGVwc0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd29ya2Zsb3dzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3ZWJob29rQnVuZGxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEFzdHJvIGJ1aWxkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3Ryb0NvbmZpZyBleHRlbmRzIEJhc2VXb3JrZmxvd0NvbmZpZyB7XG4gIGJ1aWxkVGFyZ2V0OiAnYXN0cm8nO1xuICAvLyBBc3RybyBidWlsZGVyIGNvbXB1dGVzIHBhdGhzIGR5bmFtaWNhbGx5LCBzbyB0aGVzZSBhcmUgbm90IHVzZWRcbiAgc3RlcHNCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdvcmtmbG93c0J1bmRsZVBhdGg6IHN0cmluZztcbiAgd2ViaG9va0J1bmRsZVBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBOZXN0SlMgYnVpbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5lc3RDb25maWcgZXh0ZW5kcyBCYXNlV29ya2Zsb3dDb25maWcge1xuICBidWlsZFRhcmdldDogJ25lc3QnO1xuICAvLyBOZXN0SlMgYnVpbGRlciBjb21wdXRlcyBwYXRocyBkeW5hbWljYWxseSwgc28gdGhlc2UgYXJlIG5vdCB1c2VkXG4gIHN0ZXBzQnVuZGxlUGF0aDogc3RyaW5nO1xuICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBzdHJpbmc7XG4gIHdlYmhvb2tCdW5kbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBvZiBhbGwgYnVpbGRlciBjb25maWd1cmF0aW9uIHR5cGVzLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NvbmZpZyA9XG4gIHwgU3RhbmRhbG9uZUNvbmZpZ1xuICB8IFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnXG4gIHwgTmV4dENvbmZpZ1xuICB8IE5lc3RDb25maWdcbiAgfCBTdmVsdGVLaXRDb25maWdcbiAgfCBBc3Ryb0NvbmZpZztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRCdWlsZFRhcmdldChcbiAgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHRhcmdldCBpcyBCdWlsZFRhcmdldCB7XG4gIHJldHVybiAhIXRhcmdldCAmJiB2YWxpZEJ1aWxkVGFyZ2V0cy5pbmNsdWRlcyh0YXJnZXQgYXMgQnVpbGRUYXJnZXQpO1xufVxuIl19
@@ -1,8 +1,6 @@
1
1
  import { BaseBuilder } from './base-builder.js';
2
2
  export declare class VercelBuildOutputAPIBuilder extends BaseBuilder {
3
3
  build(): Promise<void>;
4
- private buildStepsFunction;
5
- private buildWorkflowsFunction;
6
4
  private buildWebhookFunction;
7
5
  private createBuildOutputConfig;
8
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAuDd,kBAAkB;YAiClB,sBAAsB;YA+BtB,oBAAoB;YAyBpB,uBAAuB;CA0BtC"}
1
+ {"version":3,"file":"vercel-build-output-api.d.ts","sourceRoot":"","sources":["../src/vercel-build-output-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,2BAA4B,SAAQ,WAAW;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAwEd,oBAAoB;YA2BpB,uBAAuB;CAyBtC"}
@@ -1,7 +1,7 @@
1
1
  import { copyFile, mkdir, writeFile } from 'node:fs/promises';
2
2
  import { join, resolve } from 'node:path';
3
3
  import { BaseBuilder } from './base-builder.js';
4
- import { STEP_QUEUE_TRIGGER, WORKFLOW_QUEUE_TRIGGER } from './constants.js';
4
+ import { WORKFLOW_QUEUE_TRIGGER } from './constants.js';
5
5
  export class VercelBuildOutputAPIBuilder extends BaseBuilder {
6
6
  async build() {
7
7
  const outputDir = resolve(this.config.workingDir, '.vercel/output');
@@ -11,21 +11,31 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
11
11
  await mkdir(workflowGeneratedDir, { recursive: true });
12
12
  const inputFiles = await this.getInputFiles();
13
13
  const tsconfigPath = await this.findTsConfigPath();
14
- const options = {
14
+ // Create combined bundle in flow.func/
15
+ this.logBaseBuilderInfo('Creating Vercel Build Output API combined function');
16
+ const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');
17
+ await mkdir(workflowsFuncDir, { recursive: true });
18
+ const { manifest } = await this.createCombinedBundle({
15
19
  inputFiles,
16
- workflowGeneratedDir,
20
+ stepsOutfile: join(workflowsFuncDir, '__step_registrations.mjs'),
21
+ flowOutfile: join(workflowsFuncDir, 'index.mjs'),
17
22
  tsconfigPath,
18
- };
19
- const stepsManifest = await this.buildStepsFunction(options);
20
- const workflowsManifest = await this.buildWorkflowsFunction(options);
21
- await this.buildWebhookFunction(options);
23
+ bundleFinalOutput: true,
24
+ });
25
+ // Create package.json and .vc-config.json for combined function
26
+ await this.createPackageJson(workflowsFuncDir, 'module');
27
+ await this.createVcConfig(workflowsFuncDir, {
28
+ handler: 'index.mjs',
29
+ // Skip the source-map-support runtime shim when sourcemaps are
30
+ // disabled — it's a meaningful chunk of the function bundle and
31
+ // serves no purpose without maps.
32
+ shouldAddSourcemapSupport: this.sourcemapsEnabled,
33
+ maxDuration: 'max',
34
+ experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],
35
+ runtime: this.config.runtime,
36
+ });
37
+ await this.buildWebhookFunction({ workflowGeneratedDir });
22
38
  await this.createBuildOutputConfig(outputDir);
23
- // Merge manifests from both bundles
24
- const manifest = {
25
- steps: { ...stepsManifest.steps, ...workflowsManifest.steps },
26
- workflows: { ...stepsManifest.workflows, ...workflowsManifest.workflows },
27
- classes: { ...stepsManifest.classes, ...workflowsManifest.classes },
28
- };
29
39
  // Generate unified manifest
30
40
  const workflowBundlePath = join(workflowGeneratedDir, 'flow.func/index.mjs');
31
41
  const manifestJson = await this.createManifest({
@@ -38,52 +48,15 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
38
48
  if (this.shouldExposePublicManifest && manifestJson) {
39
49
  const staticManifestDir = join(outputDir, 'static/.well-known/workflow/v1');
40
50
  await mkdir(staticManifestDir, { recursive: true });
51
+ if (process.env.VERCEL_DEPLOYMENT_ID === undefined) {
52
+ await writeFile(join(staticManifestDir, '.gitignore'), '*');
53
+ }
41
54
  await copyFile(join(workflowGeneratedDir, 'manifest.json'), join(staticManifestDir, 'manifest.json'));
42
55
  }
43
56
  await this.createClientLibrary();
44
57
  }
45
- async buildStepsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
46
- console.log('Creating Vercel Build Output API steps function');
47
- const stepsFuncDir = join(workflowGeneratedDir, 'step.func');
48
- await mkdir(stepsFuncDir, { recursive: true });
49
- // Create steps bundle
50
- const { manifest } = await this.createStepsBundle({
51
- inputFiles,
52
- outfile: join(stepsFuncDir, 'index.mjs'),
53
- tsconfigPath,
54
- });
55
- // Create package.json and .vc-config.json for steps function
56
- await this.createPackageJson(stepsFuncDir, 'module');
57
- await this.createVcConfig(stepsFuncDir, {
58
- handler: 'index.mjs',
59
- shouldAddSourcemapSupport: true,
60
- maxDuration: 'max',
61
- experimentalTriggers: [STEP_QUEUE_TRIGGER],
62
- runtime: this.config.runtime,
63
- });
64
- return manifest;
65
- }
66
- async buildWorkflowsFunction({ inputFiles, workflowGeneratedDir, tsconfigPath, }) {
67
- console.log('Creating Vercel Build Output API workflows function');
68
- const workflowsFuncDir = join(workflowGeneratedDir, 'flow.func');
69
- await mkdir(workflowsFuncDir, { recursive: true });
70
- const { manifest } = await this.createWorkflowsBundle({
71
- outfile: join(workflowsFuncDir, 'index.mjs'),
72
- inputFiles,
73
- tsconfigPath,
74
- });
75
- // Create package.json and .vc-config.json for workflows function
76
- await this.createPackageJson(workflowsFuncDir, 'module');
77
- await this.createVcConfig(workflowsFuncDir, {
78
- handler: 'index.mjs',
79
- maxDuration: 'max',
80
- experimentalTriggers: [WORKFLOW_QUEUE_TRIGGER],
81
- runtime: this.config.runtime,
82
- });
83
- return manifest;
84
- }
85
58
  async buildWebhookFunction({ workflowGeneratedDir, bundle = true, }) {
86
- console.log('Creating Vercel Build Output API webhook function');
59
+ this.logBaseBuilderInfo('Creating Vercel Build Output API webhook function');
87
60
  const webhookFuncDir = join(workflowGeneratedDir, 'webhook/[token].func');
88
61
  // Bundle the webhook route with dependencies resolved
89
62
  await this.createWebhookBundle({
@@ -110,10 +83,9 @@ export class VercelBuildOutputAPIBuilder extends BaseBuilder {
110
83
  ],
111
84
  };
112
85
  await writeFile(join(outputDir, 'config.json'), JSON.stringify(buildOutputConfig, null, 2));
113
- console.log(`Build Output API created at ${outputDir}`);
114
- console.log('Steps function available at /.well-known/workflow/v1/step');
115
- console.log('Workflows function available at /.well-known/workflow/v1/flow');
116
- console.log('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
86
+ this.logBaseBuilderInfo(`Build Output API created at ${outputDir}`);
87
+ this.logBaseBuilderInfo('Combined function available at /.well-known/workflow/v1/flow');
88
+ this.logBaseBuilderInfo('Webhook function available at /.well-known/workflow/v1/webhook/[token]');
117
89
  }
118
90
  }
119
- //# sourceMappingURL=vercel-build-output-api.js.map
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmVyY2VsLWJ1aWxkLW91dHB1dC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE1BQU0sT0FBTywyQkFBNEIsU0FBUSxXQUFXO0lBQzFELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUUzRSxrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25ELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLG9EQUFvRCxDQUNyRCxDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsTUFBTSxL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QUU7WUFDeEMsT0FBTyxFQUFFLFdBQVc7WUFDcEIsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsU0FBaUI7UUFDckQsMENBQTBDO1FBQzFDLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsR0FBRyxFQUFFLDBEQUEwRDtvQkFDL0QsSUFBSSxFQUFFLDBDQUEwQztpQkFDakQ7YUFDRjtTQUNGLENBQUM7UUFFRixNQUFNLFNBQVMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxFQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLDhEQUE4RCxDQUMvRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUNyQix3RUFBd0UsQ0FDekUsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcHlGaWxlLCBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IEJhc2VCdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGNsYXNzIFZlcmNlbEJ1aWxkT3V0cHV0QVBJQnVpbGRlciBleHRlbmRzIEJhc2VCdWlsZGVyIHtcbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3V0cHV0RGlyID0gcmVzb2x2ZSh0aGlzLmNvbmZpZy53b3JraW5nRGlyLCAnLnZlcmNlbC9vdXRwdXQnKTtcbiAgICBjb25zdCBmdW5jdGlvbnNEaXIgPSBqb2luKG91dHB1dERpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGNvbnN0IHdvcmtmbG93R2VuZXJhdGVkRGlyID0gam9pbihmdW5jdGlvbnNEaXIsICcud2VsbC1rbm93bi93b3JrZmxvdy92MScpO1xuXG4gICAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcmllcyBleGlzdFxuICAgIGF3YWl0IG1rZGlyKHdvcmtmbG93R2VuZXJhdGVkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBhd2FpdCB0aGlzLmdldElucHV0RmlsZXMoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGggPSBhd2FpdCB0aGlzLmZpbmRUc0NvbmZpZ1BhdGgoKTtcbiAgICAvLyBDcmVhdGUgY29tYmluZWQgYnVuZGxlIGluIGZsb3cuZnVuYy9cbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDcmVhdGluZyBWZXJjZWwgQnVpbGQgT3V0cHV0IEFQSSBjb21iaW5lZCBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdvcmtmbG93c0Z1bmNEaXIgPSBqb2luKHdvcmtmbG93R2VuZXJhdGVkRGlyLCAnZmxvdy5mdW5jJyk7XG4gICAgYXdhaXQgbWtkaXIod29ya2Zsb3dzRnVuY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCB7IG1hbmlmZXN0IH0gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbWJpbmVkQnVuZGxlKHtcbiAgICAgIGlucHV0RmlsZXMsXG4gICAgICBzdGVwc091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ19fc3RlcF9yZWdpc3RyYXRpb25zLm1qcycpLFxuICAgICAgZmxvd091dGZpbGU6IGpvaW4od29ya2Zsb3dzRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgdHNjb25maWdQYXRoLFxuICAgICAgYnVuZGxlRmluYWxPdXRwdXQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIGNvbWJpbmVkIGZ1bmN0aW9uXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQYWNrYWdlSnNvbih3b3JrZmxvd3NGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3b3JrZmxvd3NGdW5jRGlyLCB7XG4gICAgICBoYW5kbGVyOiAnaW5kZXgubWpzJyxcbiAgICAgIC8vIFNraXAgdGhlIHNvdXJjZS1tYXAtc3VwcG9ydCBydW50aW1lIHNoaW0gd2hlbiBzb3VyY2VtYXBzIGFyZVxuICAgICAgLy8gZGlzYWJsZWQg4oCUIGl0J3MgYSBtZWFuaW5nZnVsIGNodW5rIG9mIHRoZSBmdW5jdGlvbiBidW5kbGUgYW5kXG4gICAgICAvLyBzZXJ2ZXMgbm8gcHVycG9zZSB3aXRob3V0IG1hcHMuXG4gICAgICBzaG91bGRBZGRTb3VyY2VtYXBTdXBwb3J0OiB0aGlzLnNvdXJjZW1hcHNFbmFibGVkLFxuICAgICAgbWF4RHVyYXRpb246ICdtYXgnLFxuICAgICAgZXhwZXJpbWVudGFsVHJpZ2dlcnM6IFtXT1JLRkxPV19RVUVVRV9UUklHR0VSXSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmJ1aWxkV2ViaG9va0Z1bmN0aW9uKHsgd29ya2Zsb3dHZW5lcmF0ZWREaXIgfSk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVCdWlsZE91dHB1dENvbmZpZyhvdXRwdXREaXIpO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pZmllZCBtYW5pZmVzdFxuICAgIGNvbnN0IHdvcmtmbG93QnVuZGxlUGF0aCA9IGpvaW4oXG4gICAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICAgICdmbG93LmZ1bmMvaW5kZXgubWpzJ1xuICAgICk7XG4gICAgY29uc3QgbWFuaWZlc3RKc29uID0gYXdhaXQgdGhpcy5jcmVhdGVNYW5pZmVzdCh7XG4gICAgICB3b3JrZmxvd0J1bmRsZVBhdGgsXG4gICAgICBtYW5pZmVzdERpcjogd29ya2Zsb3dHZW5lcmF0ZWREaXIsXG4gICAgICBtYW5pZmVzdCxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSBtYW5pZmVzdCBhcyBhIHN0YXRpYyBmaWxlIHdoZW4gV09SS0ZMT1dfUFVCTElDX01BTklGRVNUPTEuXG4gICAgLy8gVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgc2VydmVzIHN0YXRpYyBmaWxlcyBmcm9tIC52ZXJjZWwvb3V0cHV0L3N0YXRpYy9cbiAgICBpZiAodGhpcy5zaG91bGRFeHBvc2VQdWJsaWNNYW5pZmVzdCAmJiBtYW5pZmVzdEpzb24pIHtcbiAgICAgIGNvbnN0IHN0YXRpY01hbmlmZXN0RGlyID0gam9pbihcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICAnc3RhdGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxJ1xuICAgICAgKTtcbiAgICAgIGF3YWl0IG1rZGlyKHN0YXRpY01hbmlmZXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShqb2luKHN0YXRpY01hbmlmZXN0RGlyLCAnLmdpdGlnbm9yZScpLCAnKicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgY29weUZpbGUoXG4gICAgICAgIGpvaW4od29ya2Zsb3dHZW5lcmF0ZWREaXIsICdtYW5pZmVzdC5qc29uJyksXG4gICAgICAgIGpvaW4oc3RhdGljTWFuaWZlc3REaXIsICdtYW5pZmVzdC5qc29uJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVDbGllbnRMaWJyYXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkV2ViaG9va0Z1bmN0aW9uKHtcbiAgICB3b3JrZmxvd0dlbmVyYXRlZERpcixcbiAgICBidW5kbGUgPSB0cnVlLFxuICB9OiB7XG4gICAgd29ya2Zsb3dHZW5lcmF0ZWREaXI6IHN0cmluZztcbiAgICBidW5kbGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oXG4gICAgICAnQ3JlYXRpbmcgVmVyY2VsIEJ1aWxkIE91dHB1dCBBUEkgd2ViaG9vayBmdW5jdGlvbidcbiAgICApO1xuICAgIGNvbnN0IHdlYmhvb2tGdW5jRGlyID0gam9pbih3b3JrZmxvd0dlbmVyYXRlZERpciwgJ3dlYmhvb2svW3Rva2VuXS5mdW5jJyk7XG5cbiAgICAvLyBCdW5kbGUgdGhlIHdlYmhvb2sgcm91dGUgd2l0aCBkZXBlbmRlbmNpZXMgcmVzb2x2ZWRcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVdlYmhvb2tCdW5kbGUoe1xuICAgICAgb3V0ZmlsZTogam9pbih3ZWJob29rRnVuY0RpciwgJ2luZGV4Lm1qcycpLFxuICAgICAgYnVuZGxlLCAvLyBCdWlsZCBPdXRwdXQgQVBJIG5lZWRzIGJ1bmRsaW5nIChleGNlcHQgaW4gdGVzdHMpXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgcGFja2FnZS5qc29uIGFuZCAudmMtY29uZmlnLmpzb24gZm9yIHdlYmhvb2sgZnVuY3Rpb25cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVBhY2thZ2VKc29uKHdlYmhvb2tGdW5jRGlyLCAnbW9kdWxlJyk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVWY0NvbmZpZyh3ZWJob29rRnVuY0Rpciwge1xuICAgICAgaGFuZGxlcjogJ2luZGV4Lm1qcycsXG4gICAgICBzaG91bGRBZGRIZWxwZXJzOiBmYWxzZSxcbiAgICAgIHJ1bnRpbWU6IHRoaXMuY29uZmlnLnJ1bnRpbWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkT3V0cHV0Q29uZmlnKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ3JlYXRlIGNvbmZpZy5qc29uIGZvciBCdWlsZCBPdXRwdXQgQVBJXG4gICAgY29uc3QgYnVpbGRPdXRwdXRDb25maWcgPSB7XG4gICAgICB2ZXJzaW9uOiAzLFxuICAgICAgcm91dGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzcmM6ICdeXFxcXC9cXFxcLndlbGwta25vd25cXFxcL3dvcmtmbG93XFxcXC92MVxcXFwvd2ViaG9va1xcXFwvKFteXFxcXC9dKykkJyxcbiAgICAgICAgICBkZXN0OiAnLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL3dlYmhvb2svW3Rva2VuXScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICBqb2luKG91dHB1dERpciwgJ2NvbmZpZy5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShidWlsZE91dHB1dENvbmZpZywgbnVsbCwgMilcbiAgICApO1xuXG4gICAgdGhpcy5sb2dCYXNlQnVpbGRlckluZm8oYEJ1aWxkIE91dHB1dCBBUEkgY3JlYXRlZCBhdCAke291dHB1dERpcn1gKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdDb21iaW5lZCBmdW5jdGlvbiBhdmFpbGFibGUgYXQgLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL2Zsb3cnXG4gICAgKTtcbiAgICB0aGlzLmxvZ0Jhc2VCdWlsZGVySW5mbyhcbiAgICAgICdXZWJob29rIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvd2ViaG9vay9bdG9rZW5dJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -62,4 +62,4 @@ export async function resolveWorkflowAliasRelativePath(absoluteFilePath, working
62
62
  workflowAliasResolutionCache.set(cacheKey, resolutionPromise);
63
63
  return resolutionPromise;
64
64
  }
65
- //# sourceMappingURL=workflow-alias.js.map
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYWxpYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2Zsb3ctYWxpYXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxHQUFHLEVBR3pDLENBQUM7QUFFSixNQUFNLG9CQUFvQixHQUFHO0lBQzNCLGVBQWU7SUFDZixXQUFXO0lBQ1gsU0FBUztJQUNULEtBQUs7SUFDTCxXQUFXO0lBQ1gsT0FBTztDQUNDLENBQUM7QUFFWCxTQUFTLDhCQUE4QixDQUNyQyxzQkFBOEI7SUFFOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sU0FBUyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLEdBQUcsQ0FBQztRQUNoQyxNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2QixTQUFTO1FBQ1gsQ0FBQztRQUNELFVBQVUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxpQ0FBaUM7SUFDL0MsNEJBQTRCLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0NBQWdDLENBQ3BELGdCQUF3QixFQUN4QixVQUFrQjtJQUVsQixNQUFNLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFcEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxVQUFVLEtBQUssc0JBQXNCLEVBQUUsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FDN0QsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sMEJBQTBCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RSxNQUFNLGVBQWUsR0FBRyw4QkFBOEIsQ0FDcEQsc0JBQXNCLENBQ3ZCLENBQUM7UUFDRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELEtBQUssTUFBTSxpQkFBaUIsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNoRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FDL0QsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUNoQixDQUFDO1lBQ0YsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzNCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFDRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLDBCQUEwQixFQUN4RSxDQUFDO2dCQUNELE9BQU8saUJBQWlCLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLENBQUMsRUFBRSxDQUFDO0lBRUwsNEJBQTRCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjY2VzcywgcmVhbHBhdGggfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuXG5jb25zdCB3b3JrZmxvd0FsaWFzUmVzb2x1dGlvbkNhY2hlID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD5cbj4oKTtcblxuY29uc3QgV09SS0ZMT1dfQUxJQVNfUk9PVFMgPSBbXG4gICdzcmMvd29ya2Zsb3dzJyxcbiAgJ3dvcmtmbG93cycsXG4gICdzcmMvYXBwJyxcbiAgJ2FwcCcsXG4gICdzcmMvcGFnZXMnLFxuICAncGFnZXMnLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gZ2V0QWxpYXNSZWxhdGl2ZVBhdGhDYW5kaWRhdGVzKFxuICBub3JtYWxpemVkQWJzb2x1dGVQYXRoOiBzdHJpbmdcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGFsaWFzUm9vdCBvZiBXT1JLRkxPV19BTElBU19ST09UUykge1xuICAgIGNvbnN0IG1hcmtlciA9IGAvJHthbGlhc1Jvb3R9L2A7XG4gICAgY29uc3QgbWFya2VySW5kZXggPSBub3JtYWxpemVkQWJzb2x1dGVQYXRoLmxhc3RJbmRleE9mKG1hcmtlcik7XG4gICAgaWYgKG1hcmtlckluZGV4ID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNhbmRpZGF0ZXMuYWRkKG5vcm1hbGl6ZWRBYnNvbHV0ZVBhdGguc2xpY2UobWFya2VySW5kZXggKyAxKSk7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20oY2FuZGlkYXRlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhcldvcmtmbG93QWxpYXNSZXNvbHV0aW9uQ2FjaGUoKTogdm9pZCB7XG4gIHdvcmtmbG93QWxpYXNSZXNvbHV0aW9uQ2FjaGUuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKFxuICBhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgbm9ybWFsaXplZEFic29sdXRlUGF0aCA9IGFic29sdXRlRmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIGNvbnN0IGNhY2hlS2V5ID0gYCR7d29ya2luZ0Rpcn06OiR7bm9ybWFsaXplZEFic29sdXRlUGF0aH1gO1xuICBjb25zdCBjYWNoZWQgPSB3b3JrZmxvd0FsaWFzUmVzb2x1dGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgcmVzb2x1dGlvblByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkRmlsZVBhdGggPSBhd2FpdCByZWFscGF0aChhYnNvbHV0ZUZpbGVQYXRoKS5jYXRjaChcbiAgICAgICgpID0+IHVuZGVmaW5lZFxuICAgICk7XG4gICAgaWYgKCFyZXNvbHZlZEZpbGVQYXRoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkUmVzb2x2ZWRGaWxlUGF0aCA9IHJlc29sdmVkRmlsZVBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgIGNvbnN0IGFsaWFzQ2FuZGlkYXRlcyA9IGdldEFsaWFzUmVsYXRpdmVQYXRoQ2FuZGlkYXRlcyhcbiAgICAgIG5vcm1hbGl6ZWRBYnNvbHV0ZVBhdGhcbiAgICApO1xuICAgIGlmIChhbGlhc0NhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWxpYXNSZWxhdGl2ZVBhdGggb2YgYWxpYXNDYW5kaWRhdGVzKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVQYXRoID0gcmVzb2x2ZSh3b3JraW5nRGlyLCBhbGlhc1JlbGF0aXZlUGF0aCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhY2Nlc3MoY2FuZGlkYXRlUGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNvbHZlZENhbmRpZGF0ZVBhdGggPSBhd2FpdCByZWFscGF0aChjYW5kaWRhdGVQYXRoKS5jYXRjaChcbiAgICAgICAgKCkgPT4gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKCFyZXNvbHZlZENhbmRpZGF0ZVBhdGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHJlc29sdmVkQ2FuZGlkYXRlUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJykgPT09IG5vcm1hbGl6ZWRSZXNvbHZlZEZpbGVQYXRoXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGFsaWFzUmVsYXRpdmVQYXRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9KSgpO1xuXG4gIHdvcmtmbG93QWxpYXNSZXNvbHV0aW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCByZXNvbHV0aW9uUHJvbWlzZSk7XG4gIHJldHVybiByZXNvbHV0aW9uUHJvbWlzZTtcbn1cbiJdfQ==
@@ -50,4 +50,4 @@ describe('resolveWorkflowAliasRelativePath', () => {
50
50
  await expect(resolveWorkflowAliasRelativePath(externalFilePath, workingDir)).resolves.toBe('app/.well-known/agent/v1/steps.ts');
51
51
  });
52
52
  });
53
- //# sourceMappingURL=workflow-alias.test.js.map
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYWxpYXMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZmxvdy1hbGlhcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULE1BQU0sRUFDTixXQUFXLEVBQ1gsYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyxnQ0FBZ0MsR0FDakMsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxhQUFhLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxRQUFRLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELElBQUksUUFBZ0IsQ0FBQztJQUNyQixJQUFJLFVBQWtCLENBQUM7SUFFdkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGlDQUFpQyxFQUFFLENBQUM7UUFDcEMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQzFELFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUs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LENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIG1rZHRlbXBTeW5jLFxuICBta2RpclN5bmMsXG4gIHJtU3luYyxcbiAgc3ltbGlua1N5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHtcbiAgY2xlYXJXb3JrZmxvd0FsaWFzUmVzb2x1dGlvbkNhY2hlLFxuICByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCxcbn0gZnJvbSAnLi93b3JrZmxvdy1hbGlhcy5qcyc7XG5cbmZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIFwiJ3VzZSB3b3JrZmxvdyc7XFxuXCIsICd1dGYtOCcpO1xufVxuXG5kZXNjcmliZSgncmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgnLCAoKSA9PiB7XG4gIGxldCB0ZXN0Um9vdDogc3RyaW5nO1xuICBsZXQgd29ya2luZ0Rpcjogc3RyaW5nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGNsZWFyV29ya2Zsb3dBbGlhc1Jlc29sdXRpb25DYWNoZSgpO1xuICAgIHRlc3RSb290ID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3dvcmtmbG93LWFsaWFzLScpKTtcbiAgICB3b3JraW5nRGlyID0gam9pbih0ZXN0Um9vdCwgJ3Byb2plY3QnKTtcbiAgICBta2RpclN5bmMod29ya2luZ0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgY2xlYXJXb3JrZmxvd0FsaWFzUmVzb2x1dGlvbkNhY2hlKCk7XG4gICAgcm1TeW5jKHRlc3RSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGl0KCdtYXBzIGZpbGVzIGluIHdvcmtmbG93cy8gdG8gd29ya2Zsb3dzLyogYWxpYXNlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4od29ya2luZ0RpciwgJ3dvcmtmbG93cycsICdmb28udHMnKTtcbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpXG4gICAgKS5yZXNvbHZlcy50b0JlKCd3b3JrZmxvd3MvZm9vLnRzJyk7XG4gIH0pO1xuXG4gIGl0KCdtYXBzIGZpbGVzIGluIHNyYy93b3JrZmxvd3MvIHRvIHNyYy93b3JrZmxvd3MvKiBhbGlhc2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih3b3JraW5nRGlyLCAnc3JjJywgJ3dvcmtmbG93cycsICdmb28udHMnKTtcbiAgICB3cml0ZUZpbGUoZmlsZVBhdGgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpXG4gICAgKS5yZXNvbHZlcy50b0JlKCdzcmMvd29ya2Zsb3dzL2Zvby50cycpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB1bmRlZmluZWQgZm9yIGZpbGVzIHRoYXQgYXJlIG5vdCB1bmRlciB3b3JrZmxvd3MgcGF0aHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHdvcmtpbmdEaXIsICdsaWInLCAnZm9vLnRzJyk7XG4gICAgd3JpdGVGaWxlKGZpbGVQYXRoKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGZpbGVQYXRoLCB3b3JraW5nRGlyKVxuICAgICkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdCgncmV0dXJucyB1bmRlZmluZWQgd2hlbiBiYXNlbmFtZSBtYXRjaGVzIGJ1dCByZWFscGF0aCBkaWZmZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93RmlsZVBhdGggPSBqb2luKHdvcmtpbmdEaXIsICd3b3JrZmxvd3MnLCAnZm9vLnRzJyk7XG4gICAgY29uc3QgZXh0ZXJuYWxGaWxlUGF0aCA9IGpvaW4odGVzdFJvb3QsICdleHRlcm5hbCcsICd3b3JrZmxvd3MnLCAnZm9vLnRzJyk7XG4gICAgd3JpdGVGaWxlKHdvcmtmbG93RmlsZVBhdGgpO1xuICAgIHdyaXRlRmlsZShleHRlcm5hbEZpbGVQYXRoKTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGV4dGVybmFsRmlsZVBhdGgsIHdvcmtpbmdEaXIpXG4gICAgKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KCdtYXBzIHN5bWxpbmtlZCBhcHAgZmlsZXMgdG8gYXBwLyogYWxpYXNlcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBleHRlcm5hbEFwcERpciA9IGpvaW4odGVzdFJvb3QsICdleHRlcm5hbCcsICdhcHAnKTtcbiAgICBjb25zdCBleHRlcm5hbEZpbGVQYXRoID0gam9pbihcbiAgICAgIGV4dGVybmFsQXBwRGlyLFxuICAgICAgJy53ZWxsLWtub3duJyxcbiAgICAgICdhZ2VudCcsXG4gICAgICAndjEnLFxuICAgICAgJ3N0ZXBzLnRzJ1xuICAgICk7XG4gICAgd3JpdGVGaWxlKGV4dGVybmFsRmlsZVBhdGgpO1xuXG4gICAgc3ltbGlua1N5bmMoXG4gICAgICBleHRlcm5hbEFwcERpcixcbiAgICAgIGpvaW4od29ya2luZ0RpciwgJ2FwcCcpLFxuICAgICAgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdqdW5jdGlvbicgOiAnZGlyJ1xuICAgICk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aChleHRlcm5hbEZpbGVQYXRoLCB3b3JraW5nRGlyKVxuICAgICkucmVzb2x2ZXMudG9CZSgnYXBwLy53ZWxsLWtub3duL2FnZW50L3YxL3N0ZXBzLnRzJyk7XG4gIH0pO1xufSk7XG4iXX0=