@workflow/builders 5.0.0-beta.4 → 5.0.0-beta.40

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 (119) 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 +132 -13
  8. package/dist/base-builder.d.ts.map +1 -1
  9. package/dist/base-builder.js +785 -92
  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 +66 -5
  18. package/dist/constants.d.ts.map +1 -1
  19. package/dist/constants.js +106 -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 +90 -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 +29 -0
  33. package/dist/fast-discovery.d.ts.map +1 -0
  34. package/dist/fast-discovery.js +771 -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 +453 -0
  38. package/dist/get-input-files.test.js +34 -2
  39. package/dist/index.d.ts +5 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +6 -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-module-esbuild-plugin.d.ts.map +1 -1
  47. package/dist/node-module-esbuild-plugin.js +73 -23
  48. package/dist/node-module-esbuild-plugin.test.js +97 -1
  49. package/dist/optional-otel-api.d.ts +14 -0
  50. package/dist/optional-otel-api.d.ts.map +1 -0
  51. package/dist/optional-otel-api.js +14 -0
  52. package/dist/optional-typescript-alias.d.ts +2 -0
  53. package/dist/optional-typescript-alias.d.ts.map +1 -0
  54. package/dist/optional-typescript-alias.js +3 -0
  55. package/dist/optional-typescript.d.ts +3 -0
  56. package/dist/optional-typescript.d.ts.map +1 -0
  57. package/dist/optional-typescript.js +9 -0
  58. package/dist/pseudo-package-esbuild-plugin.js +1 -1
  59. package/dist/pseudo-package-esbuild-plugin.test.js +1 -1
  60. package/dist/request-converter.js +1 -1
  61. package/dist/resolve-sourcemap.test.d.ts +2 -0
  62. package/dist/resolve-sourcemap.test.d.ts.map +1 -0
  63. package/dist/resolve-sourcemap.test.js +194 -0
  64. package/dist/serde-checker.js +1 -1
  65. package/dist/standalone.d.ts +0 -3
  66. package/dist/standalone.d.ts.map +1 -1
  67. package/dist/standalone.js +17 -41
  68. package/dist/step-source-registration.test.d.ts +2 -0
  69. package/dist/step-source-registration.test.d.ts.map +1 -0
  70. package/dist/step-source-registration.test.js +82 -0
  71. package/dist/swc-esbuild-plugin.d.ts +10 -0
  72. package/dist/swc-esbuild-plugin.d.ts.map +1 -1
  73. package/dist/swc-esbuild-plugin.js +116 -14
  74. package/dist/swc-esbuild-plugin.test.js +370 -6
  75. package/dist/transform-utils.d.ts.map +1 -1
  76. package/dist/transform-utils.js +45 -6
  77. package/dist/transform-utils.test.js +78 -6
  78. package/dist/types.d.ts +61 -2
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/types.js +1 -1
  81. package/dist/vercel-build-output-api.d.ts +0 -2
  82. package/dist/vercel-build-output-api.d.ts.map +1 -1
  83. package/dist/vercel-build-output-api.js +37 -60
  84. package/dist/workflow-alias.js +1 -1
  85. package/dist/workflow-alias.test.js +2 -2
  86. package/dist/workflows-extractor.js +8 -3
  87. package/dist/workflows-extractor.test.d.ts +2 -0
  88. package/dist/workflows-extractor.test.d.ts.map +1 -0
  89. package/dist/workflows-extractor.test.js +70 -0
  90. package/package.json +8 -7
  91. package/dist/apply-swc-transform.js.map +0 -1
  92. package/dist/base-builder.js.map +0 -1
  93. package/dist/build-queue.js.map +0 -1
  94. package/dist/config-helpers.js.map +0 -1
  95. package/dist/constants.js.map +0 -1
  96. package/dist/discover-entries-esbuild-plugin.js.map +0 -1
  97. package/dist/discover-entries-esbuild-plugin.test.js.map +0 -1
  98. package/dist/esbuild-tsconfig.js.map +0 -1
  99. package/dist/esbuild-tsconfig.test.js.map +0 -1
  100. package/dist/get-input-files.test.js.map +0 -1
  101. package/dist/index.js.map +0 -1
  102. package/dist/module-specifier.js.map +0 -1
  103. package/dist/module-specifier.test.js.map +0 -1
  104. package/dist/node-module-esbuild-plugin.js.map +0 -1
  105. package/dist/node-module-esbuild-plugin.test.js.map +0 -1
  106. package/dist/pseudo-package-esbuild-plugin.js.map +0 -1
  107. package/dist/pseudo-package-esbuild-plugin.test.js.map +0 -1
  108. package/dist/request-converter.js.map +0 -1
  109. package/dist/serde-checker.js.map +0 -1
  110. package/dist/standalone.js.map +0 -1
  111. package/dist/swc-esbuild-plugin.js.map +0 -1
  112. package/dist/swc-esbuild-plugin.test.js.map +0 -1
  113. package/dist/transform-utils.js.map +0 -1
  114. package/dist/transform-utils.test.js.map +0 -1
  115. package/dist/types.js.map +0 -1
  116. package/dist/vercel-build-output-api.js.map +0 -1
  117. package/dist/workflow-alias.js.map +0 -1
  118. package/dist/workflow-alias.test.js.map +0 -1
  119. package/dist/workflows-extractor.js.map +0 -1
@@ -23,4 +23,4 @@ export function createBuildQueue() {
23
23
  return queue;
24
24
  };
25
25
  }
