@autometa/jest-executor 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @autometa/jest-executor
2
2
 
3
+ ## 0.6.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 8df323c: feat: tag filters for disposer methods
8
+ - Updated dependencies [8df323c]
9
+ - @autometa/injection@0.1.5
10
+ - @autometa/app@0.4.2
11
+ - @autometa/gherkin@0.7.2
12
+ - @autometa/scopes@0.7.2
13
+ - @autometa/test-builder@0.4.2
14
+ - @autometa/config@0.1.27
15
+ - @autometa/events@0.3.2
16
+
17
+ ## 0.6.1
18
+
19
+ ### Patch Changes
20
+
21
+ - da669a3: feat: disposable injectables
22
+ - Updated dependencies [da669a3]
23
+ - @autometa/injection@0.1.4
24
+ - @autometa/app@0.4.1
25
+ - @autometa/config@0.1.26
26
+ - @autometa/scopes@0.7.1
27
+ - @autometa/test-builder@0.4.1
28
+ - @autometa/gherkin@0.7.1
29
+ - @autometa/events@0.3.1
30
+
3
31
  ## 0.6.0
4
32
 
5
33
  ### Minor Changes
package/dist/esm/index.js CHANGED
@@ -52,6 +52,7 @@ function chooseTimeout(timeout1, timeout2) {
52
52
  // src/executor.ts
53
53
  import { NullTimeout as NullTimeout2, Timeout as Timeout2 } from "@autometa/scopes";
54
54
  import { Container, defineContainerContext } from "@autometa/injection";
55
+ import { isTagsMatch } from "@autometa/gherkin";
55
56
  var outlineApps = /* @__PURE__ */ new Map();
56
57
  var examplesApps = /* @__PURE__ */ new Map();
57
58
  var featureApps = /* @__PURE__ */ new Map();
@@ -112,15 +113,30 @@ function execute({ app, world }, global, bridge, events, config) {
112
113
  hook.options.timeout
113
114
  ).getTimeout(config).milliseconds;
114
115
  beforeAll(async () => {
115
- if (!hook.canExecute(...bridge.data.gherkin.tags)) {
116
+ const tags2 = bridge?.data?.gherkin?.tags ?? [];
117
+ if (!hook.canExecute(...tags2)) {
116
118
  return;
117
119
  }
118
- const tags2 = bridge?.data?.gherkin?.tags ?? [];
120
+ events.beforeFeature.emitStart({
121
+ title: hook.description,
122
+ tags: [...tags2]
123
+ });
119
124
  const report = await hook.execute(staticApp, ...tags2);
120
125
  if (report.error) {
121
126
  const message = `${hook.name}: ${hook.description} failed to execute.`;
127
+ events.beforeFeature.emitEnd({
128
+ title: hook.description,
129
+ tags: [...tags2],
130
+ status: "FAILED",
131
+ error: report.error
132
+ });
122
133
  throw new AutomationError(message, { cause: report.error });
123
134
  }
135
+ events.beforeFeature.emitEnd({
136
+ title: hook.description,
137
+ tags: [...tags2],
138
+ status: "PASSED"
139
+ });
124
140
  }, hookTimeout);
125
141
  });
126
142
  bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {
@@ -129,17 +145,32 @@ function execute({ app, world }, global, bridge, events, config) {
129
145
  hook.options.timeout
130
146
  ).getTimeout(config).milliseconds;
131
147
  afterAll(async () => {
148
+ const tags2 = bridge?.data?.gherkin?.tags ?? [];
132
149
  if (!hook.canExecute(...bridge.data.gherkin.tags)) {
133
150
  return;
134
151
  }
152
+ events.afterFeature.emitStart({
153
+ title: hook.description,
154
+ tags: [...tags2]
155
+ });
135
156
  const testName = expect.getState().currentTestName;
136
- const tags2 = bridge?.data?.gherkin?.tags ?? [];
137
157
  const apps = featureApps.get(testName);
138
158
  const report = await hook.execute(staticApp, apps, ...tags2);
139
159
  if (report.error) {
140
160
  const message = `${hook.name}: ${hook.description} failed to execute.`;
161
+ events.afterFeature.emitEnd({
162
+ title: hook.description,
163
+ tags: [...tags2],
164
+ status: "FAILED",
165
+ error: report.error
166
+ });
141
167
  throw new AutomationError(message, { cause: report.error });
142
168
  }
169
+ events.afterFeature.emitEnd({
170
+ title: hook.description,
171
+ tags: [...tags2],
172
+ status: "PASSED"
173
+ });
143
174
  }, hookTimeout);
144
175
  });
145
176
  bootstrapSetupHooks(globalBridge, staticApp, events, [
@@ -147,31 +178,41 @@ function execute({ app, world }, global, bridge, events, config) {
147
178
  chosenTimeout
148
179
  ]);
149
180
  bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);
150
- bootstrapBeforeHooks(bridge, globalBridge, () => localApp, events, [
151
- config,
152
- chosenTimeout
153
- ]);
154
- bootstrapBeforeHooks(bridge, bridge, () => localApp, events, [
155
- config,
156
- chosenTimeout
157
- ]);
158
- bootstrapBackground(bridge, bridge, () => localApp, events, [
159
- config,
160
- chosenTimeout
161
- ]);
162
- bootstrapScenarios(bridge, bridge, () => localApp, staticApp, events, [
181
+ bootstrapBeforeHooks(
182
+ bridge,
183
+ globalBridge,
184
+ () => [testContainer, localApp],
185
+ events,
186
+ [config, chosenTimeout]
187
+ );
188
+ bootstrapBeforeHooks(
189
+ bridge,
190
+ bridge,
191
+ () => [testContainer, localApp],
192
+ events,
193
+ [config, chosenTimeout]
194
+ );
195
+ bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [
163
196
  config,
164
197
  chosenTimeout
165
198
  ]);
166
- bootstrapRules(bridge, () => localApp, staticApp, events, [
199
+ bootstrapScenarios(
200
+ bridge,
201
+ bridge,
202
+ () => [testContainer, localApp],
203
+ staticApp,
204
+ events,
205
+ [config, chosenTimeout]
206
+ );
207
+ bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [
167
208
  config,
168
209
  chosenTimeout
169
210
  ]);
170
- bootstrapAfterHooks(bridge, bridge, () => localApp, events, [
211
+ bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [
171
212
  config,
172
213
  chosenTimeout
173
214
  ]);
174
- bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [
215
+ bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [
175
216
  config,
176
217
  chosenTimeout
177
218
  ]);
@@ -180,6 +221,9 @@ function execute({ app, world }, global, bridge, events, config) {
180
221
  chosenTimeout
181
222
  ]);
182
223
  bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);
224
+ afterAll(async () => {
225
+ await globalContainer.disposeGlobal(tags, isTagsMatch);
226
+ });
183
227
  });
184
228
  afterAll(async () => {
185
229
  const failures = Query.find.failed(bridge);
@@ -232,7 +276,7 @@ function bootstrapBackground(root, bridge, localApp, events, [config, timeout])
232
276
  const steps = background.steps;
233
277
  try {
234
278
  for (const step of steps) {
235
- const app = localApp();
279
+ const [_, app] = localApp();
236
280
  const args = step.args?.(app) ?? [];
237
281
  const title2 = step.data.scope.stepText(
238
282
  step.data.gherkin.keyword,
@@ -300,9 +344,10 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
300
344
  title: bridge.title,
301
345
  tags: bridge.tags
302
346
  });
347
+ const [container, app] = localApp();
303
348
  try {
304
349
  for (const step of bridge.steps) {
305
- await tryRunStep(step, events, bridge, localApp);
350
+ await tryRunStep(step, events, bridge, () => app);
306
351
  }
307
352
  bridge.report = { passed: true };
308
353
  events.scenario.emitEnd({
@@ -322,6 +367,8 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
322
367
  const message = `${bridge.title} failed while executing a step`;
323
368
  const meta = { cause: error };
324
369
  throw new AutomationError(message, meta);
370
+ } finally {
371
+ await container.disposeAll(bridge.tags, isTagsMatch);
325
372
  }
326
373
  },
327
374
  chosenTimeout.milliseconds
@@ -393,9 +440,9 @@ function bootstrapScenarioOutline(root, bridge, localApp, staticApp, events, [co
393
440
  outlineApps.set(testName, []);
394
441
  }
395
442
  const apps = outlineApps.get(testName);
396
- const app = original();
443
+ const [container, app] = original();
397
444
  apps.push(app);
398
- return app;
445
+ return [container, app];
399
446
  };
400
447
  group(title, () => {
401
448
  beforeScenarioOutlineHooks.forEach((hook) => {
@@ -523,9 +570,9 @@ function bootstrapExamples(root, example, localApp, staticApp, events, timeout)
523
570
  examplesApps.set(testName, []);
524
571
  }
525
572
  const apps = examplesApps.get(testName);
526
- const app = original();
573
+ const [container, app] = original();
527
574
  apps.push(app);
528
- return app;
575
+ return [container, app];
529
576
  };
530
577
  const [group] = getGroupOrModifier(
531
578
  example,
@@ -633,9 +680,9 @@ function bootstrapRules(bridge, localApp, staticApp, events, [config, timeout])
633
680
  ruleApps.set(testName, []);
634
681
  }
635
682
  const apps = ruleApps.get(testName);
636
- const app = original();
683
+ const [container, app] = original();
637
684
  apps.push(app);
638
- return app;
685
+ return [container, app];
639
686
  };
640
687
  });
641
688
  bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {
@@ -802,7 +849,7 @@ function bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout])
802
849
  title: `${hook.name}: ${hook.description}`,
803
850
  tags: [...tags]
804
851
  });
805
- const report = await hook.execute(localApp(), ...tags);
852
+ const report = await hook.execute(localApp()[1], ...tags);
806
853
  events.before.emitEnd({
807
854
  title: `${hook.name}: ${hook.description}`,
808
855
  tags: [...tags],
@@ -877,7 +924,7 @@ function bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout])
877
924
  title: `${hook.name}: ${hook.description}`,
878
925
  tags: [...tags]
879
926
  });
