@haibun/core 1.75.2 → 3.0.0

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 (135) hide show
  1. package/build/applyEffectFeatures.d.ts.map +1 -1
  2. package/build/applyEffectFeatures.js +3 -6
  3. package/build/applyEffectFeatures.js.map +1 -1
  4. package/build/currentVersion.d.ts +1 -1
  5. package/build/currentVersion.d.ts.map +1 -1
  6. package/build/currentVersion.js +1 -1
  7. package/build/currentVersion.js.map +1 -1
  8. package/build/jsprolog/converter.d.ts +9 -0
  9. package/build/jsprolog/converter.d.ts.map +1 -0
  10. package/build/jsprolog/converter.js +42 -0
  11. package/build/jsprolog/converter.js.map +1 -0
  12. package/build/jsprolog/stepper-utils.d.ts +8 -0
  13. package/build/jsprolog/stepper-utils.d.ts.map +1 -0
  14. package/build/jsprolog/stepper-utils.js +8 -0
  15. package/build/jsprolog/stepper-utils.js.map +1 -0
  16. package/build/jsprolog/test.jsprolog.d.ts +4 -0
  17. package/build/jsprolog/test.jsprolog.d.ts.map +1 -0
  18. package/build/jsprolog/test.jsprolog.js +19 -0
  19. package/build/jsprolog/test.jsprolog.js.map +1 -0
  20. package/build/jsprolog/test.kireji.d.ts +4 -0
  21. package/build/jsprolog/test.kireji.d.ts.map +1 -0
  22. package/build/jsprolog/test.kireji.js +19 -0
  23. package/build/jsprolog/test.kireji.js.map +1 -0
  24. package/build/jsprolog/withAction.d.ts +32 -0
  25. package/build/jsprolog/withAction.d.ts.map +1 -0
  26. package/build/jsprolog/withAction.js +65 -0
  27. package/build/jsprolog/withAction.js.map +1 -0
  28. package/build/kireji/converter.d.ts +9 -0
  29. package/build/kireji/converter.d.ts.map +1 -0
  30. package/build/kireji/converter.js +49 -0
  31. package/build/kireji/converter.js.map +1 -0
  32. package/build/kireji/test.kireji.d.ts +4 -0
  33. package/build/kireji/test.kireji.d.ts.map +1 -0
  34. package/build/kireji/test.kireji.js +19 -0
  35. package/build/kireji/test.kireji.js.map +1 -0
  36. package/build/kireji/withAction.d.ts +36 -0
  37. package/build/kireji/withAction.d.ts.map +1 -0
  38. package/build/kireji/withAction.js +66 -0
  39. package/build/kireji/withAction.js.map +1 -0
  40. package/build/lib/Logger.d.ts +2 -0
  41. package/build/lib/Logger.d.ts.map +1 -1
  42. package/build/lib/Logger.js +9 -5
  43. package/build/lib/Logger.js.map +1 -1
  44. package/build/lib/TestLogger.d.ts +1 -0
  45. package/build/lib/TestLogger.d.ts.map +1 -1
  46. package/build/lib/TestLogger.js +1 -0
  47. package/build/lib/TestLogger.js.map +1 -1
  48. package/build/lib/astepper.d.ts +4 -6
  49. package/build/lib/astepper.d.ts.map +1 -1
  50. package/build/lib/astepper.js +0 -1
  51. package/build/lib/astepper.js.map +1 -1
  52. package/build/lib/core-domains.d.ts +3 -3
  53. package/build/lib/core-domains.d.ts.map +1 -1
  54. package/build/lib/core-domains.js +3 -3
  55. package/build/lib/core-domains.js.map +1 -1
  56. package/build/lib/defs.d.ts +29 -23
  57. package/build/lib/defs.d.ts.map +1 -1
  58. package/build/lib/defs.js +2 -1
  59. package/build/lib/defs.js.map +1 -1
  60. package/build/lib/errors.d.ts +13 -0
  61. package/build/lib/errors.d.ts.map +1 -0
  62. package/build/lib/errors.js +18 -0
  63. package/build/lib/errors.js.map +1 -0
  64. package/build/lib/feature-variables.d.ts +4 -2
  65. package/build/lib/feature-variables.d.ts.map +1 -1
  66. package/build/lib/feature-variables.js +12 -2
  67. package/build/lib/feature-variables.js.map +1 -1
  68. package/build/lib/features.d.ts.map +1 -1
  69. package/build/lib/features.js +7 -3
  70. package/build/lib/features.js.map +1 -1
  71. package/build/lib/interfaces/logger.d.ts +4 -2
  72. package/build/lib/interfaces/logger.d.ts.map +1 -1
  73. package/build/lib/interfaces/logger.js +1 -0
  74. package/build/lib/interfaces/logger.js.map +1 -1
  75. package/build/lib/namedVars.d.ts.map +1 -1
  76. package/build/lib/namedVars.js +8 -1
  77. package/build/lib/namedVars.js.map +1 -1
  78. package/build/lib/populateActionArgs.js +1 -1
  79. package/build/lib/populateActionArgs.js.map +1 -1
  80. package/build/lib/test/TestSteps.d.ts +0 -5
  81. package/build/lib/test/TestSteps.d.ts.map +1 -1
  82. package/build/lib/test/TestSteps.js +0 -8
  83. package/build/lib/test/TestSteps.js.map +1 -1
  84. package/build/lib/test/lib.d.ts +4 -1
  85. package/build/lib/test/lib.d.ts.map +1 -1
  86. package/build/lib/test/lib.js +18 -5
  87. package/build/lib/test/lib.js.map +1 -1
  88. package/build/lib/test/resolvedTestFeatures.js +1 -1
  89. package/build/lib/test/resolvedTestFeatures.js.map +1 -1
  90. package/build/lib/util/featureStep-executor.d.ts +2 -1
  91. package/build/lib/util/featureStep-executor.d.ts.map +1 -1
  92. package/build/lib/util/featureStep-executor.js +31 -7
  93. package/build/lib/util/featureStep-executor.js.map +1 -1
  94. package/build/lib/util/index.d.ts +3 -1
  95. package/build/lib/util/index.d.ts.map +1 -1
  96. package/build/lib/util/index.js +2 -0
  97. package/build/lib/util/index.js.map +1 -1
  98. package/build/phases/Executor.d.ts +6 -1
  99. package/build/phases/Executor.d.ts.map +1 -1
  100. package/build/phases/Executor.js +156 -22
  101. package/build/phases/Executor.js.map +1 -1
  102. package/build/phases/Resolver.d.ts +4 -3
  103. package/build/phases/Resolver.d.ts.map +1 -1
  104. package/build/phases/Resolver.js +49 -31
  105. package/build/phases/Resolver.js.map +1 -1
  106. package/build/phases/collector.d.ts +1 -1
  107. package/build/phases/collector.d.ts.map +1 -1
  108. package/build/phases/collector.js +36 -7
  109. package/build/phases/collector.js.map +1 -1
  110. package/build/runner.d.ts.map +1 -1
  111. package/build/runner.js +4 -7
  112. package/build/runner.js.map +1 -1
  113. package/build/steps/activities-stepper.d.ts +79 -0
  114. package/build/steps/activities-stepper.d.ts.map +1 -0
  115. package/build/steps/activities-stepper.js +342 -0
  116. package/build/steps/activities-stepper.js.map +1 -0
  117. package/build/steps/conditions-stepper.d.ts +27 -0
  118. package/build/steps/conditions-stepper.d.ts.map +1 -0
  119. package/build/steps/conditions-stepper.js +99 -0
  120. package/build/steps/conditions-stepper.js.map +1 -0
  121. package/build/steps/debugger-stepper.d.ts +60 -2
  122. package/build/steps/debugger-stepper.d.ts.map +1 -1
  123. package/build/steps/debugger-stepper.js +5 -5
  124. package/build/steps/debugger-stepper.js.map +1 -1
  125. package/build/steps/haibun.d.ts +69 -22
  126. package/build/steps/haibun.d.ts.map +1 -1
  127. package/build/steps/haibun.js +138 -75
  128. package/build/steps/haibun.js.map +1 -1
  129. package/build/steps/narrator.d.ts +4 -4
  130. package/build/steps/parse.d.ts +1 -1
  131. package/build/steps/variables-stepper.d.ts +69 -4
  132. package/build/steps/variables-stepper.d.ts.map +1 -1
  133. package/build/steps/variables-stepper.js +44 -14
  134. package/build/steps/variables-stepper.js.map +1 -1
  135. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"applyEffectFeatures.d.ts","sourceRoot":"","sources":["../src/applyEffectFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAA8B,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8BhJ"}
