vitest-cucumber-plugin 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.
Files changed (197) hide show
  1. package/RELEASE_NOTES.md +2 -0
  2. package/dist/config.d.ts +11 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +2 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/generate/example.d.ts +5 -0
  7. package/dist/generate/example.d.ts.map +1 -0
  8. package/{src → dist}/generate/example.js +7 -10
  9. package/dist/generate/example.js.map +1 -0
  10. package/dist/generate/examples.d.ts +5 -0
  11. package/dist/generate/examples.d.ts.map +1 -0
  12. package/dist/generate/examples.js +46 -0
  13. package/dist/generate/examples.js.map +1 -0
  14. package/dist/generate/feature.d.ts +10 -0
  15. package/dist/generate/feature.d.ts.map +1 -0
  16. package/dist/generate/feature.js +77 -0
  17. package/dist/generate/feature.js.map +1 -0
  18. package/dist/generate/index.d.ts +3 -0
  19. package/dist/generate/index.d.ts.map +1 -0
  20. package/dist/generate/index.js +3 -0
  21. package/dist/generate/index.js.map +1 -0
  22. package/dist/generate/rule.d.ts +5 -0
  23. package/dist/generate/rule.d.ts.map +1 -0
  24. package/{src → dist}/generate/rule.js +9 -12
  25. package/dist/generate/rule.js.map +1 -0
  26. package/dist/generate/scenario-outline.d.ts +5 -0
  27. package/dist/generate/scenario-outline.d.ts.map +1 -0
  28. package/dist/generate/scenario-outline.js +18 -0
  29. package/dist/generate/scenario-outline.js.map +1 -0
  30. package/dist/generate/tests.d.ts +4 -0
  31. package/dist/generate/tests.d.ts.map +1 -0
  32. package/{src → dist}/generate/tests.js +9 -9
  33. package/dist/generate/tests.js.map +1 -0
  34. package/dist/generate/util.d.ts +6 -0
  35. package/dist/generate/util.d.ts.map +1 -0
  36. package/{src → dist}/generate/util.js +5 -5
  37. package/dist/generate/util.js.map +1 -0
  38. package/dist/gherkin-lexer-shared.d.ts +6 -0
  39. package/dist/gherkin-lexer-shared.d.ts.map +1 -0
  40. package/dist/gherkin-lexer-shared.js +4 -0
  41. package/dist/gherkin-lexer-shared.js.map +1 -0
  42. package/dist/gherkin-lexer.d.ts +4 -0
  43. package/dist/gherkin-lexer.d.ts.map +1 -0
  44. package/dist/gherkin-lexer.js +68 -0
  45. package/dist/gherkin-lexer.js.map +1 -0
  46. package/{src → dist}/gherkin.js +1 -1
  47. package/{src → dist}/gherkin.umd.js +1 -1
  48. package/dist/hooks.d.ts +25 -0
  49. package/dist/hooks.d.ts.map +1 -0
  50. package/dist/hooks.js +94 -0
  51. package/dist/hooks.js.map +1 -0
  52. package/dist/index.d.ts +4 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +4 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/logger.d.ts +5 -0
  57. package/dist/logger.d.ts.map +1 -0
  58. package/dist/logger.js +8 -0
  59. package/dist/logger.js.map +1 -0
  60. package/dist/parameterize.d.ts +3 -0
  61. package/dist/parameterize.d.ts.map +1 -0
  62. package/dist/parameterize.js +8 -0
  63. package/dist/parameterize.js.map +1 -0
  64. package/dist/parse.d.ts +3 -0
  65. package/dist/parse.d.ts.map +1 -0
  66. package/{src → dist}/parse.js +5 -9
  67. package/dist/parse.js.map +1 -0
  68. package/dist/state.d.ts +4 -0
  69. package/dist/state.d.ts.map +1 -0
  70. package/dist/state.js +2 -0
  71. package/dist/state.js.map +1 -0
  72. package/dist/statement.d.ts +71 -0
  73. package/dist/statement.d.ts.map +1 -0
  74. package/dist/statement.js +10 -0
  75. package/dist/statement.js.map +1 -0
  76. package/dist/steps.d.ts +20 -0
  77. package/dist/steps.d.ts.map +1 -0
  78. package/{src → dist}/steps.js +16 -23
  79. package/dist/steps.js.map +1 -0
  80. package/dist/tags.d.ts +5 -0
  81. package/dist/tags.d.ts.map +1 -0
  82. package/{src → dist}/tags.js +15 -28
  83. package/dist/tags.js.map +1 -0
  84. package/dist/vitest-cucumber-plugin.d.ts +13 -0
  85. package/dist/vitest-cucumber-plugin.d.ts.map +1 -0
  86. package/dist/vitest-cucumber-plugin.js +69 -0
  87. package/dist/vitest-cucumber-plugin.js.map +1 -0
  88. package/package.json +64 -34
  89. package/generate-parsers +0 -6
  90. package/rollup-gherkin.js +0 -12
  91. package/rollup-tags-expression.js +0 -11
  92. package/run-tests +0 -9
  93. package/src/generate/examples.js +0 -48
  94. package/src/generate/feature.js +0 -72
  95. package/src/generate/index.js +0 -15
  96. package/src/generate/scenario-outline.js +0 -21
  97. package/src/gherkin-lexer-shared.cjs +0 -4
  98. package/src/gherkin-lexer.js +0 -63
  99. package/src/gherkin.ne +0 -211
  100. package/src/hooks.js +0 -77
  101. package/src/index.js +0 -95
  102. package/src/logger.js +0 -14
  103. package/src/parameterize.js +0 -7
  104. package/src/tags-expression.ne +0 -43
  105. package/tests/background/features/background.feature +0 -25
  106. package/tests/background/features/step_definitions/steps.js +0 -30
  107. package/tests/background/features/support/hooks.js +0 -3
  108. package/tests/background/package-lock.json +0 -1204
  109. package/tests/background/package.json +0 -11
  110. package/tests/background/vite.config.js +0 -13
  111. package/tests/comments/features/is-it-friday.feature +0 -10
  112. package/tests/comments/features/step_definitions/stepdefs.js +0 -15
  113. package/tests/comments/package-lock.json +0 -1933
  114. package/tests/comments/package.json +0 -11
  115. package/tests/comments/vite.config.js +0 -9
  116. package/tests/data-tables/features/data-tables-escaping.feature +0 -27
  117. package/tests/data-tables/features/data-tables.feature +0 -44
  118. package/tests/data-tables/features/step_definitions/data-tables.js +0 -21
  119. package/tests/data-tables/package-lock.json +0 -1933
  120. package/tests/data-tables/package.json +0 -11
  121. package/tests/data-tables/vite.config.js +0 -13
  122. package/tests/doc-strings/features/doc-strings.feature +0 -21
  123. package/tests/doc-strings/features/step_definitions/doc-strings.js +0 -15
  124. package/tests/doc-strings/package-lock.json +0 -1933
  125. package/tests/doc-strings/package.json +0 -11
  126. package/tests/doc-strings/vite.config.js +0 -13
  127. package/tests/hooks/features/after-all.feature +0 -5
  128. package/tests/hooks/features/after.feature +0 -5
  129. package/tests/hooks/features/before-all.feature +0 -14
  130. package/tests/hooks/features/before-step.feature +0 -6
  131. package/tests/hooks/features/before.feature +0 -14
  132. package/tests/hooks/features/step_definitions/steps.js +0 -28
  133. package/tests/hooks/features/support/hooks.js +0 -75
  134. package/tests/hooks/features/support/tags-hooks.js +0 -11
  135. package/tests/hooks/features/tags.feature +0 -14
  136. package/tests/hooks/package-lock.json +0 -1204
  137. package/tests/hooks/package.json +0 -11
  138. package/tests/hooks/vite.config.js +0 -13
  139. package/tests/is-it-friday/features/is-it-friday.feature +0 -7
  140. package/tests/is-it-friday/features/step_definitions/stepdefs.js +0 -15
  141. package/tests/is-it-friday/package-lock.json +0 -1933
  142. package/tests/is-it-friday/package.json +0 -11
  143. package/tests/is-it-friday/vite.config.js +0 -13
  144. package/tests/is-it-friday-scenario-outline/features/is-it-friday.feature +0 -13
  145. package/tests/is-it-friday-scenario-outline/features/step_definitions/stepdefs.js +0 -15
  146. package/tests/is-it-friday-scenario-outline/package-lock.json +0 -1933
  147. package/tests/is-it-friday-scenario-outline/package.json +0 -11
  148. package/tests/is-it-friday-scenario-outline/vite.config.js +0 -9
  149. package/tests/is-it-friday-two-scenarios/features/is-it-friday.feature +0 -12
  150. package/tests/is-it-friday-two-scenarios/features/step_definitions/stepdefs.js +0 -19
  151. package/tests/is-it-friday-two-scenarios/package-lock.json +0 -1933
  152. package/tests/is-it-friday-two-scenarios/package.json +0 -11
  153. package/tests/is-it-friday-two-scenarios/vite.config.js +0 -9
  154. package/tests/is-it-friday-two-scenarios-multiple-feature-files/features/friday.feature +0 -7
  155. package/tests/is-it-friday-two-scenarios-multiple-feature-files/features/step_definitions/stepdefs.js +0 -19
  156. package/tests/is-it-friday-two-scenarios-multiple-feature-files/features/sunday.feature +0 -8
  157. package/tests/is-it-friday-two-scenarios-multiple-feature-files/package-lock.json +0 -1933
  158. package/tests/is-it-friday-two-scenarios-multiple-feature-files/package.json +0 -11
  159. package/tests/is-it-friday-two-scenarios-multiple-feature-files/vite.config.js +0 -9
  160. package/tests/keyword-aliases/features/scenario-outline.feature +0 -20
  161. package/tests/keyword-aliases/features/scenario.feature +0 -14
  162. package/tests/keyword-aliases/features/step_definitions/steps.js +0 -30
  163. package/tests/keyword-aliases/features/steps.feature +0 -28
  164. package/tests/keyword-aliases/features/support/hooks.js +0 -6
  165. package/tests/keyword-aliases/package-lock.json +0 -1933
  166. package/tests/keyword-aliases/package.json +0 -11
  167. package/tests/keyword-aliases/vite.config.js +0 -9
  168. package/tests/languages/features/en.feature +0 -8
  169. package/tests/languages/features/no.feature +0 -10
  170. package/tests/languages/features/step_definitions/en.js +0 -15
  171. package/tests/languages/features/step_definitions/no.js +0 -21
  172. package/tests/languages/package-lock.json +0 -1204
  173. package/tests/languages/package.json +0 -11
  174. package/tests/languages/vite.config.js +0 -13
  175. package/tests/rule/features/rule.feature +0 -14
  176. package/tests/rule/features/step_definitions/stepdefs.js +0 -19
  177. package/tests/rule/package-lock.json +0 -1933
  178. package/tests/rule/package.json +0 -11
  179. package/tests/rule/vite.config.js +0 -9
  180. package/tests/tags/features/skip.feature +0 -9
  181. package/tests/tags/features/step_definitions/steps.js +0 -30
  182. package/tests/tags/features/support/hooks.js +0 -6
  183. package/tests/tags/features/tags-scenario-outline.feature +0 -37
  184. package/tests/tags/features/tags.feature +0 -26
  185. package/tests/tags/package-lock.json +0 -1204
  186. package/tests/tags/package.json +0 -11
  187. package/tests/tags/vite.config.js +0 -12
  188. package/tests/vue/features/step_definitions/test.js +0 -25
  189. package/tests/vue/features/support/components.js +0 -19
  190. package/tests/vue/features/test.feature +0 -10
  191. package/tests/vue/package-lock.json +0 -2164
  192. package/tests/vue/package.json +0 -18
  193. package/tests/vue/src/test.vue +0 -10
  194. package/tests/vue/vite.config.js +0 -15
  195. /package/{src → dist}/gherkin-languages.json +0 -0
  196. /package/{src → dist}/tags-expression.js +0 -0
  197. /package/{src → dist}/tags-expression.umd.js +0 -0