26
- //# sourceMappingURL=build-queue.js.map
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnVpbGQtcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFOUIsT0FBTyxDQUFDLElBQXlCLEVBQWlCLEVBQUU7UUFDbEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBhIGJ1aWxkIHF1ZXVlIHRoYXQgc2VyaWFsaXplcyBhc3luYyB0YXNrcyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy5cbiAqXG4gKiBXaGVuIHJhcGlkIGZpbGUgY2hhbmdlcyB0cmlnZ2VyIG11bHRpcGxlIGJ1aWxkcywgdGhpcyBlbnN1cmVzIHRoZXkgcnVuXG4gKiBzZXF1ZW50aWFsbHkgcmF0aGVyIHRoYW4gY29uY3VycmVudGx5LCBhdm9pZGluZyBpc3N1ZXMgbGlrZTpcbiAqIC0gUGFydGlhbCBmaWxlIHJlYWRzIGR1cmluZyB3cml0ZXNcbiAqIC0gQ29ycnVwdGVkIG1lcmdlIG9wZXJhdGlvbnNcbiAqIC0gRHVwbGljYXRlL2NvbmZsaWN0aW5nIGJ1aWxkc1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBlbnF1ZXVlID0gY3JlYXRlQnVpbGRRdWV1ZSgpO1xuICpcbiAqIC8vIFRoZXNlIHdpbGwgcnVuIHNlcXVlbnRpYWxseSwgbm90IGNvbmN1cnJlbnRseVxuICogZW5xdWV1ZSgoKSA9PiBidWlsZGVyLmJ1aWxkKCkpO1xuICogZW5xdWV1ZSgoKSA9PiBidWlsZGVyLmJ1aWxkKCkpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnVpbGRRdWV1ZSgpIHtcbiAgbGV0IHF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgcmV0dXJuICh0YXNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgcXVldWUgPSBxdWV1ZS50aGVuKHRhc2spLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcXVldWU7XG4gIH07XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import type { WorkflowConfig } from './types.js';
1
+ import type { SourcemapMode, WorkflowConfig } from './types.js';
2
2
  export interface DecoratorOptions {
3
3
  decorators: boolean;
4
4
  legacyDecorator: boolean;
@@ -40,5 +40,8 @@ export declare function createBaseBuilderConfig(options: {
40
40
  watch?: boolean;
41
41
  externalPackages?: string[];
42
42
  runtime?: string;
43
+ sourcemap?: SourcemapMode;
43
44
  }): Omit<WorkflowConfig, 'buildTarget'>;
45
+ export declare function resolveConfiguredProjectRoot(workingDir: string, configuredRoot: string): string;
46
+ export declare function resolveProjectRoot(workingDir: string): string;
44
47
  //# sourceMappingURL=config-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-helpers.d.ts","sourceRoot":"","sources":["../src/config-helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAgC3B;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED;;;GAGG;AACH,wBAAsB,6CAA6C,CACjE,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,8BAA8B,CAAC,CAMzC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAYtC"}
1
+ {"version":3,"file":"config-helpers.d.ts","sourceRoot":"","sources":["../src/config-helpers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAgC3B;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED;;;GAGG;AACH,wBAAsB,6CAA6C,CACjE,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,8BAA8B,CAAC,CAMzC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAatC;AA6CD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAIR;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAmB7D"}
@@ -1,4 +1,6 @@
1
+ import { statSync } from 'node:fs';
1
2
  import { readFile } from 'node:fs/promises';
3
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
2
4
  import { findUp } from 'find-up';
3
5
  import JSON5 from 'json5';
4
6
  /**
@@ -72,6 +74,66 @@ export function createBaseBuilderConfig(options) {
72
74
  webhookBundlePath: '', // Not used by base builder methods
73
75
  externalPackages: options.externalPackages,
74
76
  runtime: options.runtime,
77
+ sourcemap: options.sourcemap,
75
78
  };
76
79
  }
77
- //# sourceMappingURL=config-helpers.js.map
80
+ const WORKSPACE_ROOT_FILES = ['pnpm-workspace.yaml'];
81
+ const PROJECT_ROOT_FILES = [
82
+ 'pnpm-lock.yaml',
83
+ 'package-lock.json',
84
+ 'yarn.lock',
85
+ 'bun.lock',
86
+ 'bun.lockb',
87
+ ];
88
+ function fileExists(path) {
89
+ try {
90
+ return statSync(path).isFile();
91
+ }
92
+ catch {
93
+ return false;
94
+ }
95
+ }
96
+ function findRootFile(names, workingDir) {
97
+ let current = resolve(workingDir);
98
+ while (true) {
99
+ for (const name of names) {
100
+ const file = join(current, name);
101
+ if (fileExists(file)) {
102
+ return file;
103
+ }
104
+ }
105
+ const parent = dirname(current);
106
+ if (parent === current) {
107
+ return undefined;
108
+ }
109
+ current = parent;
110
+ }
111
+ }
112
+ function findProjectRootFile(workingDir) {
113
+ return (findRootFile(WORKSPACE_ROOT_FILES, workingDir) ??
114
+ findRootFile(PROJECT_ROOT_FILES, workingDir));
115
+ }
116
+ export function resolveConfiguredProjectRoot(workingDir, configuredRoot) {
117
+ return isAbsolute(configuredRoot)
118
+ ? configuredRoot
119
+ : resolve(workingDir, configuredRoot);
120
+ }
121
+ export function resolveProjectRoot(workingDir) {
122
+ let rootFile = findProjectRootFile(workingDir);
123
+ if (!rootFile) {
124
+ return resolve(workingDir);
125
+ }
126
+ while (true) {
127
+ const currentDir = dirname(rootFile);
128
+ const parentDir = dirname(currentDir);
129
+ if (parentDir === currentDir) {
130
+ return currentDir;
131
+ }
132
+ const parentRootFile = findProjectRootFile(parentDir);
133
+ if (!parentRootFile) {
134
+ return currentDir;
135
+ }
136
+ rootFile = parentRootFile;
137
+ }
138
+ }
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWMxQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLCtCQUErQixDQUNuRCxZQUFnQztJQUVoQyxNQUFNLGNBQWMsR0FBcUI7UUFDdkMsVUFBVSxFQUFFLEtBQUs7UUFDakIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsaUJBQWlCLEVBQUUsS0FBSztLQUN6QixDQUFDO0lBRUYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQ1osS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUV2RCxxRkFBcUY7UUFDckYsTUFBTSxzQkFBc0IsR0FDMUIsZUFBZSxDQUFDLHNCQUFzQixLQUFLLElBQUksQ0FBQztRQUNsRCxNQUFNLHFCQUFxQixHQUN6QixlQUFlLENBQUMscUJBQXFCLEtBQUssSUFBSSxDQUFDO1FBRWpELE9BQU87WUFDTCxVQUFVLEVBQUUsc0JB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QUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsVUFBa0IsRUFDbEIsY0FBc0I7SUFFdEIsT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxjQUFjO1FBQ2hCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBa0I7SUFDbkQsSUFBSSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELFFBQVEsR0FBRyxjQUFjLENBQUM7SUFDNUIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmluZFVwIH0gZnJvbSAnZmluZC11cCc7XG5pbXBvcnQgSlNPTjUgZnJvbSAnanNvbjUnO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VtYXBNb2RlLCBXb3JrZmxvd0NvbmZpZyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRvck9wdGlvbnMge1xuICBkZWNvcmF0b3JzOiBib29sZWFuO1xuICBsZWdhY3lEZWNvcmF0b3I6IGJvb2xlYW47XG4gIGRlY29yYXRvck1ldGFkYXRhOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCB7XG4gIG9wdGlvbnM6IERlY29yYXRvck9wdGlvbnM7XG4gIGNvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkcyB0c2NvbmZpZy5qc29uIGFuZCBleHRyYWN0cyBkZWNvcmF0b3ItcmVsYXRlZCBjb21waWxlciBvcHRpb25zLlxuICogUmV0dXJucyBkZWNvcmF0b3Igb3B0aW9ucyBiYXNlZCBvbiBleHBlcmltZW50YWxEZWNvcmF0b3JzIGFuZCBlbWl0RGVjb3JhdG9yTWV0YWRhdGEgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIHRzY29uZmlnUGF0aCAtIFBhdGggdG8gdHNjb25maWcuanNvbiBvciBqc2NvbmZpZy5qc29uXG4gKiBAcmV0dXJucyBEZWNvcmF0b3JPcHRpb25zIHdpdGggc2V0dGluZ3MgYmFzZWQgb24gdHNjb25maWcgY29tcGlsZXJPcHRpb25zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZWNvcmF0b3JPcHRpb25zRnJvbVRzQ29uZmlnKFxuICB0c2NvbmZpZ1BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zPiB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBEZWNvcmF0b3JPcHRpb25zID0ge1xuICAgIGRlY29yYXRvcnM6IGZhbHNlLFxuICAgIGxlZ2FjeURlY29yYXRvcjogZmFsc2UsXG4gICAgZGVjb3JhdG9yTWV0YWRhdGE6IGZhbHNlLFxuICB9O1xuXG4gIGlmICghdHNjb25maWdQYXRoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUodHNjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCB0c2NvbmZpZzogeyBjb21waWxlck9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9ID1cbiAgICAgIEpTT041LnBhcnNlKGNvbnRlbnQpO1xuICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9IHRzY29uZmlnLmNvbXBpbGVyT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIE1hdGNoIE5leHQuanMgYmVoYXZpb3I6IGVuYWJsZSBkZWNvcmF0b3JzIG9ubHkgd2hlbiBleHBlcmltZW50YWxEZWNvcmF0b3JzIGlzIHRydWVcbiAgICBjb25zdCBleHBlcmltZW50YWxEZWNvcmF0b3JzID1cbiAgICAgIGNvbXBpbGVyT3B0aW9ucy5leHBlcmltZW50YWxEZWNvcmF0b3JzID09PSB0cnVlO1xuICAgIGNvbnN0IGVtaXREZWNvcmF0b3JNZXRhZGF0YSA9XG4gICAgICBjb21waWxlck9wdGlvbnMuZW1pdERlY29yYXRvck1ldGFkYXRhID09PSB0cnVlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlY29yYXRvcnM6IGV4cGVyaW1lbnRhbERlY29yYXRvcnMsXG4gICAgICBsZWdhY3lEZWNvcmF0b3I6IGV4cGVyaW1lbnRhbERlY29yYXRvcnMsXG4gICAgICBkZWNvcmF0b3JNZXRhZGF0YTogZXhwZXJpbWVudGFsRGVjb3JhdG9ycyAmJiBlbWl0RGVjb3JhdG9yTWV0YWRhdGEsXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgcmVhZCBvciBwYXJzZSB0aGUgdHNjb25maWcsIHJldHVybiBkZWZhdWx0c1xuICAgIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIHRzY29uZmlnLmpzb24gaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSAob3IgYW5jZXN0b3JzKSBhbmQgZXh0cmFjdHMgZGVjb3JhdG9yIG9wdGlvbnMuXG4gKiBDb21iaW5lcyB0c2NvbmZpZyBkaXNjb3Zlcnkgd2l0aCBkZWNvcmF0b3Igb3B0aW9uIGV4dHJhY3Rpb24gZm9yIGNvbnZlbmllbmNlLlxuICpcbiAqIEBwYXJhbSBjd2QgLSBEaXJlY3RvcnkgdG8gc3RhcnQgc2VhcmNoaW5nIGZvciB0c2NvbmZpZy5qc29uXG4gKiBAcmV0dXJucyBEZWNvcmF0b3JPcHRpb25zIHdpdGggc2V0dGluZ3MgYmFzZWQgb24gdHNjb25maWcgY29tcGlsZXJPcHRpb25zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZWNvcmF0b3JPcHRpb25zRm9yRGlyZWN0b3J5KFxuICBjd2Q6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zPiB7XG4gIGNvbnN0IHsgb3B0aW9ucyB9ID0gYXdhaXQgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKGN3ZCk7XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEZpbmRzIHRzY29uZmlnLmpzb24vanNjb25maWcuanNvbiBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IHRyZWUgYW5kIHJldHVybnNcbiAqIGJvdGggZGVjb3JhdG9yIG9wdGlvbnMgYW5kIHRoZSBjb25maWcgcGF0aCB1c2VkIHRvIGRlcml2ZSB0aGVtLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKFxuICBjd2Q6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGF3YWl0IGZpbmRVcChbJ3RzY29uZmlnLmpzb24nLCAnanNjb25maWcuanNvbiddLCB7XG4gICAgY3dkLFxuICB9KTtcbiAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IGdldERlY29yYXRvck9wdGlvbnNGcm9tVHNDb25maWcoY29uZmlnUGF0aCk7XG4gIHJldHVybiB7IG9wdGlvbnMsIGNvbmZpZ1BhdGggfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcGFydGlhbCBjb25maWd1cmF0aW9uIGZvciBidWlsZGVycyB0aGF0IGRvbid0IHVzZSBidW5kbGUgcGF0aHMgZGlyZWN0bHkuXG4gKiBVc2VkIGJ5IGZyYW1ld29yayBpbnRlZ3JhdGlvbnMgbGlrZSBOaXRybyB3aGVyZSB0aGUgYnVpbGRlciBjb21wdXRlcyBwYXRocyBpbnRlcm5hbGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZUJ1aWxkZXJDb25maWcob3B0aW9uczoge1xuICB3b3JraW5nRGlyOiBzdHJpbmc7XG4gIHByb2plY3RSb290Pzogc3RyaW5nO1xuICBkaXJzPzogc3RyaW5nW107XG4gIHdhdGNoPzogYm9vbGVhbjtcbiAgZXh0ZXJuYWxQYWNrYWdlcz86IHN0cmluZ1tdO1xuICBydW50aW1lPzogc3RyaW5nO1xuICBzb3VyY2VtYXA/OiBTb3VyY2VtYXBNb2RlO1xufSk6IE9taXQ8V29ya2Zsb3dDb25maWcsICdidWlsZFRhcmdldCc+IHtcbiAgcmV0dXJuIHtcbiAgICBkaXJzOiBvcHRpb25zLmRpcnMgPz8gWyd3b3JrZmxvd3MnXSxcbiAgICBwcm9qZWN0Um9vdDogb3B0aW9ucy5wcm9qZWN0Um9vdCxcbiAgICB3b3JraW5nRGlyOiBvcHRpb25zLndvcmtpbmdEaXIsXG4gICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2gsXG4gICAgc3RlcHNCdW5kbGVQYXRoOiAnJywgLy8gTm90IHVzZWQgYnkgYmFzZSBidWlsZGVyIG1ldGhvZHNcbiAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiAnJywgLy8gTm90IHVzZWQgYnkgYmFzZSBidWlsZGVyIG1ldGhvZHNcbiAgICB3ZWJob29rQnVuZGxlUGF0aDogJycsIC8vIE5vdCB1c2VkIGJ5IGJhc2UgYnVpbGRlciBtZXRob2RzXG4gICAgZXh0ZXJuYWxQYWNrYWdlczogb3B0aW9ucy5leHRlcm5hbFBhY2thZ2VzLFxuICAgIHJ1bnRpbWU6IG9wdGlvbnMucnVudGltZSxcbiAgICBzb3VyY2VtYXA6IG9wdGlvbnMuc291cmNlbWFwLFxuICB9O1xufVxuXG5jb25zdCBXT1JLU1BBQ0VfUk9PVF9GSUxFUyA9IFsncG5wbS13b3Jrc3BhY2UueWFtbCddO1xuY29uc3QgUFJPSkVDVF9ST09UX0ZJTEVTID0gW1xuICAncG5wbS1sb2NrLnlhbWwnLFxuICAncGFja2FnZS1sb2NrLmpzb24nLFxuICAneWFybi5sb2NrJyxcbiAgJ2J1bi5sb2NrJyxcbiAgJ2J1bi5sb2NrYicsXG5dO1xuXG5mdW5jdGlvbiBmaWxlRXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBzdGF0U3luYyhwYXRoKS5pc0ZpbGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRSb290RmlsZShuYW1lczogc3RyaW5nW10sIHdvcmtpbmdEaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50ID0gcmVzb2x2ZSh3b3JraW5nRGlyKTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgY29uc3QgZmlsZSA9IGpvaW4oY3VycmVudCwgbmFtZSk7XG4gICAgICBpZiAoZmlsZUV4aXN0cyhmaWxlKSkge1xuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBwYXJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZFByb2plY3RSb290RmlsZSh3b3JraW5nRGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKFxuICAgIGZpbmRSb290RmlsZShXT1JLU1BBQ0VfUk9PVF9GSUxFUywgd29ya2luZ0RpcikgPz9cbiAgICBmaW5kUm9vdEZpbGUoUFJPSkVDVF9ST09UX0ZJTEVTLCB3b3JraW5nRGlyKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmZpZ3VyZWRQcm9qZWN0Um9vdChcbiAgd29ya2luZ0Rpcjogc3RyaW5nLFxuICBjb25maWd1cmVkUm9vdDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICByZXR1cm4gaXNBYnNvbHV0ZShjb25maWd1cmVkUm9vdClcbiAgICA/IGNvbmZpZ3VyZWRSb290XG4gICAgOiByZXNvbHZlKHdvcmtpbmdEaXIsIGNvbmZpZ3VyZWRSb290KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQcm9qZWN0Um9vdCh3b3JraW5nRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcm9vdEZpbGUgPSBmaW5kUHJvamVjdFJvb3RGaWxlKHdvcmtpbmdEaXIpO1xuICBpZiAoIXJvb3RGaWxlKSB7XG4gICAgcmV0dXJuIHJlc29sdmUod29ya2luZ0Rpcik7XG4gIH1cblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGN1cnJlbnREaXIgPSBkaXJuYW1lKHJvb3RGaWxlKTtcbiAgICBjb25zdCBwYXJlbnREaXIgPSBkaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgIGlmIChwYXJlbnREaXIgPT09IGN1cnJlbnREaXIpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFJvb3RGaWxlID0gZmluZFByb2plY3RSb290RmlsZShwYXJlbnREaXIpO1xuICAgIGlmICghcGFyZW50Um9vdEZpbGUpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RGlyO1xuICAgIH1cbiAgICByb290RmlsZSA9IHBhcmVudFJvb3RGaWxlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-helpers.test.d.ts","sourceRoot":"","sources":["../src/config-helpers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { describe, expect, it, onTestFinished } from 'vitest';
5
+ import { resolveProjectRoot } from './config-helpers.js';
6
+ describe('resolveProjectRoot', () => {
7
+ it('prefers the workspace root over app lockfiles', () => {
8
+ const repoRoot = mkdtempSync(join(tmpdir(), 'workflow-project-root-'));
9
+ onTestFinished(() => rmSync(repoRoot, { recursive: true, force: true }));
10
+ const appRoot = join(repoRoot, 'apps/web');
11
+ mkdirSync(appRoot, { recursive: true });
12
+ writeFileSync(join(repoRoot, 'pnpm-workspace.yaml'), 'packages: []\n');
13
+ writeFileSync(join(appRoot, 'package-lock.json'), '{}\n');
14
+ expect(resolveProjectRoot(appRoot)).toBe(repoRoot);
15
+ });
16
+ });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWhlbHBlcnMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWctaGVscGVycy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTFELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXJTeW5jLCBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIG9uVGVzdEZpbmlzaGVkIH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IHJlc29sdmVQcm9qZWN0Um9vdCB9IGZyb20gJy4vY29uZmlnLWhlbHBlcnMuanMnO1xuXG5kZXNjcmliZSgncmVzb2x2ZVByb2plY3RSb290JywgKCkgPT4ge1xuICBpdCgncHJlZmVycyB0aGUgd29ya3NwYWNlIHJvb3Qgb3ZlciBhcHAgbG9ja2ZpbGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlcG9Sb290ID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3dvcmtmbG93LXByb2plY3Qtcm9vdC0nKSk7XG4gICAgb25UZXN0RmluaXNoZWQoKCkgPT4gcm1TeW5jKHJlcG9Sb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSkpO1xuXG4gICAgY29uc3QgYXBwUm9vdCA9IGpvaW4ocmVwb1Jvb3QsICdhcHBzL3dlYicpO1xuICAgIG1rZGlyU3luYyhhcHBSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4ocmVwb1Jvb3QsICdwbnBtLXdvcmtzcGFjZS55YW1sJyksICdwYWNrYWdlczogW11cXG4nKTtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oYXBwUm9vdCwgJ3BhY2thZ2UtbG9jay5qc29uJyksICd7fVxcbicpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVQcm9qZWN0Um9vdChhcHBSb290KSkudG9CZShyZXBvUm9vdCk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,8 +1,23 @@
1
1
  /**
2
- * Queue trigger configuration for workflow step execution.
3
- * Steps are queued to the __wkf_step_* topic.
2
+ * Creates a queue trigger configuration for the workflow handler.
3
+ * Handles both workflow orchestration and step execution on the same route.
4
+ * Background steps are queued back to the workflow topic with a stepId.
5
+ *
6
+ * When `namespace` is provided, the trigger topic is scoped to avoid
7
+ * collisions with other frameworks or direct Workflow SDK usage in the
8
+ * same deployment.
9
+ *
10
+ * @example
11
+ * // default: topic = '__wkf_workflow_*'
12
+ * createWorkflowQueueTrigger()
13
+ *
14
+ * @example
15
+ * // namespaced: topic = '__custom_wkf_workflow_*'
16
+ * createWorkflowQueueTrigger({ namespace: 'custom' })
4
17
  */
5
- export declare const STEP_QUEUE_TRIGGER: {
18
+ export declare function createWorkflowQueueTrigger(options?: {
19
+ namespace?: string;
20
+ }): {
6
21
  type: "queue/v2beta";
7
22
  topic: string;
8
23
  consumer: string;
@@ -10,8 +25,19 @@ export declare const STEP_QUEUE_TRIGGER: {
10
25
  initialDelaySeconds: number;
11
26
  };
12
27
  /**
13
- * Queue trigger configuration for workflow orchestration.
14
- * Workflows are queued to the __wkf_workflow_* topic.
28
+ * Creates the optional second argument for generated `workflowEntrypoint()`
29
+ * calls. The namespace is resolved while building so generated route files do
30
+ * not need `WORKFLOW_QUEUE_NAMESPACE` at runtime.
31
+ */
32
+ export declare function createWorkflowEntrypointOptionsCode(options?: {
33
+ namespace?: string;
34
+ basePath?: string;
35
+ /** Raw code identifier/expression emitted into generated route files, not data. */
36
+ routeModuleBodyStartedAt?: string;
37
+ }): string;
38
+ export declare function createWorkflowRouteHandlersCode(workflowEntrypointCall: string): string;
39
+ /**
40
+ * Default queue trigger (no namespace). Backward compatible.
15
41
  */
16
42
  export declare const WORKFLOW_QUEUE_TRIGGER: {
17
43
  type: "queue/v2beta";
@@ -20,4 +46,39 @@ export declare const WORKFLOW_QUEUE_TRIGGER: {
20
46
  retryAfterSeconds: number;
21
47
  initialDelaySeconds: number;
22
48
  };
49
+ /**
50
+ * Returns the queue trigger configuration for workflow (flow) routes.
51
+ *
52
+ * Builds on `createWorkflowQueueTrigger()` — the namespace comes from
53
+ * `options` or `WORKFLOW_QUEUE_NAMESPACE`, resolved at call time. When
54
+ * `WORKFLOW_SEQUENTIAL_REPLAYS` is enabled, sets `maxConcurrency: 1` so the
55
+ * queue processes at most one flow invocation per concrete topic at a time.
56
+ * Paired with the per-run physical topic naming in `@workflow/world-vercel`
57
+ * (which appends the run id to the flow topic), this enforces at most one
58
+ * orchestrator invocation per run. Queued step invocations share this flow
59
+ * trigger rather than using a separate route.
60
+ *
61
+ * Integrations that write their own flow trigger config instead of calling
62
+ * this must mirror the conditional `maxConcurrency: 1` themselves — the
63
+ * runtime half (per-run topics) activates from the env var alone, and without
64
+ * the trigger half those topics are not serialized.
65
+ *
66
+ * Must be read at build time, where the env var gates what is written into
67
+ * the route's `experimentalTriggers` config.
68
+ */
69
+ /**
70
+ * Whether sequential replays are enabled (`WORKFLOW_SEQUENTIAL_REPLAYS=1`). Read
71
+ * at call time.
72
+ */
73
+ export declare function isSequentialReplaysEnabled(): boolean;
74
+ export declare function getWorkflowQueueTrigger(options?: {
75
+ namespace?: string;
76
+ }): {
77
+ maxConcurrency?: number | undefined;
78
+ type: "queue/v2beta";
79
+ topic: string;
80
+ consumer: string;
81
+ retryAfterSeconds: number;
82
+ initialDelaySeconds: number;
83
+ };
23
84
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;CAM9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAMlC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;EAU1E;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CAAC,OAAO,CAAC,EAAE;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,UAyBA;AAED,wBAAgB,+BAA+B,CAC7C,sBAAsB,EAAE,MAAM,UAM/B;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;CAA+B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;EAOvE"}
package/dist/constants.js CHANGED
@@ -1,23 +1,110 @@
1
+ const QUEUE_NAMESPACE_PATTERN = /^[a-z][a-z0-9]*$/;
2
+ function resolveQueueNamespace(namespace) {
3
+ return namespace ?? process.env.WORKFLOW_QUEUE_NAMESPACE ?? undefined;
4
+ }
5
+ function getQueueTopicPrefix(namespace) {
6
+ if (namespace !== undefined) {
7
+ if (!QUEUE_NAMESPACE_PATTERN.test(namespace)) {
8
+ throw new Error(`Invalid queue namespace "${namespace}": must be lowercase alphanumeric, starting with a letter`);
9
+ }
10
+ return `__${namespace}_wkf_workflow_`;
11
+ }
12
+ return '__wkf_workflow_';
13
+ }
1
14
  /**
2
- * Queue trigger configuration for workflow step execution.
3
- * Steps are queued to the __wkf_step_* topic.
15
+ * Creates a queue trigger configuration for the workflow handler.
16
+ * Handles both workflow orchestration and step execution on the same route.
17
+ * Background steps are queued back to the workflow topic with a stepId.
18
+ *
19
+ * When `namespace` is provided, the trigger topic is scoped to avoid
20
+ * collisions with other frameworks or direct Workflow SDK usage in the
21
+ * same deployment.
22
+ *
23
+ * @example
24
+ * // default: topic = '__wkf_workflow_*'
25
+ * createWorkflowQueueTrigger()
26
+ *
27
+ * @example
28
+ * // namespaced: topic = '__custom_wkf_workflow_*'
29
+ * createWorkflowQueueTrigger({ namespace: 'custom' })
4
30
  */
5
- export const STEP_QUEUE_TRIGGER = {
6
- type: 'queue/v2beta',
7
- topic: '__wkf_step_*',
8
- consumer: 'default',
9
- retryAfterSeconds: 5, // Delay between retries (default: 60)
10
- initialDelaySeconds: 0, // Initial delay before first delivery (default: 0)
11
- };
31
+ export function createWorkflowQueueTrigger(options) {
32
+ const namespace = resolveQueueNamespace(options?.namespace);
33
+ return {
34
+ type: 'queue/v2beta',
35
+ topic: `${getQueueTopicPrefix(namespace)}*`,
36
+ consumer: 'default',
37
+ retryAfterSeconds: 5, // Delay between retries (default: 60)
38
+ initialDelaySeconds: 0, // Initial delay before first delivery (default: 0)
39
+ };
40
+ }
12
41
  /**
13
- * Queue trigger configuration for workflow orchestration.
14
- * Workflows are queued to the __wkf_workflow_* topic.
42
+ * Creates the optional second argument for generated `workflowEntrypoint()`
43
+ * calls. The namespace is resolved while building so generated route files do
44
+ * not need `WORKFLOW_QUEUE_NAMESPACE` at runtime.
15
45
  */
16
- export const WORKFLOW_QUEUE_TRIGGER = {
17
- type: 'queue/v2beta',
18
- topic: '__wkf_workflow_*',
19
- consumer: 'default',
20
- retryAfterSeconds: 5, // Delay between retries (default: 60)
21
- initialDelaySeconds: 0, // Initial delay before first delivery (default: 0)
22
- };
23
- //# sourceMappingURL=constants.js.map
46
+ export function createWorkflowEntrypointOptionsCode(options) {
47
+ const namespace = resolveQueueNamespace(options?.namespace);
48
+ const fields = [];
49
+ if (namespace) {
50
+ // Reuse prefix construction for namespace validation.
51
+ getQueueTopicPrefix(namespace);
52
+ fields.push(`namespace: ${JSON.stringify(namespace)}`);
53
+ }
54
+ if (options?.basePath !== undefined) {
55
+ fields.push(`basePath: ${JSON.stringify(options.basePath)}`);
56
+ }
57
+ if (options?.routeModuleBodyStartedAt) {
58
+ fields.push(`routeModuleBodyStartedAt: ${options.routeModuleBodyStartedAt}`);
59
+ }
60
+ if (fields.length === 0) {
61
+ return '';
62
+ }
63
+ return `, { ${fields.join(', ')} }`;
64
+ }
65
+ export function createWorkflowRouteHandlersCode(workflowEntrypointCall) {
66
+ return `export const POST = ${workflowEntrypointCall};
67
+ export const GET = POST;
68
+ export const HEAD = POST;
69
+ export const OPTIONS = POST;`;
70
+ }
71
+ /**
72
+ * Default queue trigger (no namespace). Backward compatible.
73
+ */
74
+ export const WORKFLOW_QUEUE_TRIGGER = createWorkflowQueueTrigger();
75
+ /**
76
+ * Returns the queue trigger configuration for workflow (flow) routes.
77
+ *
78
+ * Builds on `createWorkflowQueueTrigger()` — the namespace comes from
79
+ * `options` or `WORKFLOW_QUEUE_NAMESPACE`, resolved at call time. When
80
+ * `WORKFLOW_SEQUENTIAL_REPLAYS` is enabled, sets `maxConcurrency: 1` so the
81
+ * queue processes at most one flow invocation per concrete topic at a time.
82
+ * Paired with the per-run physical topic naming in `@workflow/world-vercel`
83
+ * (which appends the run id to the flow topic), this enforces at most one
84
+ * orchestrator invocation per run. Queued step invocations share this flow
85
+ * trigger rather than using a separate route.
86
+ *
87
+ * Integrations that write their own flow trigger config instead of calling
88
+ * this must mirror the conditional `maxConcurrency: 1` themselves — the
89
+ * runtime half (per-run topics) activates from the env var alone, and without
90
+ * the trigger half those topics are not serialized.
91
+ *
92
+ * Must be read at build time, where the env var gates what is written into
93
+ * the route's `experimentalTriggers` config.
94
+ */
95
+ /**
96
+ * Whether sequential replays are enabled (`WORKFLOW_SEQUENTIAL_REPLAYS=1`). Read
97
+ * at call time.
98
+ */
99
+ export function isSequentialReplaysEnabled() {
100
+ return process.env.WORKFLOW_SEQUENTIAL_REPLAYS === '1';
101
+ }
102
+ export function getWorkflowQueueTrigger(options) {
103
+ return {
104
+ ...createWorkflowQueueTrigger(options),
105
+ ...(isSequentialReplaysEnabled() && {
106
+ maxConcurrency: 1,
107
+ }),
108
+ };
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDO0FBRW5ELFNBQVMscUJBQXFCLENBQUMsU0FBa0I7SUFDL0MsT0FBTyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxTQUFTLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsU0FBa0I7SUFDN0MsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEJBQTRCLFNBQVMsMkRBQTJELENBQ2pHLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxLQUFLLFNBQVMsZ0JBQWdCLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE9BQWdDO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU1RCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQXVCO1FBQzdCLEtBQUssRUFBRSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHO1FBQzNDLFFBQVEsRUFBRSxTQUFTO1FBQ25CLGlCQUFpQixFQUFFLENBQUMsRUFBRSxzQ0FBc0M7UUFDNUQsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLG1EQUFtRDtLQUM1RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBQUMsT0FLbkQ7SUFDQyxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxzREFBc0Q7UUFDdEQsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBSSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLENBQUMsSUFBSSxDQUNULDZCQUE2QixPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsT0FBTyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QyxDQUFDO0FBRUQsTUFBTSxVQUFVLCtCQUErQixDQUM3QyxzQkFBOEI7SUFFOUIsT0FBTyx1QkFBdUIsc0JBQXNCOzs7NkJBR3pCLENBQUM7QUFDOUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztBQUVuRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNIOzs7R0FHRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixLQUFLLEdBQUcsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWdDO0lBQ3RFLE9BQU87UUFDTCxHQUFHLDBCQUEwQixDQUFDLE9BQU8sQ0FBQztRQUN0QyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSTtZQUNsQyxjQUFjLEVBQUUsQ0FBQztTQUNsQixDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBRVUVVRV9OQU1FU1BBQ0VfUEFUVEVSTiA9IC9eW2Etel1bYS16MC05XSokLztcblxuZnVuY3Rpb24gcmVzb2x2ZVF1ZXVlTmFtZXNwYWNlKG5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBuYW1lc3BhY2UgPz8gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFID8/IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWVUb3BpY1ByZWZpeChuYW1lc3BhY2U/OiBzdHJpbmcpIHtcbiAgaWYgKG5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFRVUVVRV9OQU1FU1BBQ0VfUEFUVEVSTi50ZXN0KG5hbWVzcGFjZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcXVldWUgbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCI6IG11c3QgYmUgbG93ZXJjYXNlIGFscGhhbnVtZXJpYywgc3RhcnRpbmcgd2l0aCBhIGxldHRlcmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBfXyR7bmFtZXNwYWNlfV93a2Zfd29ya2Zsb3dfYDtcbiAgfVxuXG4gIHJldHVybiAnX193a2Zfd29ya2Zsb3dfJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcXVldWUgdHJpZ2dlciBjb25maWd1cmF0aW9uIGZvciB0aGUgd29ya2Zsb3cgaGFuZGxlci5cbiAqIEhhbmRsZXMgYm90aCB3b3JrZmxvdyBvcmNoZXN0cmF0aW9uIGFuZCBzdGVwIGV4ZWN1dGlvbiBvbiB0aGUgc2FtZSByb3V0ZS5cbiAqIEJhY2tncm91bmQgc3RlcHMgYXJlIHF1ZXVlZCBiYWNrIHRvIHRoZSB3b3JrZmxvdyB0b3BpYyB3aXRoIGEgc3RlcElkLlxuICpcbiAqIFdoZW4gYG5hbWVzcGFjZWAgaXMgcHJvdmlkZWQsIHRoZSB0cmlnZ2VyIHRvcGljIGlzIHNjb3BlZCB0byBhdm9pZFxuICogY29sbGlzaW9ucyB3aXRoIG90aGVyIGZyYW1ld29ya3Mgb3IgZGlyZWN0IFdvcmtmbG93IFNESyB1c2FnZSBpbiB0aGVcbiAqIHNhbWUgZGVwbG95bWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gZGVmYXVsdDogdG9waWMgPSAnX193a2Zfd29ya2Zsb3dfKidcbiAqIGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKClcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gbmFtZXNwYWNlZDogdG9waWMgPSAnX19jdXN0b21fd2tmX3dvcmtmbG93XyonXG4gKiBjcmVhdGVXb3JrZmxvd1F1ZXVlVHJpZ2dlcih7IG5hbWVzcGFjZTogJ2N1c3RvbScgfSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKG9wdGlvbnM/OiB7IG5hbWVzcGFjZT86IHN0cmluZyB9KSB7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHJlc29sdmVRdWV1ZU5hbWVzcGFjZShvcHRpb25zPy5uYW1lc3BhY2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3F1ZXVlL3YyYmV0YScgYXMgY29uc3QsXG4gICAgdG9waWM6IGAke2dldFF1ZXVlVG9waWNQcmVmaXgobmFtZXNwYWNlKX0qYCxcbiAgICBjb25zdW1lcjogJ2RlZmF1bHQnLFxuICAgIHJldHJ5QWZ0ZXJTZWNvbmRzOiA1LCAvLyBEZWxheSBiZXR3ZWVuIHJldHJpZXMgKGRlZmF1bHQ6IDYwKVxuICAgIGluaXRpYWxEZWxheVNlY29uZHM6IDAsIC8vIEluaXRpYWwgZGVsYXkgYmVmb3JlIGZpcnN0IGRlbGl2ZXJ5IChkZWZhdWx0OiAwKVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBmb3IgZ2VuZXJhdGVkIGB3b3JrZmxvd0VudHJ5cG9pbnQoKWBcbiAqIGNhbGxzLiBUaGUgbmFtZXNwYWNlIGlzIHJlc29sdmVkIHdoaWxlIGJ1aWxkaW5nIHNvIGdlbmVyYXRlZCByb3V0ZSBmaWxlcyBkb1xuICogbm90IG5lZWQgYFdPUktGTE9XX1FVRVVFX05BTUVTUEFDRWAgYXQgcnVudGltZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlKG9wdGlvbnM/OiB7XG4gIG5hbWVzcGFjZT86IHN0cmluZztcbiAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBSYXcgY29kZSBpZGVudGlmaWVyL2V4cHJlc3Npb24gZW1pdHRlZCBpbnRvIGdlbmVyYXRlZCByb3V0ZSBmaWxlcywgbm90IGRhdGEuICovXG4gIHJvdXRlTW9kdWxlQm9keVN0YXJ0ZWRBdD86IHN0cmluZztcbn0pIHtcbiAgY29uc3QgbmFtZXNwYWNlID0gcmVzb2x2ZVF1ZXVlTmFtZXNwYWNlKG9wdGlvbnM/Lm5hbWVzcGFjZSk7XG4gIGNvbnN0IGZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAobmFtZXNwYWNlKSB7XG4gICAgLy8gUmV1c2UgcHJlZml4IGNvbnN0cnVjdGlvbiBmb3IgbmFtZXNwYWNlIHZhbGlkYXRpb24uXG4gICAgZ2V0UXVldWVUb3BpY1ByZWZpeChuYW1lc3BhY2UpO1xuICAgIGZpZWxkcy5wdXNoKGBuYW1lc3BhY2U6ICR7SlNPTi5zdHJpbmdpZnkobmFtZXNwYWNlKX1gKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zPy5iYXNlUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZmllbGRzLnB1c2goYGJhc2VQYXRoOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMuYmFzZVBhdGgpfWApO1xuICB9XG5cbiAgaWYgKG9wdGlvbnM/LnJvdXRlTW9kdWxlQm9keVN0YXJ0ZWRBdCkge1xuICAgIGZpZWxkcy5wdXNoKFxuICAgICAgYHJvdXRlTW9kdWxlQm9keVN0YXJ0ZWRBdDogJHtvcHRpb25zLnJvdXRlTW9kdWxlQm9keVN0YXJ0ZWRBdH1gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIGAsIHsgJHtmaWVsZHMuam9pbignLCAnKX0gfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3JrZmxvd1JvdXRlSGFuZGxlcnNDb2RlKFxuICB3b3JrZmxvd0VudHJ5cG9pbnRDYWxsOiBzdHJpbmdcbikge1xuICByZXR1cm4gYGV4cG9ydCBjb25zdCBQT1NUID0gJHt3b3JrZmxvd0VudHJ5cG9pbnRDYWxsfTtcbmV4cG9ydCBjb25zdCBHRVQgPSBQT1NUO1xuZXhwb3J0IGNvbnN0IEhFQUQgPSBQT1NUO1xuZXhwb3J0IGNvbnN0IE9QVElPTlMgPSBQT1NUO2A7XG59XG5cbi8qKlxuICogRGVmYXVsdCBxdWV1ZSB0cmlnZ2VyIChubyBuYW1lc3BhY2UpLiBCYWNrd2FyZCBjb21wYXRpYmxlLlxuICovXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUVVFVUVfVFJJR0dFUiA9IGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKCk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcXVldWUgdHJpZ2dlciBjb25maWd1cmF0aW9uIGZvciB3b3JrZmxvdyAoZmxvdykgcm91dGVzLlxuICpcbiAqIEJ1aWxkcyBvbiBgY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIoKWAg4oCUIHRoZSBuYW1lc3BhY2UgY29tZXMgZnJvbVxuICogYG9wdGlvbnNgIG9yIGBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0VgLCByZXNvbHZlZCBhdCBjYWxsIHRpbWUuIFdoZW5cbiAqIGBXT1JLRkxPV19TRVFVRU5USUFMX1JFUExBWVNgIGlzIGVuYWJsZWQsIHNldHMgYG1heENvbmN1cnJlbmN5OiAxYCBzbyB0aGVcbiAqIHF1ZXVlIHByb2Nlc3NlcyBhdCBtb3N0IG9uZSBmbG93IGludm9jYXRpb24gcGVyIGNvbmNyZXRlIHRvcGljIGF0IGEgdGltZS5cbiAqIFBhaXJlZCB3aXRoIHRoZSBwZXItcnVuIHBoeXNpY2FsIHRvcGljIG5hbWluZyBpbiBgQHdvcmtmbG93L3dvcmxkLXZlcmNlbGBcbiAqICh3aGljaCBhcHBlbmRzIHRoZSBydW4gaWQgdG8gdGhlIGZsb3cgdG9waWMpLCB0aGlzIGVuZm9yY2VzIGF0IG1vc3Qgb25lXG4gKiBvcmNoZXN0cmF0b3IgaW52b2NhdGlvbiBwZXIgcnVuLiBRdWV1ZWQgc3RlcCBpbnZvY2F0aW9ucyBzaGFyZSB0aGlzIGZsb3dcbiAqIHRyaWdnZXIgcmF0aGVyIHRoYW4gdXNpbmcgYSBzZXBhcmF0ZSByb3V0ZS5cbiAqXG4gKiBJbnRlZ3JhdGlvbnMgdGhhdCB3cml0ZSB0aGVpciBvd24gZmxvdyB0cmlnZ2VyIGNvbmZpZyBpbnN0ZWFkIG9mIGNhbGxpbmdcbiAqIHRoaXMgbXVzdCBtaXJyb3IgdGhlIGNvbmRpdGlvbmFsIGBtYXhDb25jdXJyZW5jeTogMWAgdGhlbXNlbHZlcyDigJQgdGhlXG4gKiBydW50aW1lIGhhbGYgKHBlci1ydW4gdG9waWNzKSBhY3RpdmF0ZXMgZnJvbSB0aGUgZW52IHZhciBhbG9uZSwgYW5kIHdpdGhvdXRcbiAqIHRoZSB0cmlnZ2VyIGhhbGYgdGhvc2UgdG9waWNzIGFyZSBub3Qgc2VyaWFsaXplZC5cbiAqXG4gKiBNdXN0IGJlIHJlYWQgYXQgYnVpbGQgdGltZSwgd2hlcmUgdGhlIGVudiB2YXIgZ2F0ZXMgd2hhdCBpcyB3cml0dGVuIGludG9cbiAqIHRoZSByb3V0ZSdzIGBleHBlcmltZW50YWxUcmlnZ2Vyc2AgY29uZmlnLlxuICovXG4vKipcbiAqIFdoZXRoZXIgc2VxdWVudGlhbCByZXBsYXlzIGFyZSBlbmFibGVkIChgV09SS0ZMT1dfU0VRVUVOVElBTF9SRVBMQVlTPTFgKS4gUmVhZFxuICogYXQgY2FsbCB0aW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXF1ZW50aWFsUmVwbGF5c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5XT1JLRkxPV19TRVFVRU5USUFMX1JFUExBWVMgPT09ICcxJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtmbG93UXVldWVUcmlnZ2VyKG9wdGlvbnM/OiB7IG5hbWVzcGFjZT86IHN0cmluZyB9KSB7XG4gIHJldHVybiB7XG4gICAgLi4uY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIob3B0aW9ucyksXG4gICAgLi4uKGlzU2VxdWVudGlhbFJlcGxheXNFbmFibGVkKCkgJiYge1xuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgfSksXG4gIH07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=constants.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.d.ts","sourceRoot":"","sources":["../src/constants.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
2
+ import { createWorkflowEntrypointOptionsCode, createWorkflowQueueTrigger, getWorkflowQueueTrigger, } from './constants.js';
3
+ describe('getWorkflowQueueTrigger', () => {
4
+ let originalStrict;
5
+ beforeEach(() => {
6
+ originalStrict = process.env.WORKFLOW_SEQUENTIAL_REPLAYS;
7
+ });
8
+ afterEach(() => {
9
+ if (originalStrict !== undefined) {
10
+ process.env.WORKFLOW_SEQUENTIAL_REPLAYS = originalStrict;
11
+ }
12
+ else {
13
+ delete process.env.WORKFLOW_SEQUENTIAL_REPLAYS;
14
+ }
15
+ });
16
+ it('omits maxConcurrency by default', () => {
17
+ delete process.env.WORKFLOW_SEQUENTIAL_REPLAYS;
18
+ const trigger = getWorkflowQueueTrigger();
19
+ expect(trigger.topic).toBe('__wkf_workflow_*');
20
+ expect('maxConcurrency' in trigger).toBe(false);
21
+ });
22
+ it('sets maxConcurrency: 1 when WORKFLOW_SEQUENTIAL_REPLAYS=1', () => {
23
+ process.env.WORKFLOW_SEQUENTIAL_REPLAYS = '1';
24
+ const trigger = getWorkflowQueueTrigger();
25
+ expect(trigger).toMatchObject({
26
+ topic: '__wkf_workflow_*',
27
+ maxConcurrency: 1,
28
+ });
29
+ });
30
+ it('does not set maxConcurrency for non-"1" values', () => {
31
+ process.env.WORKFLOW_SEQUENTIAL_REPLAYS = 'true';
32
+ const trigger = getWorkflowQueueTrigger();
33
+ expect('maxConcurrency' in trigger).toBe(false);
34
+ });
35
+ it('composes with an explicit namespace option', () => {
36
+ process.env.WORKFLOW_SEQUENTIAL_REPLAYS = '1';
37
+ expect(getWorkflowQueueTrigger({ namespace: 'custom' })).toMatchObject({
38
+ topic: '__custom_wkf_workflow_*',
39
+ maxConcurrency: 1,
40
+ });
41
+ });
42
+ it('resolves WORKFLOW_QUEUE_NAMESPACE at call time', () => {
43
+ delete process.env.WORKFLOW_SEQUENTIAL_REPLAYS;
44
+ process.env.WORKFLOW_QUEUE_NAMESPACE = 'callns';
45
+ try {
46
+ expect(getWorkflowQueueTrigger().topic).toBe('__callns_wkf_workflow_*');
47
+ }
48
+ finally {
49
+ delete process.env.WORKFLOW_QUEUE_NAMESPACE;
50
+ }
51
+ });
52
+ });
53
+ describe('createWorkflowQueueTrigger', () => {
54
+ afterEach(() => {
55
+ delete process.env.WORKFLOW_QUEUE_NAMESPACE;
56
+ });
57
+ it('uses the default workflow topic without a namespace', () => {
58
+ expect(createWorkflowQueueTrigger().topic).toBe('__wkf_workflow_*');
59
+ });
60
+ it('uses an explicit namespace when provided', () => {
61
+ expect(createWorkflowQueueTrigger({ namespace: 'custom' }).topic).toBe('__custom_wkf_workflow_*');
62
+ });
63
+ it('uses WORKFLOW_QUEUE_NAMESPACE when no explicit namespace is provided', () => {
64
+ process.env.WORKFLOW_QUEUE_NAMESPACE = 'custom';
65
+ expect(createWorkflowQueueTrigger().topic).toBe('__custom_wkf_workflow_*');
66
+ });
67
+ });
68
+ describe('createWorkflowEntrypointOptionsCode', () => {
69
+ afterEach(() => {
70
+ delete process.env.WORKFLOW_QUEUE_NAMESPACE;
71
+ });
72
+ it('omits runtime options without a namespace', () => {
73
+ expect(createWorkflowEntrypointOptionsCode()).toBe('');
74
+ });
75
+ it('inlines an explicit namespace', () => {
76
+ expect(createWorkflowEntrypointOptionsCode({ namespace: 'custom' })).toBe(', { namespace: "custom" }');
77
+ });
78
+ it('inlines WORKFLOW_QUEUE_NAMESPACE at build time', () => {
79
+ process.env.WORKFLOW_QUEUE_NAMESPACE = 'custom';
80
+ expect(createWorkflowEntrypointOptionsCode()).toBe(', { namespace: "custom" }');
81
+ });
82
+ it('inlines route module timing with namespace options', () => {
83
+ expect(createWorkflowEntrypointOptionsCode({
84
+ namespace: 'custom',
85
+ basePath: '/v2',
86
+ routeModuleBodyStartedAt: 'workflowRouteModuleBodyStartedAt',
87
+ })).toBe(', { namespace: "custom", basePath: "/v2", routeModuleBodyStartedAt: workflowRouteModuleBodyStartedAt }');
88
+ });
89
+ });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3RhbnRzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFckUsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQywwQkFBMEIsRUFDMUIsdUJBQXVCLEdBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsUUFBUSxDQUFDLHlCQUF5QixFQUFFLEdBQUcsRUFBRTtJQUN2QyxJQUFJLGNBQWtDLENBQUM7SUFFdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsY0FBYyxDQUFDO1FBQzNELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7UUFDekMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFD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QUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLDJCQUEyQixDQUM1QixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEdBQUcsUUFBUSxDQUFDO1FBRWhELE1BQU0sQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNoRCwyQkFBMkIsQ0FDNUIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQ0osbUNBQW1DLENBQUM7WUFDbEMsU0FBUyxFQUFFLFFBQVE7WUFDbkIsUUFBUSxFQUFFLEtBQUs7WUFDZix3QkFBd0IsRUFBRSxrQ0FBa0M7U0FDN0QsQ0FBQyxDQUNILENBQUMsSUFBSSxDQUNKLHdHQUF3RyxDQUN6RyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSxcbiAgY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIsXG4gIGdldFdvcmtmbG93UXVldWVUcmlnZ2VyLFxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbmRlc2NyaWJlKCdnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcicsICgpID0+IHtcbiAgbGV0IG9yaWdpbmFsU3RyaWN0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb3JpZ2luYWxTdHJpY3QgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19TRVFVRU5USUFMX1JFUExBWVM7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgaWYgKG9yaWdpbmFsU3RyaWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NFUVVFTlRJQUxfUkVQTEFZUyA9IG9yaWdpbmFsU3RyaWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU0VRVUVOVElBTF9SRVBMQVlTO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ29taXRzIG1heENvbmN1cnJlbmN5IGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LldPUktGTE9XX1NFUVVFTlRJQUxfUkVQTEFZUztcbiAgICBjb25zdCB0cmlnZ2VyID0gZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoKTtcbiAgICBleHBlY3QodHJpZ2dlci50b3BpYykudG9CZSgnX193a2Zfd29ya2Zsb3dfKicpO1xuICAgIGV4cGVjdCgnbWF4Q29uY3VycmVuY3knIGluIHRyaWdnZXIpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2V0cyBtYXhDb25jdXJyZW5jeTogMSB3aGVuIFdPUktGTE9XX1NFUVVFTlRJQUxfUkVQTEFZUz0xJywgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NFUVVFTlRJQUxfUkVQTEFZUyA9ICcxJztcbiAgICBjb25zdCB0cmlnZ2VyID0gZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoKTtcbiAgICBleHBlY3QodHJpZ2dlcikudG9NYXRjaE9iamVjdCh7XG4gICAgICB0b3BpYzogJ19fd2tmX3dvcmtmbG93XyonLFxuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCBzZXQgbWF4Q29uY3VycmVuY3kgZm9yIG5vbi1cIjFcIiB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU0VRVUVOVElBTF9SRVBMQVlTID0gJ3RydWUnO1xuICAgIGNvbnN0IHRyaWdnZXIgPSBnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpO1xuICAgIGV4cGVjdCgnbWF4Q29uY3VycmVuY3knIGluIHRyaWdnZXIpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnY29tcG9zZXMgd2l0aCBhbiBleHBsaWNpdCBuYW1lc3BhY2Ugb3B0aW9uJywgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1NFUVVFTlRJQUxfUkVQTEFZUyA9ICcxJztcbiAgICBleHBlY3QoZ2V0V29ya2Zsb3dRdWV1ZVRyaWdnZXIoeyBuYW1lc3BhY2U6ICdjdXN0b20nIH0pKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHRvcGljOiAnX19jdXN0b21fd2tmX3dvcmtmbG93XyonLFxuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZXNvbHZlcyBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0UgYXQgY2FsbCB0aW1lJywgKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19TRVFVRU5USUFMX1JFUExBWVM7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFID0gJ2NhbGxucyc7XG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdChnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcigpLnRvcGljKS50b0JlKCdfX2NhbGxuc193a2Zfd29ya2Zsb3dfKicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0U7XG4gIH0pO1xuXG4gIGl0KCd1c2VzIHRoZSBkZWZhdWx0IHdvcmtmbG93IHRvcGljIHdpdGhvdXQgYSBuYW1lc3BhY2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKCkudG9waWMpLnRvQmUoJ19fd2tmX3dvcmtmbG93XyonKTtcbiAgfSk7XG5cbiAgaXQoJ3VzZXMgYW4gZXhwbGljaXQgbmFtZXNwYWNlIHdoZW4gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyKHsgbmFtZXNwYWNlOiAnY3VzdG9tJyB9KS50b3BpYykudG9CZShcbiAgICAgICdfX2N1c3RvbV93a2Zfd29ya2Zsb3dfKidcbiAgICApO1xuICB9KTtcblxuICBpdCgndXNlcyBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0Ugd2hlbiBubyBleHBsaWNpdCBuYW1lc3BhY2UgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUVVFVUVfTkFNRVNQQUNFID0gJ2N1c3RvbSc7XG5cbiAgICBleHBlY3QoY3JlYXRlV29ya2Zsb3dRdWV1ZVRyaWdnZXIoKS50b3BpYykudG9CZSgnX19jdXN0b21fd2tmX3dvcmtmbG93XyonKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NyZWF0ZVdvcmtmbG93RW50cnlwb2ludE9wdGlvbnNDb2RlJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0U7XG4gIH0pO1xuXG4gIGl0KCdvbWl0cyBydW50aW1lIG9wdGlvbnMgd2l0aG91dCBhIG5hbWVzcGFjZScsICgpID0+IHtcbiAgICBleHBlY3QoY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUoKSkudG9CZSgnJyk7XG4gIH0pO1xuXG4gIGl0KCdpbmxpbmVzIGFuIGV4cGxpY2l0IG5hbWVzcGFjZScsICgpID0+IHtcbiAgICBleHBlY3QoY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUoeyBuYW1lc3BhY2U6ICdjdXN0b20nIH0pKS50b0JlKFxuICAgICAgJywgeyBuYW1lc3BhY2U6IFwiY3VzdG9tXCIgfSdcbiAgICApO1xuICB9KTtcblxuICBpdCgnaW5saW5lcyBXT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0UgYXQgYnVpbGQgdGltZScsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19RVUVVRV9OQU1FU1BBQ0UgPSAnY3VzdG9tJztcblxuICAgIGV4cGVjdChjcmVhdGVXb3JrZmxvd0VudHJ5cG9pbnRPcHRpb25zQ29kZSgpKS50b0JlKFxuICAgICAgJywgeyBuYW1lc3BhY2U6IFwiY3VzdG9tXCIgfSdcbiAgICApO1xuICB9KTtcblxuICBpdCgnaW5saW5lcyByb3V0ZSBtb2R1bGUgdGltaW5nIHdpdGggbmFtZXNwYWNlIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUoe1xuICAgICAgICBuYW1lc3BhY2U6ICdjdXN0b20nLFxuICAgICAgICBiYXNlUGF0aDogJy92MicsXG4gICAgICAgIHJvdXRlTW9kdWxlQm9keVN0YXJ0ZWRBdDogJ3dvcmtmbG93Um91dGVNb2R1bGVCb2R5U3RhcnRlZEF0JyxcbiAgICAgIH0pXG4gICAgKS50b0JlKFxuICAgICAgJywgeyBuYW1lc3BhY2U6IFwiY3VzdG9tXCIsIGJhc2VQYXRoOiBcIi92MlwiLCByb3V0ZU1vZHVsZUJvZHlTdGFydGVkQXQ6IHdvcmtmbG93Um91dGVNb2R1bGVCb2R5U3RhcnRlZEF0IH0nXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1,7 +1,9 @@
1
1
  import type { Plugin } from 'esbuild';
2
2
  export declare const jsTsRegex: RegExp;
3
3
  export declare const importParents: Map<string, Set<string>>;
4
- export declare function parentHasChild(parent: string, childToFind: string): boolean;
4
+ export declare function parentHasChild(parent: string, childToFind: string, { excludedRoots, }?: {
5
+ excludedRoots?: Iterable<string>;
6
+ }): boolean;
5
7
  export declare function createDiscoverEntriesPlugin(state: {
6
8
  discoveredSteps: Set<string>;
7
9
  discoveredWorkflows: Set<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"discover-entries-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/discover-entries-esbuild-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUtC,eAAO,MAAM,SAAS,QAAuC,CAAC;AAwB9D,eAAO,MAAM,aAAa,0BAAiC,CAAC;AAK5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CA0B3E;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IACL,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnC,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAiIR"}
1
+ {"version":3,"file":"discover-entries-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/discover-entries-esbuild-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA2BtC,eAAO,MAAM,SAAS,QAAuC,CAAC;AAyB9D,eAAO,MAAM,aAAa,0BAAiC,CAAC;AAK5D,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,EACE,aAAa,GACd,GAAE;IACD,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC7B,GACL,OAAO,CA8BT;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE;IACL,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnC,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAiIR"}