1
+ {"version":3,"file":"applyEffectFeatures.d.ts","sourceRoot":"","sources":["../src/applyEffectFeatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAA8B,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4BhJ"}
@@ -7,21 +7,18 @@ export async function applyEffectFeatures(world, resolvedFeatures, steppers) {
7
7
  const newFeature = { ...feature, featureSteps: [] };
8
8
  const appliers = [];
9
9
  for (const featureStep of feature.featureSteps) {
10
- let newSteps = [featureStep];
10
+ const newSteps = [featureStep];
11
11
  const action = featureStep.action;
12
12
  const stepper = steppers.find((s) => constructorName(s) === action.stepperName);
13
- if (stepper?.steps[action.actionName].applyEffect) {
13
+ if (stepper?.steps[action.actionName].checkEffect) {
14
14
  const applier = stepper?.steps[action.actionName];
15
15
  // simplifyStepArgs is async (may await domain coercers) so await it here
16
16
  const namedWithVars = await populateActionArgs(featureStep, world, steppers);
17
17
  appliers.push({ applier, namedWithVars });
18
18
  }
19
19
  else if (appliers.length > 0) {
20
- newSteps = [];
21
20
  for (const a of appliers) {
22
- const applied = await a.applier.applyEffect(a.namedWithVars, featureStep, steppers);
23
- if (applied.length < 1)
24
- throw Error('wtw');
21
+ const applied = await a.applier.checkEffect(a.namedWithVars, featureStep, steppers);
25
22
  newSteps.push(...applied);
26
23
  }
27
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"applyEffectFeatures.js","sourceRoot":"","sources":["../src/applyEffectFeatures.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,gBAAoC,EAAE,QAAoB;IAClH,MAAM,eAAe,GAAG,EAAE,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,YAAY,GAAmB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACpD,MAAM,QAAQ,GAA2D,EAAE,CAAC;QAC5E,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAChD,IAAI,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YAEhF,IAAI,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClD,yEAAyE;gBACzE,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,QAAQ,GAAG,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;wBAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC3C,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,eAAe,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"applyEffectFeatures.js","sourceRoot":"","sources":["../src/applyEffectFeatures.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,gBAAoC,EAAE,QAAoB;IAClH,MAAM,eAAe,GAAG,EAAE,CAAC;IAE3B,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,YAAY,GAAmB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACpD,MAAM,QAAQ,GAA2D,EAAE,CAAC;QAC5E,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YAEhF,IAAI,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClD,yEAAyE;gBACzE,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACpF,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC3B,CAAC;YACF,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,eAAe,CAAC;AACxB,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const currentVersion = "1.75.2";
1
+ export declare const currentVersion = "3.0.0";
2
2
  //# sourceMappingURL=currentVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"currentVersion.d.ts","sourceRoot":"","sources":["../src/currentVersion.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"currentVersion.d.ts","sourceRoot":"","sources":["../src/currentVersion.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,UAAU,CAAC"}
@@ -1,2 +1,2 @@
1
- export const currentVersion = '1.75.2';
1
+ export const currentVersion = '3.0.0';
2
2
  //# sourceMappingURL=currentVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"currentVersion.js","sourceRoot":"","sources":["../src/currentVersion.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"currentVersion.js","sourceRoot":"","sources":["../src/currentVersion.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AStepper } from '../lib/astepper.js';
2
+ import { TActionExecutor } from './withAction.js';
3
+ type TkirejiFeature = {
4
+ [key: string]: TActionExecutor<string>[];
5
+ };
6
+ export declare const toBdd: (feature: TkirejiFeature) => string;
7
+ export declare const fromBdd: (bdd: string, steppers: AStepper[]) => Promise<TkirejiFeature>;
8
+ export {};
9
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/jsprolog/converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAA8B,MAAM,iBAAiB,CAAC;AAG9E,KAAK,cAAc,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,SAAS,cAAc,KAAG,MAc/C,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,UAAU,QAAQ,EAAE,KAAG,OAAO,CAAC,cAAc,CA+BjF,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { Resolver } from '../phases/Resolver.js';
2
+ import { withAction } from './withAction.js';
3
+ export const toBdd = (feature) => {
4
+ let bddString = '';
5
+ for (const featureName in feature) {
6
+ bddString += `Feature: ${featureName}\n`;
7
+ const steps = feature[featureName];
8
+ for (const step of steps) {
9
+ const { gwta } = step();
10
+ bddString += ` ${gwta}\n`;
11
+ }
12
+ }
13
+ return bddString;
14
+ };
15
+ export const fromBdd = (bdd, steppers) => {
16
+ const lines = bdd.split('\n');
17
+ const featureName = lines[0].replace('Feature: ', '').trim();
18
+ const steps = lines.slice(1).map(l => l.trim()).filter(l => l.length > 0);
19
+ const resolver = new Resolver(steppers);
20
+ const stepperActions = steppers.map(stepper => withAction(stepper));
21
+ const kirejiSteps = steps.map(step => {
22
+ const action = resolver.findSingleStepAction(step);
23
+ const { actionName, stepValuesMap } = action;
24
+ const args = {};
25
+ if (stepValuesMap) {
26
+ for (const key in stepValuesMap) {
27
+ args[key] = stepValuesMap[key].term;
28
+ }
29
+ }
30
+ const actionFunction = stepperActions.reduce((found, actions) => {
31
+ return found ?? actions[actionName];
32
+ }, undefined);
33
+ if (!actionFunction) {
34
+ throw new Error(`Action "${actionName}" not found in provided steppers.`);
35
+ }
36
+ return actionFunction(args);
37
+ });
38
+ return Promise.resolve({
39
+ [featureName]: kirejiSteps,
40
+ });
41
+ };
42
+ //# sourceMappingURL=converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/jsprolog/converter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAmC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAO9E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAuB,EAAU,EAAE;IACvD,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;QAClC,SAAS,IAAI,YAAY,WAAW,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;YACxB,SAAS,IAAI,KAAK,IAAI,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,QAAoB,EAA2B,EAAE;IAClF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAsD,CAAC,CAAC;IAE3H,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;QAC7C,MAAM,IAAI,GAA8B,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAqC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClG,OAAO,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,mCAAmC,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,CAAC,WAAW,CAAC,EAAE,WAAW;KAC3B,CAAC,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { AStepper } from '../lib/astepper.js';
2
+ import { TCurriedAction } from './withAction.js';
3
+ type TActionMap = {
4
+ [key: string]: TCurriedAction<string>;
5
+ };
6
+ export declare const collectActionsFromSteppers: (steppers: AStepper[]) => TActionMap;
7
+ export {};
8
+ //# sourceMappingURL=stepper-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepper-utils.d.ts","sourceRoot":"","sources":["../../src/jsprolog/stepper-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAc,MAAM,iBAAiB,CAAC;AAE7D,KAAK,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,0BAA0B,GAAI,UAAU,QAAQ,EAAE,KAAG,UAKjE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { withAction } from './withAction.js';
2
+ export const collectActionsFromSteppers = (steppers) => {
3
+ return steppers.reduce((acc, stepper) => {
4
+ const stepperActions = withAction(stepper);
5
+ return Object.assign(acc, stepperActions);
6
+ }, {});
7
+ };
8
+ //# sourceMappingURL=stepper-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stepper-utils.js","sourceRoot":"","sources":["../../src/jsprolog/stepper-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,QAAoB,EAAc,EAAE;IAC3E,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACpC,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAA0B,CAAC;QACpE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC9C,CAAC,EAAE,EAAgB,CAAC,CAAC;AACzB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const features: {
2
+ 'test feature': import("./withAction.js").TActionExecutor<string>[];
3
+ };
4
+ //# sourceMappingURL=test.jsprolog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.jsprolog.d.ts","sourceRoot":"","sources":["../../src/jsprolog/test.jsprolog.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ;;CAIpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { withAction } from './withAction.js';
2
+ import { AStepper } from '../lib/astepper.js';
3
+ import { OK } from '../lib/defs.js';
4
+ class TestStepper extends AStepper {
5
+ steps = {
6
+ set: {
7
+ gwta: 'set {what} to {value}',
8
+ action: async () => OK,
9
+ },
10
+ };
11
+ }
12
+ const stepper = new TestStepper();
13
+ const { set } = withAction(stepper);
14
+ export const features = {
15
+ 'test feature': [
16
+ set({ what: 'test', value: 'value' }),
17
+ ],
18
+ };
19
+ //# sourceMappingURL=test.jsprolog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.jsprolog.js","sourceRoot":"","sources":["../../src/jsprolog/test.jsprolog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,WAAY,SAAQ,QAAQ;IAChC,KAAK,GAAG;QACN,GAAG,EAAE;YACH,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACvB;KACF,CAAC;CACH;AAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,cAAc,EAAE;QACd,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACtC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const features: {
2
+ 'test feature': import("./withAction.js").TActionExecutor<string>[];
3
+ };
4
+ //# sourceMappingURL=test.kireji.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.kireji.d.ts","sourceRoot":"","sources":["../../src/jsprolog/test.kireji.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ;;CAIpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { withAction } from './withAction.js';
2
+ import { AStepper } from '../lib/astepper.js';
3
+ import { OK } from '../lib/defs.js';
4
+ class TestStepper extends AStepper {
5
+ steps = {
6
+ set: {
7
+ gwta: 'set {what} to {value}',
8
+ action: async () => OK,
9
+ },
10
+ };
11
+ }
12
+ const stepper = new TestStepper();
13
+ const { set } = withAction(stepper);
14
+ export const features = {
15
+ 'test feature': [
16
+ set({ what: 'test', value: 'value' }),
17
+ ],
18
+ };
19
+ //# sourceMappingURL=test.kireji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.kireji.js","sourceRoot":"","sources":["../../src/jsprolog/test.kireji.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,WAAY,SAAQ,QAAQ;IAChC,KAAK,GAAG;QACN,GAAG,EAAE;YACH,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACvB;KACF,CAAC;CACH;AAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,cAAc,EAAE;QACd,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACtC;CACF,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { AStepper, TStepperSteps } from '../lib/astepper.js';
2
+ type TStripOptionalPatterns<S extends string> = S extends `${infer Before}(${string})?${infer After}` ? TStripOptionalPatterns<`${Before}${After}`> : S;
3
+ type TPlaceholderEntries<S extends string> = TPlaceholderEntriesImpl<TStripOptionalPatterns<S>>;
4
+ type TPlaceholderEntriesImpl<S extends string> = S extends `${string}{${infer Placeholder}}${infer After}` ? [...TPlaceholderEntry<Placeholder>, ...TPlaceholderEntriesImpl<After>] : [];
5
+ type TPlaceholderEntry<P extends string> = P extends `${infer Name}:${infer Domain}` ? [[Name, Domain]] : [[P, undefined]];
6
+ type TPlaceholderValueType<Name extends string, Domain extends string | undefined> = Domain extends 'statement' ? string | TActionExecutor<string> : Name extends 'statement' ? string | TActionExecutor<string> : string;
7
+ type TPlaceholderDomain<Entries extends ReadonlyArray<[string, string | undefined]>, Name extends string> = Extract<Entries[number], [Name, string | undefined]> extends [Name, infer Domain] ? Domain extends string | undefined ? Domain : undefined : undefined;
8
+ type TArgsInputFromEntries<Entries extends ReadonlyArray<[string, string | undefined]>> = {
9
+ [K in Entries[number][0]]: TPlaceholderValueType<K, TPlaceholderDomain<Entries, K>>;
10
+ };
11
+ type TArgsResolvedFromEntries<Entries extends ReadonlyArray<[string, string | undefined]>> = {
12
+ [K in Entries[number][0]]: string;
13
+ };
14
+ type TActionArgsInput<S extends string> = TArgsInputFromEntries<TPlaceholderEntries<S>>;
15
+ type TActionArgsResolved<S extends string> = TArgsResolvedFromEntries<TPlaceholderEntries<S>>;
16
+ export type TActionExecutor<S extends string> = () => {
17
+ actionName: string;
18
+ args: TActionArgsResolved<S>;
19
+ gwta: string;
20
+ };
21
+ export type TCurriedAction<S extends string> = (args: TActionArgsInput<S>) => TActionExecutor<S>;
22
+ type TActionsFromStepper<S extends TStepperSteps> = {
23
+ [K in keyof S]: S[K] extends {
24
+ gwta: infer G;
25
+ } ? G extends string ? TCurriedAction<G> : never : never;
26
+ };
27
+ type TStepMap<T extends AStepper> = T extends {
28
+ typedSteps: infer U;
29
+ } ? U extends TStepperSteps ? U : T['steps'] : T['steps'];
30
+ export declare const withAction: <T extends AStepper>(stepper: T) => TActionsFromStepper<TStepMap<T>>;
31
+ export {};
32
+ //# sourceMappingURL=withAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAction.d.ts","sourceRoot":"","sources":["../../src/jsprolog/withAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { namedInterpolation } from '../lib/namedVars.js';
2
+ const isStepWithGwta = (step) => {
3
+ return typeof step.gwta === 'string';
4
+ };
5
+ const interpolateGwta = (gwta, args) => {
6
+ let interpolated = gwta;
7
+ // First, remove optional regex patterns like '( empty)?' from the gwta
8
+ // These are used for matching but shouldn't appear in the final output
9
+ interpolated = interpolated.replace(/\([^)]*\)\?/g, '');
10
+ for (const key in args) {
11
+ const placeholder = `{${key}}`;
12
+ const placeholderWithDomain = new RegExp(`\\{${key}:[^}]+\\}`, 'g');
13
+ interpolated = interpolated.replace(placeholderWithDomain, args[key]);
14
+ interpolated = interpolated.replace(placeholder, args[key]);
15
+ }
16
+ return interpolated;
17
+ };
18
+ const resolveArgValue = (value) => {
19
+ if (value === null) {
20
+ return 'null';
21
+ }
22
+ if (typeof value === 'function') {
23
+ const executed = value();
24
+ return executed.gwta;
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map(resolveArgValue).join(' ');
28
+ }
29
+ if (typeof value === 'object') {
30
+ const entries = Object.entries(value).map(([key, nested]) => `${key}: ${resolveArgValue(nested)}`);
31
+ return `{ ${entries.join(', ')} }`;
32
+ }
33
+ return String(value);
34
+ };
35
+ export const withAction = (stepper) => {
36
+ const actions = {};
37
+ for (const actionName in stepper.steps) {
38
+ const step = stepper.steps[actionName];
39
+ if (isStepWithGwta(step)) {
40
+ // Strip optional patterns before extracting placeholders to match type-level behavior
41
+ const strippedGwta = step.gwta.replace(/\([^)]*\)\?/g, '');
42
+ const { stepValuesMap } = namedInterpolation(strippedGwta);
43
+ const argNames = stepValuesMap ? Object.keys(stepValuesMap) : [];
44
+ actions[actionName] = (args) => {
45
+ // Re-introducing runtime validation for missing arguments.
46
+ for (const name of argNames) {
47
+ if (args[name] === undefined) {
48
+ throw new Error(`Missing argument "${name}" for action "${actionName}"`);
49
+ }
50
+ }
51
+ const normalizedArgs = {};
52
+ for (const name of argNames) {
53
+ normalizedArgs[name] = resolveArgValue(args[name]);
54
+ }
55
+ return () => ({
56
+ actionName,
57
+ args: normalizedArgs,
58
+ gwta: interpolateGwta(step.gwta, normalizedArgs),
59
+ });
60
+ };
61
+ }
62
+ }
63
+ return actions;
64
+ };
65
+ //# sourceMappingURL=withAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAction.js","sourceRoot":"","sources":["../../src/jsprolog/withAction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,cAAc,GAAG,CAAC,IAAa,EAAyB,EAAE;IAC9D,OAAO,OAAQ,IAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAA+B,EAAU,EAAE;IAChF,IAAI,YAAY,GAAG,IAAI,CAAC;IAExB,uEAAuE;IACvE,uEAAuE;IACvE,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAExD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,GAAG,GAAG,CAAC;QAC/B,MAAM,qBAAqB,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC;QACpE,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAyED,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAU,EAAE;IACzD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AASH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAqB,OAAU,EAAoC,EAAE;IAC7F,MAAM,OAAO,GAAmC,EAAE,CAAC;IAEnD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEvC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,sFAAsF;YACtF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEhE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAqC,EAAE,EAAE;gBAC/D,2DAA2D;gBAC3D,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;wBAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,iBAAiB,UAAU,GAAG,CAAC,CAAC;oBAC3E,CAAC;gBACH,CAAC;gBAED,MAAM,cAAc,GAA2B,EAAE,CAAC;gBAElD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBACrB,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAED,OAAO,GAAG,EAAE,CAAC,CAAC;oBACZ,UAAU;oBACV,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;iBACjD,CAAC,CAAC;YACL,CAAC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAA2C,CAAC;AACrD,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { AStepper } from '../lib/astepper.js';
2
+ import { TActionExecutor } from './withAction.js';
3
+ type TkirejiFeature = {
4
+ [key: string]: (TActionExecutor<string> | string)[];
5
+ };
6
+ export declare const toBdd: (feature: TkirejiFeature) => string;
7
+ export declare const fromBdd: (bdd: string, steppers: AStepper[]) => Promise<TkirejiFeature>;
8
+ export {};
9
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/kireji/converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAA8B,MAAM,iBAAiB,CAAC;AAI9E,KAAK,cAAc,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;CACrD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,SAAS,cAAc,KAAG,MAmB/C,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,UAAU,QAAQ,EAAE,KAAG,OAAO,CAAC,cAAc,CAgCjF,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { Resolver } from '../phases/Resolver.js';
2
+ import { withAction } from './withAction.js';
3
+ export const toBdd = (feature) => {
4
+ let bddString = '';
5
+ for (const featureName in feature) {
6
+ bddString += `Feature: ${featureName}\n`;
7
+ const steps = feature[featureName];
8
+ for (const step of steps) {
9
+ // Handle both function executors and plain prose strings
10
+ if (typeof step === 'string') {
11
+ bddString += ` ${step}\n`;
12
+ }
13
+ else {
14
+ const { gwta } = step();
15
+ bddString += ` ${gwta}\n`;
16
+ }
17
+ }
18
+ }
19
+ return bddString;
20
+ };
21
+ export const fromBdd = (bdd, steppers) => {
22
+ const lines = bdd.split('\n');
23
+ const featureName = lines[0].replace('Feature: ', '').trim();
24
+ const steps = lines.slice(1).map(l => l.trim()).filter(l => l.length > 0);
25
+ const resolver = new Resolver(steppers);
26
+ const stepperActions = steppers.map(stepper => withAction(stepper));
27
+ const kirejiSteps = steps.map(step => {
28
+ const action = resolver.findSingleStepAction(step);
29
+ const { actionName, stepValuesMap } = action;
30
+ const args = {};
31
+ if (stepValuesMap) {
32
+ for (const key in stepValuesMap) {
33
+ args[key] = stepValuesMap[key].term;
34
+ console.log('\\nx', stepValuesMap[key].term);
35
+ }
36
+ }
37
+ const actionFunction = stepperActions.reduce((found, actions) => {
38
+ return found ?? actions[actionName];
39
+ }, undefined);
40
+ if (!actionFunction) {
41
+ throw new Error(`Action "${actionName}" not found in provided steppers.`);
42
+ }
43
+ return actionFunction(args);
44
+ });
45
+ return Promise.resolve({
46
+ [featureName]: kirejiSteps,
47
+ });
48
+ };
49
+ //# sourceMappingURL=converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/kireji/converter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAmC,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQ9E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAuB,EAAU,EAAE;IACvD,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;QAClC,SAAS,IAAI,YAAY,WAAW,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,yDAAyD;YACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,SAAS,IAAI,KAAK,IAAI,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;gBACxB,SAAS,IAAI,KAAK,IAAI,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,QAAoB,EAA2B,EAAE;IAClF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAsD,CAAC,CAAC;IAE3H,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;QAC7C,MAAM,IAAI,GAA8B,EAAE,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAqC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClG,OAAO,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,mCAAmC,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC;QACrB,CAAC,WAAW,CAAC,EAAE,WAAW;KAC3B,CAAC,CAAC;AACL,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const features: {
2
+ 'test feature': import("./withAction.js").TActionExecutor<string>[];
3
+ };
4
+ //# sourceMappingURL=test.kireji.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.kireji.d.ts","sourceRoot":"","sources":["../../src/kireji/test.kireji.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ;;CAIpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { withAction } from './withAction.js';
2
+ import { AStepper } from '../lib/astepper.js';
3
+ import { OK } from '../lib/defs.js';
4
+ class TestStepper extends AStepper {
5
+ steps = {
6
+ set: {
7
+ gwta: 'set {what} to {value}',
8
+ action: async () => OK,
9
+ },
10
+ };
11
+ }
12
+ const stepper = new TestStepper();
13
+ const { set } = withAction(stepper);
14
+ export const features = {
15
+ 'test feature': [
16
+ set({ what: 'test', value: 'value' }),
17
+ ],
18
+ };
19
+ //# sourceMappingURL=test.kireji.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.kireji.js","sourceRoot":"","sources":["../../src/kireji/test.kireji.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,WAAY,SAAQ,QAAQ;IAChC,KAAK,GAAG;QACN,GAAG,EAAE;YACH,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACvB;KACF,CAAC;CACH;AAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,cAAc,EAAE;QACd,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACtC;CACF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { AStepper, TStepperSteps } from '../lib/astepper.js';
2
+ type TStripOptionalPatterns<S extends string> = S extends `${infer Before}(${string})?${infer After}` ? TStripOptionalPatterns<`${Before}${After}`> : S;
3
+ type TPlaceholderEntries<S extends string> = TPlaceholderEntriesImpl<TStripOptionalPatterns<S>>;
4
+ type TPlaceholderEntriesImpl<S extends string> = S extends `${string}{${infer Placeholder}}${infer After}` ? [...TPlaceholderEntry<Placeholder>, ...TPlaceholderEntriesImpl<After>] : [];
5
+ type TPlaceholderEntry<P extends string> = P extends `${infer Name}:${infer Domain}` ? [[Name, Domain]] : [[P, undefined]];
6
+ type TPlaceholderValueType<Name extends string, Domain extends string | undefined> = Domain extends 'statement' ? string | TActionExecutor<string> : Name extends 'statement' ? string | TActionExecutor<string> : string;
7
+ type TPlaceholderDomain<Entries extends ReadonlyArray<[string, string | undefined]>, Name extends string> = Extract<Entries[number], [Name, string | undefined]> extends [Name, infer Domain] ? Domain extends string | undefined ? Domain : undefined : undefined;
8
+ type TArgsInputFromEntries<Entries extends ReadonlyArray<[string, string | undefined]>> = {
9
+ [K in Entries[number][0]]: TPlaceholderValueType<K, TPlaceholderDomain<Entries, K>>;
10
+ };
11
+ type TArgsResolvedFromEntries<Entries extends ReadonlyArray<[string, string | undefined]>> = {
12
+ [K in Entries[number][0]]: string;
13
+ };
14
+ type TActionArgsInput<S extends string> = TArgsInputFromEntries<TPlaceholderEntries<S>>;
15
+ type TActionArgsResolved<S extends string> = TArgsResolvedFromEntries<TPlaceholderEntries<S>>;
16
+ export type TActionExecutor<S extends string> = () => {
17
+ actionName: string;
18
+ args: TActionArgsResolved<S>;
19
+ gwta: string;
20
+ };
21
+ export type TCurriedAction<S extends string> = (args: TActionArgsInput<S>) => TActionExecutor<S>;
22
+ export type TKirejiStep = string | TActionExecutor<string>;
23
+ export type TKirejiExport = {
24
+ [featureName: string]: TKirejiStep[];
25
+ };
26
+ type TActionsFromStepper<S extends TStepperSteps> = {
27
+ [K in keyof S]: S[K] extends {
28
+ gwta: infer G;
29
+ } ? G extends string ? TCurriedAction<G> : never : never;
30
+ };
31
+ type TStepMap<T extends AStepper> = T extends {
32
+ typedSteps: infer U;
33
+ } ? U extends TStepperSteps ? U : T['steps'] : T['steps'];
34
+ export declare const withAction: <T extends AStepper>(stepper: T) => TActionsFromStepper<TStepMap<T>>;
35
+ export {};
36
+ //# sourceMappingURL=withAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAction.d.ts","sourceRoot":"","sources":["../../src/kireji/withAction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { namedInterpolation } from '../lib/namedVars.js';
2
+ const isStepWithGwta = (step) => {
3
+ return typeof step.gwta === 'string';
4
+ };
5
+ const interpolateGwta = (gwta, args) => {
6
+ let interpolated = gwta;
7
+ // First, remove optional regex patterns like '( empty)?' from the gwta
8
+ // These are used for matching but shouldn't appear in the final output
9
+ interpolated = interpolated.replace(/\([^)]*\)\?/g, '');
10
+ for (const key in args) {
11
+ const placeholder = `{${key}}`;
12
+ const placeholderWithDomain = new RegExp(`\\{${key}:[^}]+\\}`, 'g');
13
+ interpolated = interpolated.replace(placeholderWithDomain, args[key]);
14
+ interpolated = interpolated.replace(placeholder, args[key]);
15
+ }
16
+ return interpolated;
17
+ };
18
+ const resolveArgValue = (value) => {
19
+ if (value === null) {
20
+ return 'null';
21
+ }
22
+ if (typeof value === 'function') {
23
+ const executed = value();
24
+ return executed.gwta;
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map(resolveArgValue).join(' ');
28
+ }
29
+ if (typeof value === 'object') {
30
+ const entries = Object.entries(value).map(([key, nested]) => `${key}: ${resolveArgValue(nested)}`);
31
+ return `{ ${entries.join(', ')} }`;
32
+ }
33
+ // Escape newlines in string values for BDD format
34
+ return String(value).replace(/\n/g, '\\n');
35
+ };
36
+ export const withAction = (stepper) => {
37
+ const actions = {};
38
+ for (const actionName in stepper.steps) {
39
+ const step = stepper.steps[actionName];
40
+ if (isStepWithGwta(step)) {
41
+ // Strip optional patterns before extracting placeholders to match type-level behavior
42
+ const strippedGwta = step.gwta.replace(/\([^)]*\)\?/g, '');
43
+ const { stepValuesMap } = namedInterpolation(strippedGwta);
44
+ const argNames = stepValuesMap ? Object.keys(stepValuesMap) : [];
45
+ actions[actionName] = (args) => {
46
+ // Re-introducing runtime validation for missing arguments.
47
+ for (const name of argNames) {
48
+ if (args[name] === undefined) {
49
+ throw new Error(`Missing argument "${name}" for action "${actionName}"`);
50
+ }
51
+ }
52
+ const normalizedArgs = {};
53
+ for (const name of argNames) {
54
+ normalizedArgs[name] = resolveArgValue(args[name]);
55
+ }
56
+ return () => ({
57
+ actionName,
58
+ args: normalizedArgs,
59
+ gwta: interpolateGwta(step.gwta, normalizedArgs),
60
+ });
61
+ };
62
+ }
63
+ }
64
+ return actions;
65
+ };
66
+ //# sourceMappingURL=withAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAction.js","sourceRoot":"","sources":["../../src/kireji/withAction.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export declare const LOGGER_NOTHING: {
9
9
  };