package/dist/hooks.js ADDED
@@ -0,0 +1,94 @@
1
+ import { log } from './logger.js';
2
+ import _ from 'lodash/fp.js';
3
+ import { createTagsFunction } from './tags.js';
4
+ const allHooks = {
5
+ beforeAll: [],
6
+ before: [],
7
+ beforeStep: [],
8
+ afterAll: [],
9
+ after: [],
10
+ afterStep: [],
11
+ };
12
+ const hookNames = {
13
+ beforeAll: 'BeforeAll',
14
+ before: 'Before',
15
+ beforeStep: 'BeforeStep',
16
+ afterAll: 'AfterAll',
17
+ after: 'After',
18
+ afterStep: 'AfterStep',
19
+ };
20
+ const applyHooks = async (hooksName, state, tags) => {
21
+ const hooks = allHooks[hooksName];
22
+ log.debug({ state }, `applyHooks: ${hooksName}`);
23
+ for (let i = 0; i < hooks.length; i++) {
24
+ let hook = hooks[i];
25
+ log.debug({ state }, `applyHooks name: ${hook.name}`);
26
+ const result = hook.tagsFunction(tags);
27
+ log.debug('applyHooks match? ' + result + ' tags: ' + JSON.stringify(tags));
28
+ if (result) {
29
+ const origState = state;
30
+ state = await hook.f(state);
31
+ state = state ? state : origState;
32
+ log.info({ state, origState }, `${hookNames[hooksName]}('${hook.name}')`);
33
+ }
34
+ }
35
+ return state;
36
+ };
37
+ const createHook = (opts, f) => {
38
+ if (_.isFunction(opts)) {
39
+ const tagsFunction = createTagsFunction();
40
+ return { name: '', f: opts, tagsFunction };
41
+ }
42
+ else if (_.isString(opts)) {
43
+ if (f) {
44
+ const tagsFunction = createTagsFunction();
45
+ return { name: opts, f, tagsFunction };
46
+ }
47
+ else {
48
+ throw new Error('Missing function argument: ' + JSON.stringify(opts));
49
+ }
50
+ }
51
+ else if (_.isObject(opts)) {
52
+ if (f) {
53
+ const tagsFunction = createTagsFunction('tags' in opts ? opts.tags : undefined);
54
+ return { f, tagsFunction, ...opts };
55
+ }
56
+ else {
57
+ throw new Error('Missing function argument: ' + JSON.stringify(opts));
58
+ }
59
+ }
60
+ else {
61
+ throw new Error('Unknown options argument: ' + JSON.stringify(opts));
62
+ }
63
+ };
64
+ const addHook = (hooksName, opts, f) => {
65
+ const hook = createHook(opts, f);
66
+ log.debug(`addHook hooksName: ${hooksName} name: ${hook.name}`);
67
+ allHooks[hooksName] = _.concat(allHooks[hooksName], hook);
68
+ };
69
+ const BeforeAll = (opts, f) => {
70
+ addHook("beforeAll" /* HookTypes.BeforeAll */, opts, f);
71
+ };
72
+ const applyBeforeAllHooks = (state, tags) => applyHooks("beforeAll" /* HookTypes.BeforeAll */, state, tags);
73
+ const Before = (opts, f) => {
74
+ addHook("before" /* HookTypes.Before */, opts, f);
75
+ };
76
+ const applyBeforeHooks = (state, tags) => applyHooks("before" /* HookTypes.Before */, state, tags);
77
+ const BeforeStep = (opts, f) => {
78
+ addHook("beforeStep" /* HookTypes.BeforeStep */, opts, f);
79
+ };
80
+ const applyBeforeStepHooks = (state, tags) => applyHooks("beforeStep" /* HookTypes.BeforeStep */, state, tags);
81
+ const AfterAll = (opts, f) => {
82
+ addHook("afterAll" /* HookTypes.AfterAll */, opts, f);
83
+ };
84
+ const applyAfterAllHooks = (state, tags) => applyHooks("afterAll" /* HookTypes.AfterAll */, state, tags);
85
+ const After = (opts, f) => {
86
+ addHook("after" /* HookTypes.After */, opts, f);
87
+ };
88
+ const applyAfterHooks = (state, tags) => applyHooks("after" /* HookTypes.After */, state, tags);
89
+ const AfterStep = (opts, f) => {
90
+ addHook("afterStep" /* HookTypes.AfterStep */, opts, f);
91
+ };
92
+ const applyAfterStepHooks = (state, tags) => applyHooks("afterStep" /* HookTypes.AfterStep */, state, tags);
93
+ export { applyAfterStepHooks, AfterStep, applyAfterHooks, After, applyAfterAllHooks, AfterAll, applyBeforeStepHooks, BeforeStep, applyBeforeHooks, Before, applyBeforeAllHooks, BeforeAll, };
94
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { vitestCucumberPlugin } from './vitest-cucumber-plugin.js';
2
+ export * from './vitest-cucumber-plugin.js';
3
+ export default vitestCucumberPlugin;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,cAAc,6BAA6B,CAAC;AAE5C,eAAe,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ import { vitestCucumberPlugin } from './vitest-cucumber-plugin.js';
2
+ export * from './vitest-cucumber-plugin.js';
3
+ export default vitestCucumberPlugin;
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,cAAc,6BAA6B,CAAC;AAE5C,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { LoggerOptions } from 'pino';
2
+ declare var log: import("pino").Logger<never, boolean>;
3
+ declare const logConfig: (config: LoggerOptions) => void;
4
+ export { log, logConfig, LoggerOptions };
5
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,aAAa,EAAE,MAAM,MAAM,CAAC;AAE3C,QAAA,IAAI,GAAG,uCAAS,CAAC;AAIjB,QAAA,MAAM,SAAS,GAAI,QAAQ,aAAa,SAEvC,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,8 @@
1
+ import { pino } from 'pino';
2
+ var log = pino();
3
+ log.level = 'warn';
4
+ const logConfig = (config) => {
5
+ log = pino(config);
6
+ };
7
+ export { log, logConfig };
8
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,MAAM,CAAC;AAE3C,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;AAEjB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAEnB,MAAM,SAAS,GAAG,CAAC,MAAqB,EAAE,EAAE;IACxC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const parameterizeText: (text: string, parameterMap: Record<string, string>) => string;
2
+ export { parameterizeText };
3
+ //# sourceMappingURL=parameterize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameterize.d.ts","sourceRoot":"","sources":["../src/parameterize.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAI/E,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import _ from 'lodash/fp.js';
2
+ const parameterizeText = (text, parameterMap) => {
3
+ return _.reduce((text, parameter) => {
4
+ return text.replaceAll('<' + parameter + '>', parameterMap[parameter]);
5
+ }, text)(_.keys(parameterMap));
6
+ };
7
+ export { parameterizeText };
8
+ //# sourceMappingURL=parameterize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameterize.js","sourceRoot":"","sources":["../src/parameterize.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,cAAc,CAAC;AAE7B,MAAM,gBAAgB,GAAmE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE;IAC5G,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAE;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const parse: (src: string) => Promise<any>;
2
+ export { parse };
3
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAgBA,QAAA,MAAM,KAAK,GAAU,KAAK,MAAM,iBAe/B,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import nearley from 'nearley';
2
2
  import { log } from './logger.js';