880
- const report = await hook.execute(localApp(), ...tags);
927
+ const report = await hook.execute(localApp()[1], ...tags);
881
928
  events.after.emitEnd({
882
929
  title: `${hook.name}: ${hook.description}`,
883
930
  tags: [...tags],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/executor.ts","../../src/timeout-selector.ts","../../src/index.ts"],"sourcesContent":["import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBeforeHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBackground(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(bridge, bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapRules(bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n });\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const app = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, localApp);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n \n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n \n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp(), ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp(), ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n","import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n"],"mappings":"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","names":["NullTimeout","Timeout","tags","title"]}
1
+ {"version":3,"sources":["../../src/executor.ts","../../src/timeout-selector.ts","../../src/index.ts"],"sourcesContent":["import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\nimport { isTagsMatch } from \"@autometa/gherkin\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...tags)) {\n return;\n }\n events.beforeFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n events.afterFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n\n const testName = expect.getState().currentTestName as string;\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(\n bridge,\n globalBridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBeforeHooks(\n bridge,\n bridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(\n bridge,\n bridge,\n () => [testContainer, localApp],\n staticApp,\n events,\n [config, chosenTimeout]\n );\n bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n\n\n afterAll(async () => {\n await globalContainer.disposeGlobal(tags, isTagsMatch);\n });\n });\n\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const [_, app] = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n const [container, app] = localApp();\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, () => app);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n } finally {\n await container.disposeAll(bridge.tags, isTagsMatch);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n\n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp()[1], ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp()[1], ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n","import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n"],"mappings":"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","names":["NullTimeout","Timeout","tags","title"]}
package/dist/index.js CHANGED
@@ -59,6 +59,7 @@ function chooseTimeout(timeout1, timeout2) {
59
59
  // src/executor.ts
60
60
  var import_scopes2 = require("@autometa/scopes");
61
61
  var import_injection = require("@autometa/injection");
62
+ var import_gherkin = require("@autometa/gherkin");
62
63
  var outlineApps = /* @__PURE__ */ new Map();
63
64
  var examplesApps = /* @__PURE__ */ new Map();
64
65
  var featureApps = /* @__PURE__ */ new Map();
@@ -119,15 +120,30 @@ function execute({ app, world }, global, bridge, events, config) {
119
120
  hook.options.timeout
120
121
  ).getTimeout(config).milliseconds;
121
122
  (0, import_globals.beforeAll)(async () => {
122
- if (!hook.canExecute(...bridge.data.gherkin.tags)) {
123
+ const tags2 = bridge?.data?.gherkin?.tags ?? [];
124
+ if (!hook.canExecute(...tags2)) {
123
125
  return;
124
126
  }
125
- const tags2 = bridge?.data?.gherkin?.tags ?? [];
127
+ events.beforeFeature.emitStart({
128
+ title: hook.description,
129
+ tags: [...tags2]
130
+ });
126
131
  const report = await hook.execute(staticApp, ...tags2);
127
132
  if (report.error) {
128
133
  const message = `${hook.name}: ${hook.description} failed to execute.`;
134
+ events.beforeFeature.emitEnd({
135
+ title: hook.description,
136
+ tags: [...tags2],
137
+ status: "FAILED",
138
+ error: report.error
139
+ });
129
140
  throw new import_errors.AutomationError(message, { cause: report.error });
130
141
  }
142
+ events.beforeFeature.emitEnd({
143
+ title: hook.description,
144
+ tags: [...tags2],
145
+ status: "PASSED"
146
+ });
131
147
  }, hookTimeout);
132
148
  });
133
149
  bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {
@@ -136,17 +152,32 @@ function execute({ app, world }, global, bridge, events, config) {
136
152
  hook.options.timeout
137
153
  ).getTimeout(config).milliseconds;
138
154
  (0, import_globals.afterAll)(async () => {
155
+ const tags2 = bridge?.data?.gherkin?.tags ?? [];
139
156
  if (!hook.canExecute(...bridge.data.gherkin.tags)) {
140
157
  return;
141
158
  }
159
+ events.afterFeature.emitStart({
160
+ title: hook.description,
161
+ tags: [...tags2]
162
+ });
142
163
  const testName = import_globals.expect.getState().currentTestName;
143
- const tags2 = bridge?.data?.gherkin?.tags ?? [];
144
164
  const apps = featureApps.get(testName);
145
165
  const report = await hook.execute(staticApp, apps, ...tags2);
146
166
  if (report.error) {
147
167
  const message = `${hook.name}: ${hook.description} failed to execute.`;
168
+ events.afterFeature.emitEnd({
169
+ title: hook.description,
170
+ tags: [...tags2],
171
+ status: "FAILED",
172
+ error: report.error
173
+ });
148
174
  throw new import_errors.AutomationError(message, { cause: report.error });
149
175
  }
176
+ events.afterFeature.emitEnd({
177
+ title: hook.description,
178
+ tags: [...tags2],
179
+ status: "PASSED"
180
+ });
150
181
  }, hookTimeout);
151
182
  });
152
183
  bootstrapSetupHooks(globalBridge, staticApp, events, [
@@ -154,31 +185,41 @@ function execute({ app, world }, global, bridge, events, config) {
154
185
  chosenTimeout
155
186
  ]);
156
187
  bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);
157
- bootstrapBeforeHooks(bridge, globalBridge, () => localApp, events, [
158
- config,
159
- chosenTimeout
160
- ]);
161
- bootstrapBeforeHooks(bridge, bridge, () => localApp, events, [
162
- config,
163
- chosenTimeout
164
- ]);
165
- bootstrapBackground(bridge, bridge, () => localApp, events, [
166
- config,
167
- chosenTimeout
168
- ]);
169
- bootstrapScenarios(bridge, bridge, () => localApp, staticApp, events, [
188
+ bootstrapBeforeHooks(
189
+ bridge,
190
+ globalBridge,
191
+ () => [testContainer, localApp],
192
+ events,
193
+ [config, chosenTimeout]
194
+ );
195
+ bootstrapBeforeHooks(
196
+ bridge,
197
+ bridge,
198
+ () => [testContainer, localApp],
199
+ events,
200
+ [config, chosenTimeout]
201
+ );
202
+ bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [
170
203
  config,
171
204
  chosenTimeout
172
205
  ]);
173
- bootstrapRules(bridge, () => localApp, staticApp, events, [
206
+ bootstrapScenarios(
207
+ bridge,
208
+ bridge,
209
+ () => [testContainer, localApp],
210
+ staticApp,
211
+ events,
212
+ [config, chosenTimeout]
213
+ );
214
+ bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [
174
215
  config,
175
216
  chosenTimeout
176
217
  ]);
177
- bootstrapAfterHooks(bridge, bridge, () => localApp, events, [
218
+ bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [
178
219
  config,
179
220
  chosenTimeout
180
221
  ]);
181
- bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [
222
+ bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [
182
223
  config,
183
224
  chosenTimeout
184
225
  ]);
@@ -187,6 +228,9 @@ function execute({ app, world }, global, bridge, events, config) {
187
228
  chosenTimeout
188
229
  ]);
189
230
  bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);
231
+ (0, import_globals.afterAll)(async () => {
232
+ await globalContainer.disposeGlobal(tags, import_gherkin.isTagsMatch);
233
+ });
190
234
  });
191
235
  (0, import_globals.afterAll)(async () => {
192
236
  const failures = import_test_builder2.Query.find.failed(bridge);
@@ -239,7 +283,7 @@ function bootstrapBackground(root, bridge, localApp, events, [config, timeout])
239
283
  const steps = background.steps;
240
284
  try {
241
285
  for (const step of steps) {
242
- const app = localApp();
286
+ const [_, app] = localApp();
243
287
  const args = step.args?.(app) ?? [];
244
288
  const title2 = step.data.scope.stepText(
245
289
  step.data.gherkin.keyword,
@@ -307,9 +351,10 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
307
351
  title: bridge.title,
308
352
  tags: bridge.tags
309
353
  });
354
+ const [container, app] = localApp();
310
355
  try {
311
356
  for (const step of bridge.steps) {
312
- await tryRunStep(step, events, bridge, localApp);
357
+ await tryRunStep(step, events, bridge, () => app);
313
358
  }
314
359
  bridge.report = { passed: true };
315
360
  events.scenario.emitEnd({
@@ -329,6 +374,8 @@ function bootstrapScenario(bridge, localApp, events, [config, timeout]) {
329
374
  const message = `${bridge.title} failed while executing a step`;
330
375
  const meta = { cause: error };
331
376
  throw new import_errors.AutomationError(message, meta);
377
+ } finally {
378
+ await container.disposeAll(bridge.tags, import_gherkin.isTagsMatch);
332
379
  }
333
380
  },
334
381
  chosenTimeout.milliseconds
@@ -400,9 +447,9 @@ function bootstrapScenarioOutline(root, bridge, localApp, staticApp, events, [co
400
447
  outlineApps.set(testName, []);
401
448
  }
402
449
  const apps = outlineApps.get(testName);
403
- const app = original();
450
+ const [container, app] = original();
404
451
  apps.push(app);
405
- return app;
452
+ return [container, app];
406
453
  };
407
454
  group(title, () => {
408
455
  beforeScenarioOutlineHooks.forEach((hook) => {
@@ -530,9 +577,9 @@ function bootstrapExamples(root, example, localApp, staticApp, events, timeout)
530
577
  examplesApps.set(testName, []);
531
578
  }
532
579
  const apps = examplesApps.get(testName);
533
- const app = original();
580
+ const [container, app] = original();
534
581
  apps.push(app);
535
- return app;
582
+ return [container, app];
536
583
  };
537
584
  const [group] = getGroupOrModifier(
538
585
  example,
@@ -640,9 +687,9 @@ function bootstrapRules(bridge, localApp, staticApp, events, [config, timeout])
640
687
  ruleApps.set(testName, []);
641
688
  }
642
689
  const apps = ruleApps.get(testName);
643
- const app = original();
690
+ const [container, app] = original();
644
691
  apps.push(app);
645
- return app;
692
+ return [container, app];
646
693
  };
647
694
  });
648
695
  bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {
@@ -809,7 +856,7 @@ function bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout])
809
856
  title: `${hook.name}: ${hook.description}`,
810
857
  tags: [...tags]
811
858
  });
812
- const report = await hook.execute(localApp(), ...tags);
859
+ const report = await hook.execute(localApp()[1], ...tags);
813
860
  events.before.emitEnd({
814
861
  title: `${hook.name}: ${hook.description}`,
815
862
  tags: [...tags],
@@ -884,7 +931,7 @@ function bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout])
884
931
  title: `${hook.name}: ${hook.description}`,
885
932
  tags: [...tags]
886
933
  });