10
10
  export declare const LOGGER_LEVELS: {
11
11
  debug: number;
12
+ trace: number;
12
13
  log: number;
13
14
  info: number;
14
15
  warn: number;
@@ -32,6 +33,7 @@ export default class Logger implements ILogger, ILogOutput {
32
33
  static shouldLogLevel(level: number, name: TLogLevel): boolean;
33
34
  out(level: TLogLevel, args: TLogArgs, messageContext?: TMessageContext): void;
34
35
  debug: (args: TLogArgs, mctx?: TMessageContext) => void;
36
+ trace: (args: TLogArgs, mctx?: TMessageContext) => void;
35
37
  log: (args: TLogArgs, mctx?: TMessageContext) => void;
36
38
  info: (args: TLogArgs, mctx?: TMessageContext) => void;
37
39
  warn: (args: TLogArgs, mctx?: TMessageContext) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/lib/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIjJ,eAAO,MAAM,UAAU;;CAAmB,CAAC;AAC3C,eAAO,MAAM,cAAc;;CAAoB,CAAC;AAChD,eAAO,MAAM,aAAa;;;;;;;CAOzB,CAAC;AAEF,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACjD,KAAK,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,MAAO,YAAW,OAAO,EAAE,UAAU;IACzD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAK;IAC9B,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,SAAS,MAAa;gBAEjB,IAAI,EAAE,KAAK;IAYvB,aAAa,CAAC,UAAU,EAAE,UAAU;IAGpC,gBAAgB,CAAC,UAAU,EAAE,UAAU;IAGvC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAGpD,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,eAAe;IAwBtE,KAAK,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAmC;IAClF,GAAG,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAiC;IAC9E,IAAI,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAkC;IAChF,IAAI,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAkC;IAChF,KAAK,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAmC;CAClF;AAGD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,MAAM,CAAC,SAAS,SAAS,EACzE,SAAS,QAAQ,EACjB,MAAM;IAAE,QAAQ,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,CAAA;CAAE,EACpF,QAAO,SAAiB,KACtB,IAOF,CAAA"}
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/lib/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIjJ,eAAO,MAAM,UAAU;;CAAmB,CAAC;AAC3C,eAAO,MAAM,cAAc;;CAAoB,CAAC;AAChD,eAAO,MAAM,aAAa;;;;;;;;CAQzB,CAAC;AAEF,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACjD,KAAK,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,MAAO,YAAW,OAAO,EAAE,UAAU;IACzD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAK;IAC9B,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,SAAS,MAAa;gBAEjB,IAAI,EAAE,KAAK;IAYvB,aAAa,CAAC,UAAU,EAAE,UAAU;IAGpC,gBAAgB,CAAC,UAAU,EAAE,UAAU;IAGvC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAGpD,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,eAAe;IA0BtE,KAAK,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAmC;IAClF,KAAK,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAmC;IAClF,GAAG,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAiC;IAC9E,IAAI,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAkC;IAChF,IAAI,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAkC;IAChF,KAAK,GAAI,MAAM,QAAQ,EAAE,OAAO,eAAe,UAAmC;CAClF;AAGD,eAAO,MAAM,mBAAmB,GAAI,OAAO,MAAM,MAAM,CAAC,SAAS,SAAS,EACzE,SAAS,QAAQ,EACjB,MAAM;IAAE,QAAQ,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAAC,eAAe,CAAC,EAAE,SAAS,CAAA;CAAE,EACpF,QAAO,SAAiB,KACtB,IAOF,CAAA"}
@@ -4,10 +4,11 @@ export const LOGGER_LOG = { level: 'log' };
4
4
  export const LOGGER_NOTHING = { level: 'none' };
5
5
  export const LOGGER_LEVELS = {
6
6
  debug: 1,
7
- log: 2,
8
- info: 3,
9
- warn: 4,
10
- error: 5,
7
+ trace: 2,
8
+ log: 3,
9
+ info: 4,
10
+ warn: 5,
11
+ error: 6,
11
12
  none: 9,
12
13
  };
13
14
  export default class Logger {
@@ -60,9 +61,12 @@ export default class Logger {
60
61
  Logger.lastLevel = level;
61
62
  const tag = messageContext?.tag ? (isFirstTag(messageContext.tag) ? '' : descTag(messageContext.tag)) : '';
62
63
  const [proggy, line /*, col*/] = caller.split(':');
63
- console[level]((showLevel.padStart(6) + ` ${Timer.since() / 1000}:${proggy}:${line}${tag}`).padEnd(30) + ` `, args);
64
+ // Map trace to log for console output (console.trace prints stack traces)
65
+ const consoleLevel = level === 'trace' ? 'log' : level;
66
+ console[consoleLevel]((showLevel.padStart(6) + ` █ ${Timer.since() / 1000}:${proggy}:${line}${tag}`).padEnd(38) + ` | `, args);
64
67
  }
65
68
  debug = (args, mctx) => this.out('debug', args, mctx);
69
+ trace = (args, mctx) => this.out('trace', args, mctx);
66
70
  log = (args, mctx) => this.out('log', args, mctx);
67
71
  info = (args, mctx) => this.out('info', args, mctx);
68
72
  warn = (args, mctx) => this.out('warn', args, mctx);