3
-
4
3
  let gherkinSingleton;
5
-
6
4
  const parser = async () => {
7
5
  if (!gherkinSingleton) {
8
6
  // Need to dynamicly load the gherkin parser because it needs to be loaded after the
@@ -10,23 +8,21 @@ const parser = async () => {
10
8
  const gherkinImport = await import('./gherkin.js');
11
9
  gherkinSingleton = gherkinImport['default'];
12
10
  }
13
-
14
11
  return new nearley.Parser(nearley.Grammar.fromCompiled(gherkinSingleton));
15
12
  };
16
-
17
- export const parse = async (src) => {
13
+ const parse = async (src) => {
18
14
  const myParser = await parser();
19
15
  log.debug(`parsing src: ${src}`);
20
16
  myParser.feed(src);
21
-
22
17
  if (myParser.results.length == 0) {
23
18
  throw new Error('Unexpected end of file');
24
19
  }
25
20
  log.debug({ results: myParser.results }, 'parsing result');
26
21
  if (myParser.results.length > 1) {
27
- throw new Error('Ambiguous parsing: '+myParser.results.length);
22
+ throw new Error('Ambiguous parsing: ' + myParser.results.length);
28
23
  }
29
-
30
24
  const results = myParser.results;
31
25
  return results[0];
32
- }
26
+ };
27
+ export { parse };
28
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,IAAI,gBAAqB,CAAC;AAE1B,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;IACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,oFAAoF;QACpF,kDAAkD;QAClD,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,EAAE,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnB,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IACD,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ interface State {
2
+ }
3
+ export { State };
4
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,UAAU,KAAK;CAAG;AAElB,OAAO,EAAE,KAAK,EAAE,CAAC"}
package/dist/state.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ type Tags = Array<string>;
2
+ type StatementTypes = 'background' | 'example' | 'examples' | 'rule' | 'feature' | 'given' | 'when' | 'then' | 'scenarioOutline' | 'docString';
3
+ interface StatementType<T extends StatementTypes> {
4
+ type: T;
5
+ name: string;
6
+ }
7
+ interface StatementBase<T extends StatementTypes> {
8
+ type: StatementType<T>;
9
+ tags?: Tags;
10
+ }
11
+ interface Example extends StatementBase<'example'> {
12
+ name: string;
13
+ background?: Background;
14
+ steps: Array<StepStatement>;
15
+ }
16
+ interface Background extends StatementBase<'background'> {
17
+ name: string;
18
+ steps: Array<StepStatement>;
19
+ }
20
+ interface Rule extends StatementBase<'rule'> {
21
+ name: string;
22
+ examples: Array<Example>;
23
+ }
24
+ interface Feature extends StatementBase<'feature'> {
25
+ name: string;
26
+ statements: Array<Statement>;
27
+ background?: Background;
28
+ }
29
+ interface DocString extends StatementBase<'docString'> {
30
+ ws: string;
31
+ contentType: string;
32
+ text: string;
33
+ }
34
+ interface StepStatementBase<T extends StatementTypes> extends StatementBase<T> {
35
+ text: string;
36
+ dataTable?: Array<Array<string>>;
37
+ docString?: DocString;
38
+ }
39
+ interface Given extends StepStatementBase<'given'> {
40
+ }
41
+ interface When extends StepStatementBase<'when'> {
42
+ }
43
+ interface Then extends StepStatementBase<'then'> {
44
+ }
45
+ interface Examples extends StatementBase<'examples'> {
46
+ name: string;
47
+ dataTable: Array<Array<string>>;
48
+ }
49
+ interface ScenarioOutline extends StatementBase<'scenarioOutline'> {
50
+ name: string;
51
+ examples: Array<Examples>;
52
+ steps: Array<StepStatement>;
53
+ }
54
+ type StatementMap = {
55
+ background: Background;
56
+ example: Example;
57
+ examples: Examples;
58
+ rule: Rule;
59
+ feature: Feature;
60
+ given: Given;
61
+ when: When;
62
+ then: Then;
63
+ scenarioOutline: ScenarioOutline;
64
+ docString: DocString;
65
+ };
66
+ type StepStatement = Given | When | Then;
67
+ type Statement = StatementMap[keyof StatementMap];
68
+ declare function isStatementType<K extends keyof StatementMap>(statement: Statement, kind: K): statement is StatementMap[K];
69
+ declare function resolveStatementType<K extends keyof StatementMap>(statement: Statement, kind: K): StatementMap[K] | undefined;
70
+ export { isStatementType, resolveStatementType, Background, StepStatement, Given, When, Then, Statement, Rule, Example, Examples, Feature, ScenarioOutline, Tags, };
71
+ //# sourceMappingURL=statement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statement.d.ts","sourceRoot":"","sources":["../src/statement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ function isStatementType(statement, kind) {
2
+ return statement.type.type === kind;
3
+ }
4
+ function resolveStatementType(statement, kind) {
5
+ if (isStatementType(statement, kind)) {
6
+ return statement;
7
+ }
8
+ }
9
+ export { isStatementType, resolveStatementType, };
10
+ //# sourceMappingURL=statement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statement.js","sourceRoot":"","sources":["../src/statement.ts"],"names":[],"mappings":"AA0FA,SAAS,eAAe,CAA+B,SAAoB,EAAE,IAAO;IAChF,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AACxC,CAAC;AAED,SAAS,oBAAoB,CACzB,SAAoB,EACpB,IAAO;IAEP,IAAI,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED,OAAO,EACH,eAAe,EACf,oBAAoB,GAavB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Expression } from '@cucumber/cucumber-expressions';
2
+ import { State } from './state.js';
3
+ import { StepStatement } from './statement.js';
4
+ type MaybePromise<T> = T | Promise<T>;
5
+ type StepFunction<S extends State = State, R extends State | undefined = undefined, A extends any[] = any> = [
6
+ R
7
+ ] extends [undefined] ? (state: S, args: A, data?: Array<Array<string>> | string) => MaybePromise<void | object> : (state: S, args: A, data?: Array<Array<string>> | string) => MaybePromise<R>;
8
+ interface StepDefinition<S extends State = State, R extends State | undefined = undefined, A extends any[] = any> {
9
+ expression: string;
10
+ f: StepFunction<S, R, A>;
11
+ cucumberExpression: Expression;
12
+ }
13
+ declare const addStepDefinition: <S extends State = State, R extends State | undefined = undefined, A extends any[] = any>(expression: string, f: StepFunction<S, R, A>) => void;
14
+ interface StepDefinitionMatch {
15
+ stepDefinition: StepDefinition;
16
+ parameters: any[];
17
+ }
18
+ declare const findStepDefinitionMatch: (step: StepStatement) => StepDefinitionMatch;
19
+ export { addStepDefinition, findStepDefinitionMatch, StepDefinitionMatch };
20
+ //# sourceMappingURL=steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,UAAU,EAAY,MAAM,gCAAgC,CAAC;AAGhH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,KAAK,YAAY,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG,IAAI;IACzG,CAAC;CACJ,SAAS,CAAC,SAAS,CAAC,GACf,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,KAAK,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,GACxF,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAEnF,UAAU,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG;IAC5G,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,kBAAkB,EAAE,UAAU,CAAC;CAClC;AAYD,QAAA,MAAM,iBAAiB,EAAE,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG,EAC7G,UAAU,EAAE,MAAM,EAClB,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACvB,IAIJ,CAAC;AAEF,UAAU,mBAAmB;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,GAAG,EAAE,CAAC;CACrB;AAmBD,QAAA,MAAM,uBAAuB,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,mBAmBvD,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,42 +1,35 @@
1
1
  import { ExpressionFactory, ParameterTypeRegistry } from '@cucumber/cucumber-expressions';