887
- const report = await hook.execute(localApp(), ...tags);
934
+ const report = await hook.execute(localApp()[1], ...tags);
888
935
  events.after.emitEnd({
889
936
  title: `${hook.name}: ${hook.description}`,
890
937
  tags: [...tags],
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/executor.ts","../src/timeout-selector.ts"],"sourcesContent":["import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n","import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = bridge?.data?.gherkin?.tags ?? [];\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBeforeHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapBackground(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(bridge, bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapRules(bridge, () => localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => localApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n });\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const app = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, localApp);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => App,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const app = original();\n apps.push(app);\n return app;\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n \n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n \n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp(), ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp(), ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,0BASO;AACP,qBASO;AAGP,oBAA0D;AAE1D,IAAAA,uBAAsB;;;ACxBtB,oBAAqC;AAE9B,SAAS,WAAW,QAA6B,QAAgB;AACtE,MAAI,UAAU,EAAE,kBAAkB,4BAAc;AAC9C,WAAO;AAAA,EACT;AACA,SAAO,sBAAQ,KAAK,QAAQ,SAAS,MAAM,OAAO;AACpD;AAEO,SAAS,cACd,UACA,UACA;AACA,MAAI,oBAAoB,yBAAW,EAAE,oBAAoB,4BAAc;AACrE,WAAO;AAAA,MACL,YAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,IAC5C;AAAA,EACF;AACA,MAAI,oBAAoB,yBAAW,EAAE,oBAAoB,4BAAc;AACrE,WAAO;AAAA,MACL,YAAY,WAAW,KAAK,MAAM,QAAQ;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AAAA,IACL,YAAY,WAAW,KAAK,MAAM,sBAAQ,KAAK,CAAC,CAAC;AAAA,EACnD;AACF;;;ADCA,IAAAC,iBAAkD;AAClD,uBAAkD;AAElD,IAAM,cAAc,oBAAI,IAAmB;AAC3C,IAAM,eAAe,oBAAI,IAAmB;AAC5C,IAAM,cAAc,oBAAI,IAAmB;AAC3C,IAAM,WAAW,oBAAI,IAAmB;AAEjC,SAAS,QACd,EAAE,KAAK,MAAM,GACb,QACA,QACA,QACA,QACA;AACA,QAAM,eAAe,IAAI,iCAAa,MAAM;AAC5C,QAAM,eAAe,OAAO,KAAK,MAAM,MAAM,OAAO,KAAK,OAAO;AAChE,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxB;AAAA,IACA,OAAO,QAAQ,MAAM;AAAA,EACvB;AACA,QAAM,gBAAgB;AAAA,IACpB,IAAI,2BAAY;AAAA,IAChB,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM;AACnB,gCAAU,MAAM;AACd,WAAO,QAAQ,UAAU;AAAA,MACvB,OAAO;AAAA,MACP,MAAM,OAAO,KAAK,MAAM;AAAA,MACxB;AAAA,MACA,MAAM,CAAC,GAAG,OAAO,KAAK,QAAQ,IAAI;AAAA,IACpC,CAAC;AAAA,EACH,GAAG,cAAc,YAAY;AAC7B,QAAM,cAAc,MAAM;AACxB,UAAM,OAAO,CAAC,GAAG,OAAO,KAAK,QAAQ,IAAI;AACzC,UAAM,UAAU,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,CAAC;AAE9D,QAAI;AACJ,QAAI;AAEJ,QAAI;AACJ,UAAM,6BAAyB,yCAAuB,QAAQ;AAC9D,UAAM,kBAAkB,IAAI,2BAAU,sBAAsB;AAC5D,oBAAgB,eAAe,KAAK;AACpC,UAAM,YAAiB,gBAAgB,IAAI,GAAG;AAC9C,cAAU,QAAQ,gBAAgB,IAAI,KAAK;AAC3C,cAAU,KAAK;AACf,kCAAU,MAAM;AACd,UAAI,SAAS;AACX,cAAM,QAAQ,SAAS,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;AAC5C,4BAAK,WAAW,KAAK;AAAA,MACvB;AAAA,IACF,CAAC;AAED,mCAAW,MAAM;AACf,YAAM,OACJ,sBAAO,SAAS,EAAE,uBAAmB,qBAAM,yBAAyB;AACtE,iCAAuB,yCAAuB,IAAI;AAClD,sBAAgB,IAAI,2BAAU,oBAAoB;AAClD,oBAAc,eAAe,KAAK;AAClC,iBAAW,cAAc,IAAI,GAAG;AAChC,eAAS,QAAQ,cAAc,IAAI,KAAK;AACxC,eAAS,KAAK;AACd,UAAI,CAAC,YAAY,IAAI,IAAI,GAAG;AAC1B,oBAAY,IAAI,MAAM,CAAC,CAAC;AAAA,MAC1B;AACA,kBAAY,IAAI,IAAI,GAAG,KAAK,QAAQ;AAAA,IACtC,CAAC;AAED,WAAO,KAAK,MAAM,MAAM,mBAAmB,QAAQ,CAAC,SAAS;AAC3D,YAAM,cAAc;AAAA,QAClB;AAAA,QACA,KAAK,QAAQ;AAAA,MACf,EAAE,WAAW,MAAM,EAAE;AACrB,oCAAU,YAAY;AACpB,YAAI,CAAC,KAAK,WAAW,GAAG,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjD;AAAA,QACF;AACA,cAAMC,QAAO,QAAQ,MAAM,SAAS,QAAQ,CAAC;AAC7C,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,GAAGA,KAAI;AACpD,YAAI,OAAO,OAAO;AAChB,gBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,gBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,QAC5D;AAAA,MACF,GAAG,WAAW;AAAA,IAChB,CAAC;AAED,WAAO,KAAK,MAAM,MAAM,kBAAkB,QAAQ,CAAC,SAAS;AAC1D,YAAM,cAAc;AAAA,QAClB;AAAA,QACA,KAAK,QAAQ;AAAA,MACf,EAAE,WAAW,MAAM,EAAE;AACrB,mCAAS,YAAY;AACnB,YAAI,CAAC,KAAK,WAAW,GAAG,OAAO,KAAK,QAAQ,IAAI,GAAG;AACjD;AAAA,QACF;AACA,cAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,cAAMA,QAAO,QAAQ,MAAM,SAAS,QAAQ,CAAC;AAC7C,cAAM,OAAO,YAAY,IAAI,QAAQ;AACrC,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,MAAM,GAAGA,KAAI;AAC1D,YAAI,OAAO,OAAO;AAChB,gBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,gBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,QAC5D;AAAA,MACF,GAAG,WAAW;AAAA,IAChB,CAAC;AAED,wBAAoB,cAAc,WAAW,QAAQ;AAAA,MACnD;AAAA,MACA;AAAA,IACF,CAAC;AACD,wBAAoB,QAAQ,WAAW,QAAQ,CAAC,QAAQ,aAAa,CAAC;AACtE,yBAAqB,QAAQ,cAAc,MAAM,UAAU,QAAQ;AAAA,MACjE;AAAA,MACA;AAAA,IACF,CAAC;AACD,yBAAqB,QAAQ,QAAQ,MAAM,UAAU,QAAQ;AAAA,MAC3D;AAAA,MACA;AAAA,IACF,CAAC;AACD,wBAAoB,QAAQ,QAAQ,MAAM,UAAU,QAAQ;AAAA,MAC1D;AAAA,MACA;AAAA,IACF,CAAC;AACD,uBAAmB,QAAQ,QAAQ,MAAM,UAAU,WAAW,QAAQ;AAAA,MACpE;AAAA,MACA;AAAA,IACF,CAAC;AACD,mBAAe,QAAQ,MAAM,UAAU,WAAW,QAAQ;AAAA,MACxD;AAAA,MACA;AAAA,IACF,CAAC;AACD,wBAAoB,QAAQ,QAAQ,MAAM,UAAU,QAAQ;AAAA,MAC1D;AAAA,MACA;AAAA,IACF,CAAC;AACD,wBAAoB,QAAQ,cAAc,MAAM,UAAU,QAAQ;AAAA,MAChE;AAAA,MACA;AAAA,IACF,CAAC;AACD,2BAAuB,cAAc,WAAW,QAAQ;AAAA,MACtD;AAAA,MACA;AAAA,IACF,CAAC;AACD,2BAAuB,QAAQ,WAAW,QAAQ,CAAC,QAAQ,aAAa,CAAC;AAAA,EAC3E,CAAC;AACD,+BAAS,YAAY;AAEnB,UAAM,WAAW,2BAAM,KAAK,OAAO,MAAM;AACzC,UAAM,SACJ,aAAa,SACT,YACA,SAAS,WAAW,IACpB,WACA;AACN,WAAO,QAAQ,QAAQ;AAAA,MACrB,OAAO;AAAA,MACP;AAAA,MACA,MAAM,CAAC,GAAG,OAAO,KAAK,QAAQ,IAAI;AAAA,MAClC;AAAA,IACF,CAAC;AACD,UAAM,UAAU,MAAM,OAAO,kBAAkB;AAC/C,UAAM,cAAc,QAAQ,OAAO,CAAC,MAAM,EAAE,WAAW,UAAU,EAAE;AACnE,QAAI,cAAc,GAAG;AACnB,YAAM,QAAQ,GAAG,WAAW,IAAI,QAAQ,MAAM;AAC9C,YAAM,UAAU,GAAG,KAAK;AACxB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,gBAAY,MAAM;AAClB,gBAAY,MAAM;AAClB,iBAAa,MAAM;AACnB,aAAS,MAAM;AAAA,EACjB,CAAC;AACH;AAEO,SAAS,oBACd,MACA,QACA,UACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,aAAa,OAAO;AAC1B,MAAI,CAAC;AAAY;AAEjB,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM,EAAE;AAErB,QAAM,OAAO,QAAQ,MAAM,SAAS,QAAQ,CAAC;AAC7C,MAAI,KAAK,IAAI,OAAO,KAAK,KAAK,IAAI,UAAU;AAAG;AAC/C,iCAAW,YAAY;AACrB,UAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,QAAI,CAAC;AAAU,YAAM,IAAI,8BAAgB,8BAA8B;AACvE,UAAM,qBAAiB,0BAAK,MAAM,QAAQ;AAC1C,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI;AAAA,QACR,iEAAiE,QAAQ;AAAA,MAC3E;AAAA,IACF;AACA,UAAM,QAAQ,WAAW,KAAK,MAAM,MAAM,WAAW,KAAK,OAAO;AACjE,WAAO,OAAO,UAAU;AAAA,MACtB;AAAA,MACA,MAAM,CAAC,GAAG,IAAI;AAAA,IAChB,CAAC;AACD,UAAM,QAAQ,WAAW;AACzB,QAAI;AACF,iBAAW,QAAQ,OAAO;AACxB,cAAM,MAAM,SAAS;AACrB,cAAM,OAAO,KAAK,OAAO,GAAG,KAAK,CAAC;AAClC,cAAMC,SAAQ,KAAK,KAAK,MAAM;AAAA,UAC5B,KAAK,KAAK,QAAQ;AAAA,UAClB,KAAK,KAAK,QAAQ;AAAA,QACpB;AAEA,eAAO,KAAK,UAAU;AAAA,UACpB,OAAAA;AAAA,UACA;AAAA,UACA,YAAY,KAAK,KAAK,MAAM,WAAW;AAAA,QACzC,CAAC;AAED,cAAM,KAAK,KAAK,MAAM,QAAQ,KAAK,KAAK,SAAS,MAAM,GAAG;AAE1D,eAAO,KAAK,QAAQ;AAAA,UAClB,YAAY,KAAK,KAAK,MAAM,WAAW;AAAA,UACvC,OAAAA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO,OAAO,QAAQ;AAAA,QACpB;AAAA,QACA,MAAM,CAAC,GAAG,IAAI;AAAA,QACd,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,SAAS,GAAG;AACV,aAAO,OAAO,QAAQ;AAAA,QACpB;AAAA,QACA,MAAM,CAAC,GAAG,IAAI;AAAA,QACd,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AACD,YAAM,UAAU,GAAG,KAAK;AAAA,QACtB,QAAQ;AACV,YAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,EAAW,CAAC;AAAA,IAC1D;AAAA,EACF,GAAG,aAAa;AAClB;AACO,SAAS,mBACd,MACA,QACA,UACA,WACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM;AACnB,YAAU,QAAQ,CAAC,aAAa;AAC9B,QAAI,UAAU,QAAQ,GAAG;AACvB,+BAAyB,MAAM,UAAU,UAAU,WAAW,QAAQ;AAAA,QACpE;AAAA,QACA;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,sBAAkB,UAAU,UAAU,QAAQ,CAAC,QAAQ,aAAa,CAAC;AAAA,EACvE,CAAC;AACH;AAEO,SAAS,kBACd,QACA,UACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM;AACnB,QAAM,eAAe,KAAK,MAAM,MAAM,KAAK,OAAO;AAClD,QAAM,OAAO,kBAAkB,QAAQ,OAAO,QAAQ,MAAM,SAAS;AACrE;AAAA,IACE;AAAA,IACA,YAAY;AACV,aAAO,SAAS,UAAU;AAAA,QACxB,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,MACf,CAAC;AACD,UAAI;AACF,mBAAW,QAAQ,OAAO,OAAO;AAC/B,gBAAM,WAAW,MAAM,QAAQ,QAAQ,QAAQ;AAAA,QACjD;AACA,eAAO,SAAS,EAAE,QAAQ,KAAK;AAC/B,eAAO,SAAS,QAAQ;AAAA,UACtB,OAAO,OAAO;AAAA,UACd,MAAM,OAAO;AAAA,UACb,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,SAAS,GAAG;AACV,cAAM,QAAQ;AACd,eAAO,SAAS,EAAE,QAAQ,OAAO,OAAO,EAAW;AACnD,eAAO,SAAS,QAAQ;AAAA,UACtB,OAAO,OAAO;AAAA,UACd,MAAM,OAAO;AAAA,UACb,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AACD,cAAM,UAAU,GAAG,OAAO,KAAK;AAC/B,cAAM,OAAO,EAAE,OAAO,MAAM;AAC5B,cAAM,IAAI,8BAAgB,SAAS,IAAI;AAAA,MACzC;AAAA,IACF;AAAA,IACA,cAAc;AAAA,EAChB;AACF;AAEA,eAAe,WACb,MACA,QACA,QACA,UACA;AACA,QAAM,cAAc,MAAM,QAAQ,QAAQ,QAAQ;AACpD;AAEA,eAAe,cACb,MACA,QACA,QACA,UACA;AACA,QAAM,QAAQ,KAAK,KAAK,MAAM;AAAA,IAC5B,KAAK,KAAK,QAAQ;AAAA,IAClB,KAAK,KAAK,QAAQ;AAAA,EACpB;AACA,MAAI,OAAkB,CAAC;AACvB,MAAI;AACF,UAAM,MAAM,SAAS;AACrB,WAAO,KAAK,OAAO,GAAG,KAAK,CAAC;AAE5B,WAAO,KAAK,UAAU;AAAA,MACpB;AAAA,MACA;AAAA,MACA,YAAY,KAAK;AAAA,IACnB,CAAC;AACD,UAAM,KAAK,KAAK,MAAM,QAAQ,KAAK,KAAK,SAAS,MAAM,GAAG;AAC1D,WAAO,KAAK,QAAQ;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAAA,EACH,SAAS,GAAG;AACV,UAAM,QAAQ;AACd,WAAO,KAAK,QAAQ;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AACD,UAAM,UAAU,GAAG,KAAK;AACxB,UAAM,OAAO,EAAE,OAAO,MAAM;AAC5B,UAAM,WAAW,IAAI,8BAAgB,SAAS,IAAI;AAClD,YAAQ,UAAM,iCAAkB,QAAQ,CAAC;AACzC,UAAM;AAAA,EACR;AACF;AAEA,SAAS,UACP,MAC+B;AAC/B,SAAO,gBAAgB;AACzB;AAEO,SAAS,yBACd,MACA,QACA,UACA,WACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM;AAAA,IACJ,MAAM,EAAE,OAAO,QAAQ;AAAA,IACvB;AAAA,EACF,IAAI;AACJ,QAAM,QAAQ,MAAM,MAAM,OAAO;AACjC,QAAM,QAAQ,CAAC,GAAG,QAAQ,IAAI,EAAE,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,CAAC;AACzE,QAAM,EAAE,4BAA4B,0BAA0B,IAAI,MAAM;AAExE,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IACxB;AAAA,IACA,OAAO,QAAQ,MAAM;AAAA,EACvB;AACA,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM,EAAE;AACrB,QAAM,WAAW;AACjB,aAAW,MAAM;AACf,UAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,QAAI,CAAC,YAAY,IAAI,QAAQ,GAAG;AAC9B,kBAAY,IAAI,UAAU,CAAC,CAAC;AAAA,IAC9B;AACA,UAAM,OAAO,YAAY,IAAI,QAAQ;AACrC,UAAM,MAAM,SAAS;AACrB,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,MAAM;AACjB,+BAA2B,QAAQ,CAAC,SAAS;AAC3C,YAAM,cAAc;AAAA,QAClB;AAAA,QACA,KAAK,QAAQ;AAAA,MACf,EAAE,WAAW,MAAM,EAAE;AACrB,oCAAU,YAAY;AACpB,YAAI,CAAC,KAAK,WAAW,GAAG,QAAQ,IAAI,GAAG;AACrC;AAAA,QACF;AACA,eAAO,sBAAsB,UAAU;AAAA,UACrC;AAAA,UACA;AAAA,UACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,QACxB,CAAC;AACD,cAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,eAAO,sBAAsB,UAAU;AAAA,UACrC;AAAA,UACA;AAAA,UACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,QACxB,CAAC;AACD,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,GAAG,IAAI;AACpD,YAAI,OAAO,OAAO;AAChB,gBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,iBAAO,sBAAsB,QAAQ;AAAA,YACnC;AAAA,YACA;AAAA,YACA,OAAO,OAAO;AAAA,YACd,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,YACtB,QAAQ;AAAA,UACV,CAAC;AACD,gBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,QAC5D;AACA,eAAO,sBAAsB,QAAQ;AAAA,UACnC;AAAA,UACA;AAAA,UACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,UACtB,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,GAAG,WAAW;AAAA,IAChB,CAAC;AAED,kCAAU,MAAM;AACd,UAAI,OAAO;AACT,cAAM,QAAQ,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;AAC1C,4BAAK,WAAW,KAAK;AAAA,MACvB;AACA,aAAO,gBAAgB,UAAU;AAAA,QAC/B;AAAA,QACA;AAAA,QACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,MACxB,CAAC;AAAA,IACH,CAAC;AACD,wBAAoB,QAAQ,WAAW,QAAQ,CAAC,QAAQ,OAAO,CAAC;AAChE,yBAAqB,MAAM,QAAQ,UAAU,QAAQ,CAAC,QAAQ,OAAO,CAAC;AACtE,aAAS,QAAQ,CAAC,YAAY;AAC5B,wBAAkB,MAAM,SAAS,UAAU,WAAW,QAAQ;AAAA,QAC5D;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AACD,wBAAoB,MAAM,QAAQ,UAAU,QAAQ,CAAC,QAAQ,OAAO,CAAC;AACrE,2BAAuB,QAAQ,WAAW,QAAQ,CAAC,QAAQ,OAAO,CAAC;AAEnE,8BAA0B,QAAQ,CAAC,SAAS;AAC1C,YAAM,cAAc;AAAA,QAClB;AAAA,QACA,KAAK,QAAQ;AAAA,MACf,EAAE,WAAW,MAAM,EAAE;AACrB,mCAAS,YAAY;AACnB,YAAI,CAAC,KAAK,WAAW,GAAG,QAAQ,IAAI,GAAG;AACrC;AAAA,QACF;AACA,cAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,cAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,cAAM,OAAO,YAAY,IAAI,QAAQ;AACrC,eAAO,qBAAqB,UAAU;AAAA,UACpC;AAAA,UACA;AAAA,UACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,QACxB,CAAC;AACD,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,MAAM,GAAG,IAAI;AAC1D,YAAI,OAAO,OAAO;AAChB,gBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,iBAAO,gBAAgB,QAAQ;AAAA,YAC7B;AAAA,YACA;AAAA,YACA,OAAO,OAAO;AAAA,YACd,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,YACtB,QAAQ;AAAA,UACV,CAAC;AACD,gBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,QAC5D;AACA,eAAO,qBAAqB,QAAQ;AAAA,UAClC;AAAA,UACA;AAAA,UACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,UACtB,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,GAAG,WAAW;AAAA,IAChB,CAAC;AAED,iCAAS,MAAM;AACb,YAAM,WAAW,2BAAM,KAAK,OAAO,MAAM;AACzC,YAAM,SAAS,UAAU,UAAU,QAAQ;AAC3C,aAAO,gBAAgB,QAAQ;AAAA,QAC7B;AAAA,QACA;AAAA,QACA,MAAM,CAAC,GAAG,QAAQ,IAAI;AAAA,QACtB;AAAA,MACF,CAAC;AACD,kBAAY,MAAM;AAClB,mBAAa,MAAM;AAAA,IACrB,GAAG,aAAa;AAAA,EAClB,CAAC;AACH;AACO,SAAS,kBACd,MACA,SACA,UACA,WACA,QACA,SACA;AACA,QAAM,EAAE,QAAQ,IAAI,QAAQ;AAC5B,QAAM,QAAQ,GAAG,QAAQ,OAAO,KAAK,QAAQ,IAAI;AACjD,QAAM,QAAQ,CAAC,GAAG,QAAQ,KAAK,QAAQ,IAAI,EAAE;AAAA,IAAK,CAAC,QACjD,IAAI,WAAW,WAAW;AAAA,EAC5B;AACA,QAAM,WAAW;AACjB,aAAW,MAAM;AACf,UAAM,WAAW,sBAAO,SAAS,EAAE,mBAAmB;AACtD,QAAI,CAAC,aAAa,IAAI,QAAQ,GAAG;AAC/B,mBAAa,IAAI,UAAU,CAAC,CAAC;AAAA,IAC/B;AACA,UAAM,OAAO,aAAa,IAAI,QAAQ;AACtC,UAAM,MAAM,SAAS;AACrB,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,KAAK,IAAI;AAAA,IACd;AAAA,IACA,QAAQ,CAAC,EAAE,QAAQ,MAAM;AAAA,EAC3B;AACA,QAAM,OAAO,MAAM;AACjB,kCAAU,MAAM;AACd,UAAI,OAAO;AACT,cAAM,QAAQ,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;AAC1C,4BAAK,WAAW,KAAK;AAAA,MACvB;AAAA,IACF,CAAC;AAED,YAAQ,KAAK,MAAM,MAAM,oBAAoB,QAAQ,CAAC,SAAS;AAC7D,YAAM,cAAc;AAAA,QAClB,QAAQ,CAAC;AAAA,QACT,KAAK,QAAQ;AAAA,MACf,EAAE,WAAW,QAAQ,CAAC,CAAC,EAAE;AAEzB,oCAAU,YAAY;AACpB,YAAI,CAAC,KAAK,WAAW,GAAG,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClD;AAAA,QACF;AAEA,cAAM,OAAO,SAAS,MAAM,SAAS,QAAQ,CAAC;AAE9C,eAAO,eAAe,UAAU;AAAA,UAC9B;AAAA,UACA,MAAM,CAAC,GAAG,IAAI;AAAA,QAChB,CAAC;AAED,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,GAAG,IAAI;AAEpD,YAAI,OAAO,OAAO;AAChB,gBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,iBAAO,eAAe,QAAQ;AAAA,YAC5B;AAAA,YACA,OAAO,OAAO;AAAA,YACd,MAAM,CAAC,GAAG,IAAI;AAAA,YACd,QAAQ;AAAA,UACV,CAAC;AACD,gBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,QAC5D;AACA,eAAO,eAAe,QAAQ;AAAA,UAC5B;AAAA,UACA,MAAM,CAAC,GAAG,IAAI;AAAA,UACd,QAAQ;AAAA,QACV,CAAC;AAAA,MACH,GAAG,WAAW;AAAA,IAChB,CAAC;AACD,uBAAmB,MAAM,SAAS,UAAU,WAAW,QAAQ,OAAO;AAEtE,YAAQ,KAAK,MAAM,MAAM,mBAAmB,QAAQ,CAAC,SAAS;AAC5D,YAAM,cAAc;AAAA,QAClB,QAAQ,CAAC;AAAA,QACT,KAAK,QAAQ;AAAA,MACf,EAAE,WAAW,QAAQ,CAAC,CAAC,EAAE;AAEzB,mCAAS,YAAY;AACnB,cAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,YAAI,CAAC,KAAK,WAAW,GAAG,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAClD;AAAA,QACF;AAEA,cAAM,OAAO,SAAS,MAAM,SAAS,QAAQ,CAAC;AAC9C,cAAM,OAAO,aAAa,IAAI,QAAQ;AACtC,cAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,MAAM,GAAG,IAAI;AAE1D,YAAI,OAAO,OAAO;AAChB,gBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,gBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,QAC5D;AAAA,MACF,GAAG,WAAW;AAAA,IAChB,CAAC;AAED,iCAAS,MAAM;AACb,YAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,mBAAa,OAAO,QAAkB;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,eACd,QACA,UACA,WACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM;AACnB,SAAO,MAAM,QAAQ,CAAC,SAAS;AAC7B,UAAM,OAAO,CAAC,GAAG,KAAK,KAAK,QAAQ,IAAI;AACvC,UAAM,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,CAAC;AAC5D,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,KAAK,KAAK,MAAM;AAAA,IAClB,EAAE,WAAW,MAAM;AACnB,UAAM,kBAAqC,CAAC,QAAQ,WAAW;AAC/D,UAAM,EAAE,KAAK,IAAI;AACjB,UAAM,WAAW,KAAK,MAAM,MAAM,KAAK,OAAO;AAC9C,UAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ,MAAM;AAAA,IACvB;AAEA,UAAM,UAAU,MAAM;AACpB,oCAAU,MAAM;AACd,eAAO,KAAK,UAAU;AAAA,UACpB,OAAO;AAAA,UACP;AAAA,UACA,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI;AAAA,QAC7B,CAAC;AAED,YAAI,OAAO;AACT,gBAAM,QAAQ,SAAS,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;AAC1C,8BAAK,WAAW,KAAK;AAAA,QACvB;AACA,cAAM,WAAW;AACjB,mBAAW,MAAM;AACf,gBAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,cAAI,CAAC,SAAS,IAAI,QAAQ,GAAG;AAC3B,qBAAS,IAAI,UAAU,CAAC,CAAC;AAAA,UAC3B;AACA,gBAAM,OAAO,SAAS,IAAI,QAAQ;AAClC,gBAAM,MAAM,SAAS;AACrB,eAAK,KAAK,GAAG;AACb,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AACD,aAAO,KAAK,MAAM,MAAM,gBAAgB,QAAQ,CAAC,SAAS;AACxD,cAAM,cAAc;AAAA,UAClB;AAAA,UACA,KAAK,QAAQ;AAAA,QACf,EAAE,WAAW,MAAM,EAAE;AACrB,sCAAU,YAAY;AACpB,cAAI,CAAC,KAAK,WAAW,GAAG,KAAK,QAAQ,IAAI,GAAG;AAC1C;AAAA,UACF;AACA,gBAAMD,QAAO,KAAK,QAAQ,QAAQ,CAAC;AACnC,iBAAO,WAAW,UAAU;AAAA,YAC1B,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,YACxC,MAAM,CAAC,GAAGA,KAAI;AAAA,UAChB,CAAC;AACD,gBAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,GAAGA,KAAI;AACpD,cAAI,OAAO,OAAO;AAChB,kBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,mBAAO,WAAW,QAAQ;AAAA,cACxB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,cACxC,MAAM,CAAC,GAAGA,KAAI;AAAA,cACd,QAAQ;AAAA,cACR,OAAO,OAAO;AAAA,YAChB,CAAC;AACD,kBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,UAC5D;AACA,iBAAO,WAAW,QAAQ;AAAA,YACxB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,YACxC,MAAM,CAAC,GAAGA,KAAI;AAAA,YACd,QAAQ;AAAA,UACV,CAAC;AAAA,QACH,GAAG,WAAW;AAAA,MAChB,CAAC;AAED,aAAO,KAAK,MAAM,MAAM,eAAe,QAAQ,CAAC,SAAS;AACvD,cAAM,cAAc;AAAA,UAClB;AAAA,UACA,KAAK,QAAQ;AAAA,QACf,EAAE,WAAW,MAAM,EAAE;AACrB,qCAAS,YAAY;AACnB,gBAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,cAAI,CAAC,KAAK,WAAW,GAAG,KAAK,QAAQ,IAAI,GAAG;AAC1C;AAAA,UACF;AACA,gBAAMA,QAAO,KAAK,QAAQ,QAAQ,CAAC;AACnC,gBAAM,OAAO,SAAS,IAAI,QAAQ;AAClC,iBAAO,UAAU,UAAU;AAAA,YACzB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,YACxC,MAAM,CAAC,GAAGA,KAAI;AAAA,UAChB,CAAC;AACD,gBAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,MAAM,GAAGA,KAAI;AAC1D,cAAI,OAAO,OAAO;AAChB,kBAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,mBAAO,UAAU,QAAQ;AAAA,cACvB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,cACxC,MAAM,CAAC,GAAGA,KAAI;AAAA,cACd,QAAQ;AAAA,cACR,OAAO,OAAO;AAAA,YAChB,CAAC;AACD,kBAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,UAC5D;AACA,iBAAO,UAAU,QAAQ;AAAA,YACvB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,YACxC,MAAM,CAAC,GAAGA,KAAI;AAAA,YACd,QAAQ;AAAA,UACV,CAAC;AAAA,QACH,GAAG,WAAW;AAAA,MAChB,CAAC;AACD,0BAAoB,MAAM,WAAW,QAAQ,eAAe;AAC5D,2BAAqB,QAAQ,MAAM,UAAU,QAAQ,eAAe;AACpE,0BAAoB,QAAQ,MAAM,UAAU,QAAQ,eAAe;AACnE;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,0BAAoB,QAAQ,MAAM,UAAU,QAAQ,eAAe;AACnE,6BAAuB,MAAM,WAAW,QAAQ,eAAe;AAE/D,mCAAS,MAAM;AACb,cAAM,WAAW,2BAAM,KAAK,OAAO,IAAI;AACvC,cAAM,SAAS,UAAU,UAAU,QAAQ;AAC3C,eAAO,KAAK,QAAQ;AAAA,UAClB,OAAO;AAAA,UACP;AAAA,UACA,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI;AAAA,UAC3B;AAAA,QACF,CAAC;AACD,cAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,iBAAS,OAAO,QAAQ;AAAA,MAC1B,GAAG,YAAY,YAAY;AAAA,IAC7B,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,UAAU,UAA8B,UAAqB;AACpE,MAAI,aAAa,QAAQ;AACvB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,mBACP,QACA,WACA;AACA,QAAM,EAAE,KAAK,IAAI;AACjB,MAAI,KAAK,QAAQ,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,MAAM,IAAI,UAAU,GAAG;AACzE,WAAO,CAAC,wBAAS,MAAM,MAAM;AAAA,EAC/B;AACA,MAAI,KAAK,QAAQ,MAAM,IAAI,OAAO,GAAG;AACnC,WAAO,CAAC,wBAAS,MAAM,MAAM;AAAA,EAC/B;AACA,MAAI,WAAW;AAEb,UAAM,QAAQ,QAAQ,2BAA2B,EAAE;AAEnD,UAAM,aAAa,MAAM,SAAS,EAAE,SAAS,OAAO,eAAe,CAAC;AACpE,QAAI,CAAC,YAAY;AAEf,aAAO,CAAC,wBAAS,MAAM,MAAM;AAAA,IAC/B;AAAA,EACF;AACA,SAAO,CAAC,yBAAU,MAAS;AAC7B;AAEA,SAAS,kBAAkB,EAAE,KAAK,GAAmB,WAAoB;AACvE,MAAI,KAAK,QAAQ,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,MAAM,IAAI,UAAU,GAAG;AACzE,WAAO,kBAAG;AAAA,EACZ;AACA,MAAI,KAAK,QAAQ,MAAM,IAAI,OAAO,GAAG;AACnC,WAAO,kBAAG;AAAA,EACZ;AACA,MAAI,WAAW;AAEb,UAAM,QAAQ,QAAQ,2BAA2B,EAAE;AACnD,UAAM,aAAa,MAAM,SAAS,EAAE,SAAS,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC;AACnE,QAAI,CAAC,YAAY;AACf,aAAO,kBAAG;AAAA,IACZ;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,qBACd,MACA,QACA,UACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM;AAEnB,SAAO,KAAK,MAAM,MAAM,OAAO,QAAQ,CAAC,SAAS;AAC/C,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,KAAK,QAAQ;AAAA,IACf,EAAE,WAAW,MAAM,EAAE;AAErB,mCAAW,YAAY;AACrB,YAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,UAAI,CAAC;AAAU,cAAM,IAAI,8BAAgB,8BAA8B;AACvE,YAAM,qBAAiB,0BAAK,MAAM,QAAQ;AAC1C,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI;AAAA,UACR,0DAA0D,QAAQ;AAAA,QACpE;AAAA,MACF;AACA,UAAI,CAAC,KAAK,WAAW,GAAG,eAAe,KAAK,QAAQ,IAAI,GAAG;AACzD;AAAA,MACF;AACA,YAAM,OAAO,gBAAgB,MAAM,SAAS,QAAQ,CAAC;AACrD,aAAO,OAAO,UAAU;AAAA,QACtB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,MAAM,CAAC,GAAG,IAAI;AAAA,MAChB,CAAC;AACD,YAAM,SAAS,MAAM,KAAK,QAAQ,SAAS,GAAG,GAAG,IAAI;AACrD,aAAO,OAAO,QAAQ;AAAA,QACpB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,MAAM,CAAC,GAAG,IAAI;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,MAChB,CAAC;AACD,UAAI,OAAO,OAAO;AAChB,cAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,cAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF,GAAG,WAAW;AAAA,EAChB,CAAC;AACH;AACO,SAAS,oBACd,QACA,WACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,EAAE,OAAO,QAAQ,IAAI,OAAO;AAClC,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,OAAO,KAAK,MAAM;AAAA,EACpB,EAAE,WAAW,MAAM,EAAE;AACrB,QAAM,SAAS,MAAM,MAAM;AAC3B,SAAO,QAAQ,CAAC,SAAS;AACvB,UAAM,cAAc;AAAA,MAClB,uBAAQ,KAAK,aAAa;AAAA,MAC1B,KAAK,QAAQ;AAAA,IACf,EAAE,WAAW,MAAM,EAAE;AACrB,UAAM,OAAO,QAAQ,QAAQ,CAAC;AAE9B,kCAAU,YAAY;AACpB,UAAI,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG;AAC7B;AAAA,MACF;AAEA,aAAO,MAAM,UAAU;AAAA,QACrB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,MAC1C,CAAC;AAED,YAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,GAAG,IAAI;AAEpD,aAAO,MAAM,QAAQ;AAAA,QACnB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,MAChB,CAAC;AAED,UAAI,OAAO,OAAO;AAChB,cAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,cAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF,GAAG,WAAW;AAAA,EAChB,CAAC;AACH;AAEO,SAAS,oBACd,MACA,QACA,UACA,QACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,EAAE,MAAM,IAAI,OAAO;AACzB,QAAM,gBAAgB,cAAc,SAAS,MAAM,OAAO,EAAE;AAAA,IAC1D;AAAA,EACF,EAAE;AACF,QAAM,MAAM,MAAM,QAAQ,CAAC,SAAS;AAClC,UAAM,cAAc;AAAA,MAClB,uBAAQ,KAAK,aAAa;AAAA,MAC1B,KAAK,QAAQ;AAAA,IACf,EAAE,WAAW,MAAM,EAAE;AACrB,kCAAU,YAAY;AACpB,YAAM,WAAW,sBAAO,SAAS,EAAE;AACnC,UAAI,CAAC;AAAU,cAAM,IAAI,8BAAgB,8BAA8B;AACvE,YAAM,qBAAiB,0BAAK,MAAM,QAAQ;AAC1C,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI;AAAA,UACR,iDAAiD,QAAQ;AAAA,QAC3D;AAAA,MACF;AACA,UAAI,CAAC,KAAK,WAAW,GAAG,eAAe,KAAK,QAAQ,IAAI,GAAG;AACzD;AAAA,MACF;AACA,YAAM,OAAO,gBAAgB,MAAM,SAAS,QAAQ,CAAC;AACrD,aAAO,MAAM,UAAU;AAAA,QACrB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,MAAM,CAAC,GAAG,IAAI;AAAA,MAChB,CAAC;AAED,YAAM,SAAS,MAAM,KAAK,QAAQ,SAAS,GAAG,GAAG,IAAI;AACrD,aAAO,MAAM,QAAQ;AAAA,QACnB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,MAAM,CAAC,GAAG,IAAI;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,MAChB,CAAC;AACD,UAAI,OAAO,OAAO;AAChB,cAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,cAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF,GAAG,WAAW;AAAA,EAChB,CAAC;AACH;AAEO,SAAS,uBACd,QACA,WACA,OACA,CAAC,QAAQ,OAAO,GAChB;AACA,QAAM,OAAO,CAAC,GAAG,OAAO,KAAK,QAAQ,IAAI;AACzC,QAAM,EAAE,MAAM,IAAI,OAAO;AACzB,QAAM,gBAAgB,cAAc,SAAS,MAAM,OAAO,EAAE;AAAA,IAC1D;AAAA,EACF;AACA,QAAM,MAAM,SAAS,QAAQ,CAAC,SAAS;AACrC,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,KAAK,QAAQ;AAAA,IACf,EAAE,WAAW,MAAM,EAAE;AACrB,iCAAS,YAAY;AACnB,UAAI,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG;AAC7B;AAAA,MACF;AACA,YAAM,SAAS,UAAU;AAAA,QACvB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,MAAM,CAAC,GAAG,IAAI;AAAA,MAChB,CAAC;AACD,YAAM,SAAS,MAAM,KAAK,QAAQ,WAAW,IAAI;AACjD,YAAM,SAAS,QAAQ;AAAA,QACrB,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,QACxC,MAAM,CAAC,GAAG,IAAI;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,MAChB,CAAC;AAED,UAAI,OAAO,OAAO;AAChB,cAAM,UAAU,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AACjD,cAAM,IAAI,8BAAgB,SAAS,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,MAC5D;AAAA,IACF,GAAG,WAAW;AAAA,EAChB,CAAC;AACH;;;ADjhCA,IAAO,cAAQ;","names":["import_test_builder","import_scopes","tags","title"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/executor.ts","../src/timeout-selector.ts"],"sourcesContent":["import { execute } from \"./executor\";\nexport { execute } from \"./executor\";\nexport { getTimeout } from \"./timeout-selector\";\nexport default execute;\n","import {\n ExamplesBridge,\n FeatureBridge,\n RuleBridge,\n ScenarioBridge,\n ScenarioOutlineBridge,\n find,\n GlobalBridge,\n StepBridge,\n} from \"@autometa/test-builder\";\nimport {\n describe,\n it,\n expect,\n beforeEach,\n afterEach,\n afterAll,\n beforeAll,\n jest,\n} from \"@jest/globals\";\nimport { World, type App } from \"@autometa/app\";\nimport { Class } from \"@autometa/types\";\nimport { AutomationError, formatErrorCauses, raise } from \"@autometa/errors\";\nimport { TestEventEmitter } from \"@autometa/events\";\nimport { Query } from \"@autometa/test-builder\";\nimport { Config } from \"@autometa/config\";\nimport { chooseTimeout } from \"./timeout-selector\";\nimport { GlobalScope, NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Container, defineContainerContext } from \"@autometa/injection\";\nimport { isTagsMatch } from \"@autometa/gherkin\";\n\nconst outlineApps = new Map<string, App[]>();\nconst examplesApps = new Map<string, App[]>();\nconst featureApps = new Map<string, App[]>();\nconst ruleApps = new Map<string, App[]>();\n\nexport function execute(\n { app, world }: { app: Class<App>; world: Class<World> },\n global: GlobalScope,\n bridge: FeatureBridge,\n events: TestEventEmitter,\n config: Config\n) {\n const globalBridge = new GlobalBridge(global);\n const featureTitle = bridge.data.scope.title(bridge.data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n new NullTimeout(),\n bridge.data.scope.timeout\n ).getTimeout(config);\n beforeAll(() => {\n events.feature.emitStart({\n title: featureTitle,\n path: bridge.data.scope.path,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n });\n }, chosenTimeout.milliseconds);\n group(featureTitle, () => {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const retries = tags.find((tag) => tag.startsWith(\"@retries=\"));\n\n let testContainerContext: symbol;\n let testContainer: Container;\n // = registerContainerContext(app, world);\n let localApp: App;\n const globalContainerContext = defineContainerContext(\"global\");\n const globalContainer = new Container(globalContainerContext);\n globalContainer.registerCached(world);\n const staticApp: App = globalContainer.get(app);\n staticApp.world = globalContainer.get(world);\n staticApp.di = globalContainer;\n beforeAll(() => {\n if (retries) {\n const count = parseInt(retries.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n beforeEach(() => {\n const name =\n expect.getState().currentTestName ?? raise(\"A test must have a name\");\n testContainerContext = defineContainerContext(name);\n testContainer = new Container(testContainerContext);\n testContainer.registerCached(world);\n localApp = testContainer.get(app);\n localApp.world = testContainer.get(world);\n localApp.di = testContainer;\n if (!featureApps.has(name)) {\n featureApps.set(name, []);\n }\n featureApps.get(name)?.push(localApp);\n });\n\n bridge.data.scope.hooks.beforeFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...tags)) {\n return;\n }\n events.beforeFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterFeatureHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (!hook.canExecute(...bridge.data.gherkin.tags)) {\n return;\n }\n events.afterFeature.emitStart({\n title: hook.description,\n tags: [...tags],\n });\n\n const testName = expect.getState().currentTestName as string;\n const apps = featureApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterFeature.emitEnd({\n title: hook.description,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bootstrapSetupHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapSetupHooks(bridge, staticApp, events, [config, chosenTimeout]);\n bootstrapBeforeHooks(\n bridge,\n globalBridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBeforeHooks(\n bridge,\n bridge,\n () => [testContainer, localApp],\n events,\n [config, chosenTimeout]\n );\n bootstrapBackground(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapScenarios(\n bridge,\n bridge,\n () => [testContainer, localApp],\n staticApp,\n events,\n [config, chosenTimeout]\n );\n bootstrapRules(bridge, () => [testContainer, localApp], staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, bridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapAfterHooks(bridge, globalBridge, () => [testContainer, localApp], events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(globalBridge, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, chosenTimeout]);\n\n\n afterAll(async () => {\n await globalContainer.disposeGlobal(tags, isTagsMatch);\n });\n });\n\n afterAll(async () => {\n // events.\n const failures = Query.find.failed(bridge);\n const status =\n modifier === \"skip\"\n ? \"SKIPPED\"\n : failures.length === 0\n ? \"PASSED\"\n : \"FAILED\";\n events.feature.emitEnd({\n title: featureTitle,\n modifier,\n tags: [...bridge.data.gherkin.tags],\n status: status,\n });\n const settled = await events.settleAsyncEvents();\n const failedCount = settled.filter((e) => e.status === \"rejected\").length;\n if (failedCount > 0) {\n const count = `${failedCount}/${settled.length}`;\n const message = `${count} asynchronous Test Events were rejected.`;\n console.warn(message);\n }\n featureApps.clear();\n outlineApps.clear();\n examplesApps.clear();\n ruleApps.clear();\n });\n}\n\nexport function bootstrapBackground(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const background = bridge.background;\n if (!background) return;\n\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n\n const tags = bridge?.data?.gherkin?.tags ?? [];\n if (tags.has(\"@skip\") || tags.has(\"@skipped\")) return;\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario bridge was found matching the test name: ${testName}`\n );\n }\n const title = background.data.scope.title(background.data.gherkin);\n events.before.emitStart({\n title: title,\n tags: [...tags],\n });\n const steps = background.steps;\n try {\n for (const step of steps) {\n const [_, app] = localApp();\n const args = step.args?.(app) ?? [];\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n\n events.step.emitStart({\n title,\n args: args,\n expression: step.data.scope.expression.source,\n });\n\n await step.data.scope.execute(step.data.gherkin, args, app);\n\n events.step.emitEnd({\n expression: step.data.scope.expression.source,\n title,\n args: args,\n });\n }\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"PASSED\",\n });\n } catch (e) {\n events.before.emitEnd({\n title: title,\n tags: [...tags],\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} failed to execute.\nTest: ${testName}`;\n throw new AutomationError(message, { cause: e as Error });\n }\n }, chosenTimeout);\n}\nexport function bootstrapScenarios(\n root: FeatureBridge,\n bridge: FeatureBridge | RuleBridge | ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scenarios } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n scenarios.forEach((scenario) => {\n if (isOutline(scenario)) {\n bootstrapScenarioOutline(root, scenario, localApp, staticApp, events, [\n config,\n chosenTimeout,\n ]);\n return;\n }\n bootstrapScenario(scenario, localApp, events, [config, chosenTimeout]);\n });\n}\n\nexport function bootstrapScenario(\n bridge: ScenarioBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { data } = bridge;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n const scenarioName = data.scope.title(data.gherkin);\n const test = getTestOrModifier(bridge, config.current.test?.tagFilter);\n test(\n scenarioName,\n async () => {\n events.scenario.emitStart({\n title: bridge.title,\n tags: bridge.tags,\n });\n const [container, app] = localApp();\n try {\n for (const step of bridge.steps) {\n await tryRunStep(step, events, bridge, () => app);\n }\n bridge.report = { passed: true };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n bridge.report = { passed: false, error: e as Error };\n events.scenario.emitEnd({\n title: bridge.title,\n tags: bridge.tags,\n status: \"FAILED\",\n error: error,\n });\n const message = `${bridge.title} failed while executing a step`;\n const meta = { cause: error };\n throw new AutomationError(message, meta);\n } finally {\n await container.disposeAll(bridge.tags, isTagsMatch);\n }\n },\n chosenTimeout.milliseconds\n );\n}\n\nasync function tryRunStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n await bootstrapStep(step, events, bridge, localApp);\n}\n\nasync function bootstrapStep(\n step: StepBridge,\n events: TestEventEmitter,\n bridge: ScenarioBridge,\n localApp: () => App\n) {\n const title = step.data.scope.stepText(\n step.data.gherkin.keyword,\n step.data.gherkin.text\n );\n let args: unknown[] = [];\n try {\n const app = localApp();\n args = step.args?.(app) ?? [];\n\n events.step.emitStart({\n title,\n args,\n expression: step.expressionText,\n });\n await step.data.scope.execute(step.data.gherkin, args, app);\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"PASSED\",\n });\n } catch (e) {\n const error = e as Error;\n events.step.emitEnd({\n expression: step.expressionText,\n title,\n args,\n status: \"FAILED\",\n error: e as Error,\n });\n const message = `${title} experienced an error`;\n const meta = { cause: error };\n const newError = new AutomationError(message, meta);\n console.error(formatErrorCauses(newError));\n throw newError;\n }\n}\n\nfunction isOutline(\n data: ScenarioBridge | ScenarioOutlineBridge\n): data is ScenarioOutlineBridge {\n return data instanceof ScenarioOutlineBridge;\n}\n\nexport function bootstrapScenarioOutline(\n root: FeatureBridge,\n bridge: ScenarioOutlineBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const {\n data: { scope, gherkin },\n examples,\n } = bridge;\n const title = scope.title(gherkin);\n const retry = [...gherkin.tags].find((tag) => tag.startsWith(\"@retries=\"));\n const { beforeScenarioOutlineHooks, afterScenarioOutlineHooks } = scope.hooks;\n\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!outlineApps.has(testName)) {\n outlineApps.set(testName, []);\n }\n const apps = outlineApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n group(title, () => {\n beforeScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const tags = gherkin.tags ?? [];\n events.beforeScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n events.scenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n });\n bootstrapSetupHooks(bridge, staticApp, events, [config, timeout]);\n bootstrapBeforeHooks(root, bridge, localApp, events, [config, timeout]);\n examples.forEach((example) => {\n bootstrapExamples(root, example, localApp, staticApp, events, [\n config,\n timeout,\n ]);\n });\n bootstrapAfterHooks(root, bridge, localApp, events, [config, timeout]);\n bootstrapTeardownHooks(bridge, staticApp, events, [config, timeout]);\n\n afterScenarioOutlineHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...gherkin.tags)) {\n return;\n }\n const testName = expect.getState().currentTestName as string;\n const tags = gherkin.tags ?? [];\n const apps = outlineApps.get(testName) as App[];\n events.afterScenarioOutline.emitStart({\n title,\n modifier,\n tags: [...gherkin.tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n error: report.error,\n tags: [...gherkin.tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterScenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n afterAll(() => {\n const failures = Query.find.failed(bridge);\n const status = getStatus(modifier, failures);\n events.scenarioOutline.emitEnd({\n title,\n modifier,\n tags: [...gherkin.tags],\n status: status,\n });\n outlineApps.clear();\n examplesApps.clear();\n }, chosenTimeout);\n });\n}\nexport function bootstrapExamples(\n root: FeatureBridge,\n example: ExamplesBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n timeout: [Config, Timeout]\n) {\n const { gherkin } = example.data;\n const title = `${gherkin.keyword}: ${gherkin.name}`;\n const retry = [...example.data.gherkin.tags].find((tag) =>\n tag.startsWith(\"@retries=\")\n );\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName ?? \"unnamed test\";\n if (!examplesApps.has(testName)) {\n examplesApps.set(testName, []);\n }\n const apps = examplesApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n\n const [group] = getGroupOrModifier(\n example,\n timeout[0].current.test?.tagFilter\n );\n group(title, () => {\n beforeAll(() => {\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n });\n\n example.data.scope.hooks.beforeExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n beforeAll(async () => {\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n\n events.beforeExamples.emitStart({\n title,\n tags: [...tags],\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeExamples.emitEnd({\n title,\n error: report.error,\n tags: [...tags],\n status: \"FAILED\",\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeExamples.emitEnd({\n title,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapScenarios(root, example, localApp, staticApp, events, timeout);\n\n example.data.scope.hooks.afterExamplesHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n timeout[1],\n hook.options.timeout\n ).getTimeout(timeout[0]).milliseconds;\n\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...example.data.gherkin.tags)) {\n return;\n }\n\n const tags = example?.data?.gherkin?.tags ?? [];\n const apps = examplesApps.get(testName) as App[];\n const report = await hook.execute(staticApp, apps, ...tags);\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n\n afterAll(() => {\n const testName = expect.getState().currentTestName;\n examplesApps.delete(testName as string);\n });\n });\n}\n\nexport function bootstrapRules(\n bridge: FeatureBridge,\n localApp: () => [Container, App],\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n bridge.rules.forEach((rule) => {\n const tags = [...rule.data.gherkin.tags] ?? [];\n const retry = tags.find((tag) => tag.startsWith(\"@retries=\"));\n const ruleTimeout = chooseTimeout(\n chosenTimeout,\n rule.data.scope.timeout\n ).getTimeout(config);\n const transferTimeout: [Config, Timeout] = [config, ruleTimeout];\n const { data } = rule;\n const ruleName = data.scope.title(data.gherkin);\n const [group, modifier] = getGroupOrModifier(\n bridge,\n config.current.test?.tagFilter\n );\n\n group(ruleName, () => {\n beforeAll(() => {\n events.rule.emitStart({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n });\n\n if (retry) {\n const count = parseInt(retry.split(\"=\")[1]);\n jest.retryTimes(count);\n }\n const original = localApp;\n localApp = () => {\n const testName = expect.getState().currentTestName as string;\n if (!ruleApps.has(testName)) {\n ruleApps.set(testName, []);\n }\n const apps = ruleApps.get(testName) as App[];\n const [container, app] = original();\n apps.push(app);\n return [container, app];\n };\n });\n bridge.data.scope.hooks.beforeRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n beforeAll(async () => {\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n events.beforeRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.beforeRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n\n bridge.data.scope.hooks.afterRuleHooks.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n ruleTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n const testName = expect.getState().currentTestName as string;\n if (!hook.canExecute(...data.gherkin.tags)) {\n return;\n }\n const tags = data.gherkin.tags ?? [];\n const apps = ruleApps.get(testName) as App[];\n events.afterRule.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, apps, ...tags);\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"FAILED\",\n error: report.error,\n });\n throw new AutomationError(message, { cause: report.error });\n }\n events.afterRule.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: \"PASSED\",\n });\n }, hookTimeout);\n });\n bootstrapSetupHooks(rule, staticApp, events, transferTimeout);\n bootstrapBeforeHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapBackground(bridge, rule, localApp, events, transferTimeout);\n bootstrapScenarios(\n bridge,\n rule,\n localApp,\n staticApp,\n events,\n transferTimeout\n );\n bootstrapAfterHooks(bridge, rule, localApp, events, transferTimeout);\n bootstrapTeardownHooks(rule, staticApp, events, transferTimeout);\n\n afterAll(() => {\n const failures = Query.find.failed(rule);\n const status = getStatus(modifier, failures);\n events.rule.emitEnd({\n title: ruleName,\n modifier,\n tags: [...data.gherkin.tags],\n status: status,\n });\n const testName = expect.getState().currentTestName as string;\n ruleApps.delete(testName);\n }, ruleTimeout.milliseconds);\n });\n });\n}\n\nfunction getStatus(modifier: string | undefined, failures: unknown[]) {\n if (modifier === \"skip\") {\n return \"SKIPPED\";\n }\n if (failures.length === 0) {\n return \"PASSED\";\n }\n return \"FAILED\";\n}\n\nfunction getGroupOrModifier(\n bridge: RuleBridge | FeatureBridge | ScenarioOutlineBridge | ExamplesBridge,\n tagFilter: string | undefined\n) {\n const { data } = bridge;\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return [describe.skip, \"skip\"] as const;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return [describe.only, \"only\"] as const;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n\n const expression = parse(tagFilter).evaluate(bridge.accumulateTags());\n if (!expression) {\n return [describe.skip, \"skip\"] as const;\n }\n }\n return [describe, undefined] as const;\n}\n\nfunction getTestOrModifier({ data }: ScenarioBridge, tagFilter?: string) {\n if (data.gherkin.tags?.has(\"@skip\") || data.gherkin.tags?.has(\"@skipped\")) {\n return it.skip;\n }\n if (data.gherkin.tags?.has(\"@only\")) {\n return it.only;\n }\n if (tagFilter) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const parse = require(\"@cucumber/tag-expressions\").default;\n const expression = parse(tagFilter).evaluate([...data.gherkin.tags]);\n if (!expression) {\n return it.skip;\n }\n }\n return it;\n}\n\nexport function bootstrapBeforeHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config);\n\n bridge.data.scope.hooks.before.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n\n beforeEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No matching scenario was found matching the test name: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.before.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(localApp()[1], ...tags);\n events.before.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} experienced a failure.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\nexport function bootstrapSetupHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope, gherkin } = bridge.data;\n const chosenTimeout = chooseTimeout(\n timeout,\n bridge.data.scope.timeout\n ).getTimeout(config).milliseconds;\n const setups = scope.hooks.setup;\n setups.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n const tags = gherkin.tags ?? [];\n\n beforeAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n\n events.setup.emitStart({\n title: `${hook.name}: ${hook.description}`,\n });\n\n const report = await hook.execute(staticApp, ...tags);\n\n events.setup.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapAfterHooks(\n root: FeatureBridge,\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n localApp: () => [Container, App],\n events: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n ).milliseconds;\n scope.hooks.after.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n Timeout.from(chosenTimeout),\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterEach(async () => {\n const testName = expect.getState().currentTestName;\n if (!testName) throw new AutomationError(\"A Scenario must have a title\");\n const scenarioBridge = find(root, testName);\n if (!scenarioBridge) {\n throw new AutomationError(\n `No scenario was found matching the test path: ${testName}`\n );\n }\n if (!hook.canExecute(...scenarioBridge.data.gherkin.tags)) {\n return;\n }\n const tags = scenarioBridge?.data?.gherkin?.tags ?? [];\n events.after.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n\n const report = await hook.execute(localApp()[1], ...tags);\n events.after.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n\nexport function bootstrapTeardownHooks(\n bridge: GlobalBridge | FeatureBridge | RuleBridge | ScenarioOutlineBridge,\n staticApp: App,\n event: TestEventEmitter,\n [config, timeout]: [Config, Timeout]\n) {\n const tags = [...bridge.data.gherkin.tags] ?? [];\n const { scope } = bridge.data;\n const chosenTimeout = chooseTimeout(timeout, scope.timeout).getTimeout(\n config\n );\n scope.hooks.teardown.forEach((hook) => {\n const hookTimeout = chooseTimeout(\n chosenTimeout,\n hook.options.timeout\n ).getTimeout(config).milliseconds;\n afterAll(async () => {\n if (!hook.canExecute(...tags)) {\n return;\n }\n event.teardown.emitStart({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n });\n const report = await hook.execute(staticApp, tags);\n event.teardown.emitEnd({\n title: `${hook.name}: ${hook.description}`,\n tags: [...tags],\n status: report.status,\n error: report.error,\n });\n\n if (report.error) {\n const message = `${hook.name}: ${hook.description} failed to execute.`;\n throw new AutomationError(message, { cause: report.error });\n }\n }, hookTimeout);\n });\n}\n","import { NullTimeout, Timeout } from \"@autometa/scopes\";\nimport { Config } from \"@autometa/config\";\nexport function getTimeout(target: Timeout | undefined, config: Config) {\n if (target && !(target instanceof NullTimeout)) {\n return target;\n }\n return Timeout.from(config?.current?.test?.timeout);\n}\n\nexport function chooseTimeout(\n timeout1: Timeout | undefined,\n timeout2: Timeout | undefined\n) {\n if (timeout2 instanceof Timeout && !(timeout2 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout2),\n };\n }\n if (timeout1 instanceof Timeout && !(timeout1 instanceof NullTimeout)) {\n return {\n getTimeout: getTimeout.bind(null, timeout1),\n };\n }\n return {\n getTimeout: getTimeout.bind(null, Timeout.from(0)),\n };\n}\n"],"mappings":"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","names":["import_test_builder","import_scopes","tags","title"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autometa/jest-executor",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -41,16 +41,16 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@cucumber/tag-expressions": "^5.0.1",
44
- "@autometa/asserters": "^0.1.8",
45
- "@autometa/app": "^0.4.0",
46
- "@autometa/config": "^0.1.25",
47
- "@autometa/events": "^0.3.0",
48
- "@autometa/gherkin": "^0.7.0",
49
44
  "@autometa/errors": "^0.2.2",
50
- "@autometa/injection": "^0.1.3",
51
- "@autometa/scopes": "^0.7.0",
52
- "@autometa/test-builder": "^0.4.0",
53
- "@autometa/types": "^0.4.1"
45
+ "@autometa/events": "^0.3.2",
46
+ "@autometa/config": "^0.1.27",
47
+ "@autometa/app": "^0.4.2",
48
+ "@autometa/test-builder": "^0.4.2",
49
+ "@autometa/gherkin": "^0.7.2",
50
+ "@autometa/injection": "^0.1.5",
51
+ "@autometa/types": "^0.4.1",
52
+ "@autometa/asserters": "^0.1.8",
53
+ "@autometa/scopes": "^0.7.2"
54
54
  },
55
55
  "scripts": {
56
56
  "test": "vitest run --passWithNoTests",