2
2
  import _ from 'lodash/fp.js';
3
3
  import { log } from './logger.js';
4
-
5
4
  var steps = [];
6
-
7
5
  const typeName = {
8
- given : 'Given',
9
- then : 'Then',
10
- when : 'When',
6
+ given: 'Given',
7
+ then: 'Then',
8
+ when: 'When',
11
9
  };
12
-
13
10
  const expressionFactory = new ExpressionFactory(new ParameterTypeRegistry());
14
-
15
- export const addStepDefinition = (expression,f) => {
11
+ const addStepDefinition = (expression, f) => {
16
12
  log.debug({ expression }, 'addStepDefinition expression');
17
13
  const cucumberExpression = expressionFactory.createExpression(expression);
18
- steps = _.concat(steps,{ expression, f, cucumberExpression });
19
- }
20
-
14
+ steps = _.concat(steps, { expression, f, cucumberExpression });
15
+ };
21
16
  const findStepDefinitionMatches = (step) => {
22
- const matchesMapper = _.map((match) => match.getValue());
23
- const reducer = _.reduce((accumulator,stepDefinition) => {
17
+ const matchesMapper = _.map((match) => match.getValue(undefined));
18
+ const reducer = _.reduce((accumulator, stepDefinition) => {
24
19
  const matches = stepDefinition.cucumberExpression.match(step.text);
25
20
  if (matches) {
26
21
  //console.log(accumulator,stepDefinition,matches);
27
- return _.concat(accumulator,{ stepDefinition, parameters : matchesMapper(matches) });
28
- } else {
22
+ return _.concat(accumulator, { stepDefinition, parameters: matchesMapper(matches) });
23
+ }
24
+ else {
29
25
  return accumulator;
30
26
  }
31
27
  });
32
-
33
28
  return reducer([])(steps);
34
29
  };
35
-
36
- export const findStepDefinitionMatch = (step) => {
30
+ const findStepDefinitionMatch = (step) => {
37
31
  const stepDefinitionMatches = findStepDefinitionMatches(step);
38
-
39
- if (!stepDefinitionMatches || (stepDefinitionMatches.length == 0)) {
32
+ if (!stepDefinitionMatches || stepDefinitionMatches.length == 0) {
40
33
  throw new Error(`Undefined. Implement with the following snippet:
41
34
 
42
35
  ${typeName[step.type.type]}('${step.text}', (state,params,data) => {
@@ -46,10 +39,10 @@ export const findStepDefinitionMatch = (step) => {
46
39
  });
47
40
  `);
48
41
  }
49
-
50
42
  if (stepDefinitionMatches.length > 1) {
51
- throw new Error('More than one step which matches: \''+step.type.name+' '+step.text+'\'');
43
+ throw new Error("More than one step which matches: '" + step.type.name + ' ' + step.text + "'");
52
44
  }
53
-
54
45
  return stepDefinitionMatches[0];
55
46
  };
47
+ export { addStepDefinition, findStepDefinitionMatch };
48
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../src/steps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAwB,MAAM,gCAAgC,CAAC;AAChH,OAAO,CAAC,MAAM,cAAc,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAkBlC,IAAI,KAAK,GAAyC,EAAE,CAAC;AAErD,MAAM,QAAQ,GAAG;IACb,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACf,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;AAE7E,MAAM,iBAAiB,GAGX,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;IAC1B,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,8BAA8B,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1E,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC;AAOF,MAAM,yBAAyB,GAAmD,CAAC,IAAI,EAAE,EAAE;IACvF,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CACpB,CAAC,WAAkC,EAAE,cAA8B,EAAE,EAAE;QACnE,MAAM,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,OAAO,EAAE,CAAC;YACV,kDAAkD;YAClD,OAAO,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACJ,OAAO,WAAW,CAAC;QACvB,CAAC;IACL,CAAC,CACJ,CAAC;IAEF,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAiD,CAAC,IAAI,EAAE,EAAE;IACnF,MAAM,qBAAqB,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC;;MAElB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;;;;;CAK3C,CAAC,CAAC;IACC,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAuB,CAAC"}
package/dist/tags.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { Tags } from './statement.js';
2
+ type TagsFunction = (tags?: Tags) => boolean;
3
+ declare const createTagsFunction: (tagsExpression?: string) => TagsFunction;
4
+ export { createTagsFunction, TagsFunction };
5
+ //# sourceMappingURL=tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAuCtC,KAAK,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC;AAqC7C,QAAA,MAAM,kBAAkB,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,KAAK,YAQtD,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,CAAC"}
@@ -2,67 +2,54 @@ import _ from 'lodash/fp.js';
2
2
  import nearley from 'nearley';
3
3
  import tagsExpressionParser from './tags-expression.js';
4
4
  import { log } from './logger.js';
5
-
6
5
  const parseTagsExpression = (tagsExpression) => {
7
6
  const parser = new nearley.Parser(nearley.Grammar.fromCompiled(tagsExpressionParser));
8
-
9
7
  tagsExpression += '\n';
10
8
  parser.feed(tagsExpression);
11
9
  log.debug({ results: parser.results }, `parseTagsExpression expression: '${tagsExpression}'`);
12
-
13
10
  if (parser.results.length == 0) {
14
11
  throw new Error('Unexpected end of expression');
15
12
  }
16
- log.debug('parsing result: '+JSON.stringify(parser.results,null,2));
13
+ log.debug('parsing result: ' + JSON.stringify(parser.results, null, 2));
17
14
  if (parser.results.length > 1) {
18
- throw new Error('Ambiguous parsing: '+parser.results.length);
15
+ throw new Error('Ambiguous parsing: ' + parser.results.length);
19
16
  }
20
-
21
17
  return parser.results[0];
22
- }
23
-
18
+ };
24
19
  const createFunction = (e) => {
25
20
  if (_.isString(e)) {
26
21
  log.debug(`createFunction tag: ${e}`);
27
22
  return (tags) => {
28
- const result = _.find((tag) => tag == e,tags);
23
+ const result = _.find((tag) => tag == e, tags);
29
24
  log.debug(`tagsExpression tag: ${e} tags: ${JSON.stringify(tags)} match? ${result}`);
30
- return result;
31
- }
25
+ return result ? true : false;
26
+ };
32
27
  }
33
-
34
- if (!_.has('operator',e)) {
28
+ if (!_.has('operator', e)) {
35
29
  throw new Error('Missing operator.');
36
30
  }
37
-
38
31
  if (e.operator == 'not') {
39
32
  log.debug(`createFunction not ${JSON.stringify(e.expression)}`);
40
33
  const f = createFunction(e.expression);
41
34
  return (tags) => !f(tags);
42
35
  }
43
-
44
36
  log.debug(`createFunction ${JSON.stringify(e.left)} ${e.operator} ${JSON.stringify(e.right)}`);
45
37
  const l = createFunction(e.left);
46
38
  const r = createFunction(e.right);
47
-
48
39
  if (e.operator == 'and') {
49
- return (tags) => (l(tags) && r(tags));
40
+ return (tags) => l(tags) && r(tags);
50
41
  }
51
-
52
-
53
42
  if (e.operator == 'or') {
54
- return (tags) => (l(tags) || r(tags));
43
+ return (tags) => l(tags) || r(tags);
55
44
  }
56
-
57
- throw new Error('Couldn\'t parse tags expression');
58
- }
59
-
60
- export const tagsFunction = (tagsExpression) => {
45
+ throw new Error("Couldn't parse tags expression");
46
+ };
47
+ const createTagsFunction = (tagsExpression) => {
61
48
  if (!tagsExpression) {
62
49
  return (tags) => true;
63
50
  }
64
-
65
51
  const parsedTagsExpression = parseTagsExpression(tagsExpression);
66
-
67
52
  return createFunction(parsedTagsExpression);
68
- }
53
+ };
54
+ export { createTagsFunction };
55
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Vite } from 'vitest/node';
2
+ import { log, logConfig } from './logger.js';
3
+ import { BeforeAll, applyBeforeAllHooks, Before, applyBeforeHooks, AfterAll, applyAfterAllHooks, After, applyAfterHooks, BeforeStep, applyBeforeStepHooks, AfterStep, applyAfterStepHooks } from './hooks.js';
4
+ import { State } from './state.js';
5
+ import { StepStatement } from './statement.js';
6
+ declare const Given: <S extends State = State, R extends State | undefined = undefined, A extends any[] = any>(expression: string, f: [R] extends [undefined] ? (state: S, args: A, data?: Array<Array<string>> | string) => void | object | Promise<void | object> : (state: S, args: A, data?: Array<Array<string>> | string) => R | Promise<R>) => void;
7
+ declare const When: <S extends State = State, R extends State | undefined = undefined, A extends any[] = any>(expression: string, f: [R] extends [undefined] ? (state: S, args: A, data?: Array<Array<string>> | string) => void | object | Promise<void | object> : (state: S, args: A, data?: Array<Array<string>> | string) => R | Promise<R>) => void;
8
+ declare const Then: <S extends State = State, R extends State | undefined = undefined, A extends any[] = any>(expression: string, f: [R] extends [undefined] ? (state: S, args: A, data?: Array<Array<string>> | string) => void | object | Promise<void | object> : (state: S, args: A, data?: Array<Array<string>> | string) => R | Promise<R>) => void;
9
+ declare const Test: (state: State, step: StepStatement) => State;
10
+ declare const DataTable: (dataTable: Array<Array<string>>) => Array<Record<string, string>>;
11
+ declare const vitestCucumberPlugin: () => Vite.Plugin;
12
+ export { Given, When, Then, Test, log, logConfig, applyBeforeAllHooks, applyBeforeHooks, applyAfterAllHooks, applyAfterHooks, applyBeforeStepHooks, applyAfterStepHooks, BeforeAll, Before, AfterAll, After, BeforeStep, AfterStep, DataTable, vitestCucumberPlugin, State, };
13
+ //# sourceMappingURL=vitest-cucumber-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest-cucumber-plugin.d.ts","sourceRoot":"","sources":["../src/vitest-cucumber-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAInC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EACH,SAAS,EACT,mBAAmB,EACnB,MAAM,EACN,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,KAAK,EACL,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,mBAAmB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAoB/C,QAAA,MAAM,KAAK,uUAAoB,CAAC;AAChC,QAAA,MAAM,IAAI,uUAAoB,CAAC;AAC/B,QAAA,MAAM,IAAI,uUAAoB,CAAC;AAE/B,QAAA,MAAM,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,KAAK,KAkBlD,CAAC;AAEF,QAAA,MAAM,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUjF,CAAC;AAEF,QAAA,MAAM,oBAAoB,EAAE,MAAM,IAAI,CAAC,MAqCtC,CAAC;AAEF,OAAO,EACH,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,MAAM,EACN,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,KAAK,GACR,CAAC"}
@@ -0,0 +1,69 @@
1
+ import _ from 'lodash/fp.js';
2
+ import { addStepDefinition, findStepDefinitionMatch } from './steps.js';
3
+ import { generateFeature } from './generate/index.js';
4
+ import { log, logConfig } from './logger.js';
5
+ import { parse } from './parse.js';
6
+ import { createTagsFunction } from './tags.js';
7
+ import { BeforeAll, applyBeforeAllHooks, Before, applyBeforeHooks, AfterAll, applyAfterAllHooks, After, applyAfterHooks, BeforeStep, applyBeforeStepHooks, AfterStep, applyAfterStepHooks, } from './hooks.js';
8
+ import { gherkinLexerConfig } from './gherkin-lexer.js';
9
+ const featureRegex = /\.feature$/;
10
+ const compileFeatureToJs = async (options) => {
11
+ const { config, featureSource, featurePath } = options;
12
+ const feature = await parse(featureSource);
13
+ const code = await generateFeature({ config, feature, featurePath });
14
+ return code;
15
+ };
16
+ const Given = addStepDefinition;
17
+ const When = addStepDefinition;
18
+ const Then = addStepDefinition;
19
+ const Test = (state, step) => {
20
+ log.debug({ step, state }, 'Test step');
21
+ const stepDefinitionMatch = findStepDefinitionMatch(step);
22
+ const extraData = step.dataTable ? step.dataTable : step.docString ? step.docString.text : undefined;
23
+ const newState = stepDefinitionMatch.stepDefinition.f(state, stepDefinitionMatch.parameters, extraData);
24
+ log.info({ state, newState, extraData, parameters: stepDefinitionMatch.parameters }, `${step.type.name}('${stepDefinitionMatch.stepDefinition.expression}')`);
25
+ log.debug({ newState }, 'Test newState');
26
+ if (newState === undefined) {
27
+ return state;
28
+ }
29
+ return newState;
30
+ };
31
+ const DataTable = (dataTable) => {
32
+ const parameters = _.first(dataTable);
33
+ if (!parameters) {
34
+ throw new Error('Data table was empty.');
35
+ }
36
+ const rows = _.tail(dataTable);
37
+ return _.map((row) => _.zipObject(parameters, row))(rows);
38
+ };
39
+ const vitestCucumberPlugin = () => {
40
+ let config;
41
+ return {
42
+ name: 'vitest-cucumber-transform',
43
+ configResolved: (resolvedConfig) => {
44
+ config = _.defaults({
45
+ root: resolvedConfig.root,
46
+ log: { level: 'warn' },
47
+ language: 'en',
48
+ stepDefinitions: { include: 'features/**/*.[jt]s' },
49
+ }, _.get('test.cucumber', resolvedConfig));
50
+ logConfig(config.log);
51
+ config = _.set('tagsFunction', createTagsFunction(_.get('tags', config)), config);
52
+ log.debug({ config }, 'config');
53
+ // Nearley has no mechanism for passing user data into the parser so need to do some hacky stuff here
54
+ // and setup some globals to get around the limitations.
55
+ gherkinLexerConfig(config);
56
+ },
57
+ transform: async (src, id) => {
58
+ if (featureRegex.test(id)) {
59
+ const code = await compileFeatureToJs({ config, featureSource: src, featurePath: id });
60
+ log.debug(`transform ${id} -> ${code}`);
61
+ return {
62
+ code,
63
+ };
64
+ }
65
+ },
66
+ };
67
+ };
68
+ export { Given, When, Then, Test, log, logConfig, applyBeforeAllHooks, applyBeforeHooks, applyAfterAllHooks, applyAfterHooks, applyBeforeStepHooks, applyAfterStepHooks, BeforeAll, Before, AfterAll, After, BeforeStep, AfterStep, DataTable, vitestCucumberPlugin, };
69
+ //# sourceMappingURL=vitest-cucumber-plugin.js.map