@bett3r-dev/blueprint-schema 1.7.0 → 1.9.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 (206) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/build/cjs/apply-design.d.ts +1 -1
  3. package/build/cjs/apply-design.d.ts.map +1 -1
  4. package/build/cjs/apply-design.js +18 -5
  5. package/build/cjs/apply-design.js.map +1 -1
  6. package/build/cjs/apply-overrides.d.ts.map +1 -1
  7. package/build/cjs/apply-overrides.js +20 -2
  8. package/build/cjs/apply-overrides.js.map +1 -1
  9. package/build/cjs/card-holds.d.ts +4 -0
  10. package/build/cjs/card-holds.d.ts.map +1 -0
  11. package/build/cjs/card-holds.js +51 -0
  12. package/build/cjs/card-holds.js.map +1 -0
  13. package/build/cjs/channel-link.d.ts +11 -0
  14. package/build/cjs/channel-link.d.ts.map +1 -0
  15. package/build/cjs/channel-link.js +39 -0
  16. package/build/cjs/channel-link.js.map +1 -0
  17. package/build/cjs/coverage-links.d.ts +1 -1
  18. package/build/cjs/coverage-links.d.ts.map +1 -1
  19. package/build/cjs/coverage-links.js +10 -3
  20. package/build/cjs/coverage-links.js.map +1 -1
  21. package/build/cjs/design.d.ts +38 -3
  22. package/build/cjs/design.d.ts.map +1 -1
  23. package/build/cjs/design.js +21 -5
  24. package/build/cjs/design.js.map +1 -1
  25. package/build/cjs/diagnostics.d.ts +12 -0
  26. package/build/cjs/diagnostics.d.ts.map +1 -1
  27. package/build/cjs/diagnostics.js.map +1 -1
  28. package/build/cjs/edge-endpoints.d.ts +33 -0
  29. package/build/cjs/edge-endpoints.d.ts.map +1 -0
  30. package/build/cjs/edge-endpoints.js +83 -0
  31. package/build/cjs/edge-endpoints.js.map +1 -0
  32. package/build/cjs/effective-design.d.ts +21 -0
  33. package/build/cjs/effective-design.d.ts.map +1 -0
  34. package/build/cjs/effective-design.js +177 -0
  35. package/build/cjs/effective-design.js.map +1 -0
  36. package/build/cjs/fork-scenarios.d.ts +3 -1
  37. package/build/cjs/fork-scenarios.d.ts.map +1 -1
  38. package/build/cjs/fork-scenarios.js +20 -5
  39. package/build/cjs/fork-scenarios.js.map +1 -1
  40. package/build/cjs/graph.d.ts +25 -0
  41. package/build/cjs/graph.d.ts.map +1 -1
  42. package/build/cjs/graph.js +36 -0
  43. package/build/cjs/graph.js.map +1 -1
  44. package/build/cjs/index.d.ts +10 -0
  45. package/build/cjs/index.d.ts.map +1 -1
  46. package/build/cjs/index.js +10 -0
  47. package/build/cjs/index.js.map +1 -1
  48. package/build/cjs/map-review-view.d.ts +29 -0
  49. package/build/cjs/map-review-view.d.ts.map +1 -0
  50. package/build/cjs/map-review-view.js +64 -0
  51. package/build/cjs/map-review-view.js.map +1 -0
  52. package/build/cjs/map-structure.d.ts +26 -2
  53. package/build/cjs/map-structure.d.ts.map +1 -1
  54. package/build/cjs/map-structure.js.map +1 -1
  55. package/build/cjs/map-vocabulary.d.ts +8 -1
  56. package/build/cjs/map-vocabulary.d.ts.map +1 -1
  57. package/build/cjs/map-vocabulary.js +15 -2
  58. package/build/cjs/map-vocabulary.js.map +1 -1
  59. package/build/cjs/nodes.d.ts +2 -0
  60. package/build/cjs/nodes.d.ts.map +1 -1
  61. package/build/cjs/overrides.d.ts +21 -0
  62. package/build/cjs/overrides.d.ts.map +1 -1
  63. package/build/cjs/overrides.js +53 -1
  64. package/build/cjs/overrides.js.map +1 -1
  65. package/build/cjs/reachability.js +1 -1
  66. package/build/cjs/reachability.js.map +1 -1
  67. package/build/cjs/reality-check.d.ts +1 -1
  68. package/build/cjs/reality-check.d.ts.map +1 -1
  69. package/build/cjs/reality-check.js +46 -9
  70. package/build/cjs/reality-check.js.map +1 -1
  71. package/build/cjs/scenario-test-level.d.ts +25 -0
  72. package/build/cjs/scenario-test-level.d.ts.map +1 -0
  73. package/build/cjs/scenario-test-level.js +43 -0
  74. package/build/cjs/scenario-test-level.js.map +1 -0
  75. package/build/cjs/session-phase.d.ts +80 -0
  76. package/build/cjs/session-phase.d.ts.map +1 -0
  77. package/build/cjs/session-phase.js +97 -0
  78. package/build/cjs/session-phase.js.map +1 -0
  79. package/build/cjs/session.d.ts +21 -2
  80. package/build/cjs/session.d.ts.map +1 -1
  81. package/build/cjs/session.js +3 -2
  82. package/build/cjs/session.js.map +1 -1
  83. package/build/cjs/spec.d.ts +3 -0
  84. package/build/cjs/spec.d.ts.map +1 -1
  85. package/build/cjs/spec.js +85 -17
  86. package/build/cjs/spec.js.map +1 -1
  87. package/build/cjs/step-elements.d.ts +27 -0
  88. package/build/cjs/step-elements.d.ts.map +1 -0
  89. package/build/cjs/step-elements.js +28 -0
  90. package/build/cjs/step-elements.js.map +1 -0
  91. package/build/cjs/tags.d.ts +26 -0
  92. package/build/cjs/tags.d.ts.map +1 -0
  93. package/build/cjs/tags.js +28 -0
  94. package/build/cjs/tags.js.map +1 -0
  95. package/build/cjs/unproduced-events.d.ts +10 -0
  96. package/build/cjs/unproduced-events.d.ts.map +1 -0
  97. package/build/cjs/unproduced-events.js +37 -0
  98. package/build/cjs/unproduced-events.js.map +1 -0
  99. package/build/cjs/validate-design.d.ts +1 -1
  100. package/build/cjs/validate-design.d.ts.map +1 -1
  101. package/build/cjs/validate-design.js +74 -4
  102. package/build/cjs/validate-design.js.map +1 -1
  103. package/build/esm/apply-design.d.ts +1 -1
  104. package/build/esm/apply-design.d.ts.map +1 -1
  105. package/build/esm/apply-design.js +18 -5
  106. package/build/esm/apply-design.js.map +1 -1
  107. package/build/esm/apply-overrides.d.ts.map +1 -1
  108. package/build/esm/apply-overrides.js +20 -2
  109. package/build/esm/apply-overrides.js.map +1 -1
  110. package/build/esm/card-holds.d.ts +4 -0
  111. package/build/esm/card-holds.d.ts.map +1 -0
  112. package/build/esm/card-holds.js +48 -0
  113. package/build/esm/card-holds.js.map +1 -0
  114. package/build/esm/channel-link.d.ts +11 -0
  115. package/build/esm/channel-link.d.ts.map +1 -0
  116. package/build/esm/channel-link.js +34 -0
  117. package/build/esm/channel-link.js.map +1 -0
  118. package/build/esm/coverage-links.d.ts +1 -1
  119. package/build/esm/coverage-links.d.ts.map +1 -1
  120. package/build/esm/coverage-links.js +10 -3
  121. package/build/esm/coverage-links.js.map +1 -1
  122. package/build/esm/design.d.ts +38 -3
  123. package/build/esm/design.d.ts.map +1 -1
  124. package/build/esm/design.js +18 -4
  125. package/build/esm/design.js.map +1 -1
  126. package/build/esm/diagnostics.d.ts +12 -0
  127. package/build/esm/diagnostics.d.ts.map +1 -1
  128. package/build/esm/diagnostics.js.map +1 -1
  129. package/build/esm/edge-endpoints.d.ts +33 -0
  130. package/build/esm/edge-endpoints.d.ts.map +1 -0
  131. package/build/esm/edge-endpoints.js +77 -0
  132. package/build/esm/edge-endpoints.js.map +1 -0
  133. package/build/esm/effective-design.d.ts +21 -0
  134. package/build/esm/effective-design.d.ts.map +1 -0
  135. package/build/esm/effective-design.js +174 -0
  136. package/build/esm/effective-design.js.map +1 -0
  137. package/build/esm/fork-scenarios.d.ts +3 -1
  138. package/build/esm/fork-scenarios.d.ts.map +1 -1
  139. package/build/esm/fork-scenarios.js +20 -5
  140. package/build/esm/fork-scenarios.js.map +1 -1
  141. package/build/esm/graph.d.ts +25 -0
  142. package/build/esm/graph.d.ts.map +1 -1
  143. package/build/esm/graph.js +33 -0
  144. package/build/esm/graph.js.map +1 -1
  145. package/build/esm/index.d.ts +10 -0
  146. package/build/esm/index.d.ts.map +1 -1
  147. package/build/esm/index.js +10 -0
  148. package/build/esm/index.js.map +1 -1
  149. package/build/esm/map-review-view.d.ts +29 -0
  150. package/build/esm/map-review-view.d.ts.map +1 -0
  151. package/build/esm/map-review-view.js +58 -0
  152. package/build/esm/map-review-view.js.map +1 -0
  153. package/build/esm/map-structure.d.ts +26 -2
  154. package/build/esm/map-structure.d.ts.map +1 -1
  155. package/build/esm/map-structure.js.map +1 -1
  156. package/build/esm/map-vocabulary.d.ts +8 -1
  157. package/build/esm/map-vocabulary.d.ts.map +1 -1
  158. package/build/esm/map-vocabulary.js +13 -1
  159. package/build/esm/map-vocabulary.js.map +1 -1
  160. package/build/esm/nodes.d.ts +2 -0
  161. package/build/esm/nodes.d.ts.map +1 -1
  162. package/build/esm/overrides.d.ts +21 -0
  163. package/build/esm/overrides.d.ts.map +1 -1
  164. package/build/esm/overrides.js +51 -1
  165. package/build/esm/overrides.js.map +1 -1
  166. package/build/esm/reachability.js +1 -1
  167. package/build/esm/reachability.js.map +1 -1
  168. package/build/esm/reality-check.d.ts +1 -1
  169. package/build/esm/reality-check.d.ts.map +1 -1
  170. package/build/esm/reality-check.js +47 -10
  171. package/build/esm/reality-check.js.map +1 -1
  172. package/build/esm/scenario-test-level.d.ts +25 -0
  173. package/build/esm/scenario-test-level.d.ts.map +1 -0
  174. package/build/esm/scenario-test-level.js +37 -0
  175. package/build/esm/scenario-test-level.js.map +1 -0
  176. package/build/esm/session-phase.d.ts +80 -0
  177. package/build/esm/session-phase.d.ts.map +1 -0
  178. package/build/esm/session-phase.js +93 -0
  179. package/build/esm/session-phase.js.map +1 -0
  180. package/build/esm/session.d.ts +21 -2
  181. package/build/esm/session.d.ts.map +1 -1
  182. package/build/esm/session.js +3 -2
  183. package/build/esm/session.js.map +1 -1
  184. package/build/esm/spec.d.ts +3 -0
  185. package/build/esm/spec.d.ts.map +1 -1
  186. package/build/esm/spec.js +88 -20
  187. package/build/esm/spec.js.map +1 -1
  188. package/build/esm/step-elements.d.ts +27 -0
  189. package/build/esm/step-elements.d.ts.map +1 -0
  190. package/build/esm/step-elements.js +21 -0
  191. package/build/esm/step-elements.js.map +1 -0
  192. package/build/esm/tags.d.ts +26 -0
  193. package/build/esm/tags.d.ts.map +1 -0
  194. package/build/esm/tags.js +21 -0
  195. package/build/esm/tags.js.map +1 -0
  196. package/build/esm/unproduced-events.d.ts +10 -0
  197. package/build/esm/unproduced-events.d.ts.map +1 -0
  198. package/build/esm/unproduced-events.js +32 -0
  199. package/build/esm/unproduced-events.js.map +1 -0
  200. package/build/esm/validate-design.d.ts +1 -1
  201. package/build/esm/validate-design.d.ts.map +1 -1
  202. package/build/esm/validate-design.js +74 -4
  203. package/build/esm/validate-design.js.map +1 -1
  204. package/build/tsconfig.tsbuildinfo +1 -1
  205. package/package.json +1 -1
  206. package/schema/map.schema.json +9 -1
@@ -1 +1 @@
1
- {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAEpC,eAAO,MAAM,yBAAyB,gBAAgB,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6GAA6G;IAC7G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG;IAC7C,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,ySAAyS;IACzS,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,SAAS,CAAE,MAAM,oBAAoB,CAAE,EASlE,CAAC;AAEX;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACpC,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,gBAAgB,GAAK,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,KAAI,OACzB,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,UAAU,CAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAI,MAAM,GAAG,SAAS,CAIpG;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,CAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CACjE,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC;IACf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C,eAAO,MAAM,iBAAiB,EAAE,SAAS,eAAe,EAAoB,CAAC;AAE7E,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,cAAc,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAK,OAAO;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAAI,OAK3G,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,WAAW,SAAS,SAAS,EAAE,KAC9B,MAAM,EAQR,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,eAAe,CAAE,MAAM,EAAE,OAAO,GAAI,MAAM,IAAI,OAAO,CAIpE;AAED,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,OAAO,GAAI,MAAM,IAAI,YAAY,CAI3E;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,aAAa,GAAI,MAAM,CAKhE;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;KACxB,CAAC;IACF,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG;IACrC,aAAa,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,wBAAgB,WAAW,IAAI,UAAU,CAExC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveMentions = exports.commentSummonsAgent = exports.BLUEPRINT_AGENT_HANDLE = exports.COMMENT_REACTIONS = exports.MAP_GENERAL_ANCHOR = exports.MODIFIABLE_NODE_FIELDS = exports.BLUEPRINT_DESIGN_FILENAME = void 0;
3
+ exports.resolveMentions = exports.commentSummonsAgent = exports.BLUEPRINT_AGENT_HANDLE = exports.COMMENT_REACTIONS = exports.MAP_GENERAL_ANCHOR = exports.isNoteOnlyModify = exports.MODIFIABLE_NODE_FIELDS = exports.BLUEPRINT_DESIGN_FILENAME = void 0;
4
+ exports.joinedNote = joinedNote;
4
5
  exports.isEdgeRefAnchor = isEdgeRefAnchor;
5
6
  exports.isCommentIdAnchor = isCommentIdAnchor;
6
7
  exports.commentAnchorKey = commentAnchorKey;
@@ -13,12 +14,27 @@ exports.MODIFIABLE_NODE_FIELDS = [
13
14
  'queries',
14
15
  'rule',
15
16
  'errorCodes',
16
- 'generic'
17
+ 'generic',
18
+ 'tags'
17
19
  ];
20
+ /** Whether a modify changes none of the fields, so it only declares the change its note describes. */
21
+ const isNoteOnlyModify = (entry) => Object.keys(entry.set ?? {}).length === 0;
22
+ exports.isNoteOnlyModify = isNoteOnlyModify;
18
23
  /**
19
- * The impact map's own general channel. `null` stays the eventstorming board's (and every pre-split
20
- * board-wide comment's) general channel; a board-wide remark made on the map is anchored here instead,
21
- * so a reader knows which board it was made on. `#` appears in no artifact name and no map entry id.
24
+ * The note an element carries once a further entry's note lands on it: both, one line each, so a second modify of
25
+ * the same element never loses the first's description; a note it already carries is not repeated.
26
+ */
27
+ function joinedNote(prior, next) {
28
+ if (next === undefined || next.trim() === '')
29
+ return prior;
30
+ if (prior === undefined || prior.trim() === '')
31
+ return next;
32
+ return prior.split('\n').includes(next) ? prior : `${prior}\n${next}`;
33
+ }
34
+ /**
35
+ * A legacy anchor: board-wide remarks made on the impact map were once anchored here. Both boards' #general
36
+ * shows comments under this anchor alongside those anchored `null`, and a new post there anchors `null`.
37
+ * `#` appears in no artifact name and no map entry id.
22
38
  */
23
39
  exports.MAP_GENERAL_ANCHOR = '#map';
24
40
  exports.COMMENT_REACTIONS = ['thumbs-up'];
@@ -1 +1 @@
1
- {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../../src/design.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,17 @@ export type OpaqueAccessSite = {
44
44
  file: string;
45
45
  line: number;
46
46
  };
47
+ /**
48
+ * A `RecorderBuilder( events, options )` call whose options the extractor
49
+ * could not read as an object literal, so it cannot tell whether the system
50
+ * is keyed and emits no `keyed` tag for it.
51
+ */
52
+ export type OpaqueRecorderOptions = {
53
+ systemId: string;
54
+ expression: string;
55
+ file: string;
56
+ line: number;
57
+ };
47
58
  export type HandlerScopeIssue = 'unresolved' | 'wrong-type' | 'unconnected';
48
59
  export type TopologyViolation = {
49
60
  from: string;
@@ -69,6 +80,7 @@ export type Diagnostics = {
69
80
  topologyViolations: TopologyViolation[];
70
81
  staleOverrides: StaleOverride[];
71
82
  opaqueAccessSites: OpaqueAccessSite[];
83
+ opaqueRecorderOptions?: OpaqueRecorderOptions[];
72
84
  };
73
85
  export declare function emptyDiagnostics(): Diagnostics;
74
86
  //# sourceMappingURL=diagnostics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,uBAAuB,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EACJ,UAAU,GACV,kBAAkB,GAClB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,0BAA0B,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,2BAA2B,EAAE,0BAA0B,EAAE,CAAC;IAC1D,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;CACvC,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,WAAW,CAW9C"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":";;AAuFA,4CAWC;AAXD,SAAgB,gBAAgB;IAC9B,OAAO;QACL,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE,EAAE;QAClB,2BAA2B,EAAE,EAAE;QAC/B,WAAW,EAAE,EAAE;QACf,kBAAkB,EAAE,EAAE;QACtB,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,EAAE;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":";;AAoGA,4CAWC;AAXD,SAAgB,gBAAgB;IAC9B,OAAO;QACL,eAAe,EAAE,EAAE;QACnB,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE,EAAE;QAClB,2BAA2B,EAAE,EAAE;QAC/B,WAAW,EAAE,EAAE;QACf,kBAAkB,EAAE,EAAE;QACtB,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,EAAE;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ /** The id a `<subdomain>:<type>:<slug>` reference names, when it is one of `known`; otherwise undefined. */
2
+ export declare function canonicalEndpoint(endpoint: string, known: ReadonlySet<string>): string | undefined;
3
+ type EndpointField = 'from' | 'to' | 'handlers';
4
+ /** An endpoint that names no node: which edge, which field, and the proposed ids closest to it. */
5
+ export type UnresolvedEndpoint = {
6
+ edge: number;
7
+ field: EndpointField;
8
+ endpoint: string;
9
+ closest: string[];
10
+ };
11
+ /** Up to `count` of `ids`, nearest `endpoint` first. */
12
+ export declare function closestIds(endpoint: string, ids: Iterable<string>, count?: number): string[];
13
+ /**
14
+ * Judges each edge's endpoints (from, to and handlers) at the door. An endpoint stands when it is a proposed id or a
15
+ * node of `graph`; a reference to one is rewritten to its id. With no graph, an endpoint shaped as a node id stands as a
16
+ * reference to code, as before. Anything else is unresolved, with the proposed ids closest to it. A non-string endpoint
17
+ * is left to the design's own validation.
18
+ */
19
+ export declare function resolveEdgeEndpoints<Edge extends {
20
+ from?: unknown;
21
+ to?: unknown;
22
+ handlers?: unknown;
23
+ }>(edges: readonly Edge[], { proposed, graph }: {
24
+ proposed: ReadonlySet<string>;
25
+ graph?: ReadonlySet<string>;
26
+ }): {
27
+ edges: Edge[];
28
+ unresolved: UnresolvedEndpoint[];
29
+ };
30
+ /** The refusal message for unresolved endpoints, naming each and the proposed ids closest to it. */
31
+ export declare function unresolvedEndpointsMessage(unresolved: readonly UnresolvedEndpoint[]): string;
32
+ export {};
33
+ //# sourceMappingURL=edge-endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-endpoints.d.ts","sourceRoot":"","sources":["../../src/edge-endpoints.ts"],"names":[],"mappings":"AAYA,4GAA4G;AAC5G,wBAAgB,iBAAiB,CAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAI,MAAM,GAAG,SAAS,CAQpG;AAED,KAAK,aAAa,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC;AAEhD,mGAAmG;AACnG,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAa7G,wDAAwD;AACxD,wBAAgB,UAAU,CAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,SAAI,GAAI,MAAM,EAAE,CAOzF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,SAAS;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACpG,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAClF;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,UAAU,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAoBrD;AAED,oGAAoG;AACpG,wBAAgB,0BAA0B,CAAE,UAAU,EAAE,SAAS,kBAAkB,EAAE,GAAI,MAAM,CAM9F"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canonicalEndpoint = canonicalEndpoint;
4
+ exports.closestIds = closestIds;
5
+ exports.resolveEdgeEndpoints = resolveEdgeEndpoints;
6
+ exports.unresolvedEndpointsMessage = unresolvedEndpointsMessage;
7
+ const graph_js_1 = require("./graph.js");
8
+ const nodes_js_1 = require("./nodes.js");
9
+ /**
10
+ * Edge endpoints are node ids (`<subdomain>_<abbrev>_<slug>`, as `proposedNodeId` derives them). A design agent can
11
+ * instead write a reference, `<subdomain>:<type>:<slug>`, which names the same node but matches no id, so the edge
12
+ * dangles. These resolve such a reference to the id it names, and judge an endpoint at the door.
13
+ */
14
+ const typeOf = (segment) => nodes_js_1.NODE_TYPES.includes(segment) ? segment : nodes_js_1.NODE_TYPE_BY_ABBREV[segment];
15
+ /** The id a `<subdomain>:<type>:<slug>` reference names, when it is one of `known`; otherwise undefined. */
16
+ function canonicalEndpoint(endpoint, known) {
17
+ const segments = endpoint.split(':');
18
+ if (segments.length !== 3)
19
+ return undefined;
20
+ const [subdomain, segment, slug] = segments;
21
+ const type = typeOf(segment.trim().toLowerCase());
22
+ if (type === undefined || subdomain.trim() === '' || slug.trim() === '')
23
+ return undefined;
24
+ const id = (0, graph_js_1.nodeId)(subdomain, type, slug);
25
+ return known.has(id) ? id : undefined;
26
+ }
27
+ const distance = (a, b) => {
28
+ let previous = Array.from({ length: b.length + 1 }, (_value, index) => index);
29
+ for (let i = 1; i <= a.length; i++) {
30
+ const row = [i];
31
+ for (let j = 1; j <= b.length; j++)
32
+ row[j] = Math.min(previous[j] + 1, row[j - 1] + 1, previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
33
+ previous = row;
34
+ }
35
+ return previous[b.length];
36
+ };
37
+ /** Up to `count` of `ids`, nearest `endpoint` first. */
38
+ function closestIds(endpoint, ids, count = 3) {
39
+ const probe = endpoint.toLowerCase().replace(/:/g, '_');
40
+ return [...ids]
41
+ .map(id => ({ id, at: distance(probe, id) }))
42
+ .sort((a, b) => a.at - b.at || a.id.localeCompare(b.id))
43
+ .slice(0, count)
44
+ .map(entry => entry.id);
45
+ }
46
+ /**
47
+ * Judges each edge's endpoints (from, to and handlers) at the door. An endpoint stands when it is a proposed id or a
48
+ * node of `graph`; a reference to one is rewritten to its id. With no graph, an endpoint shaped as a node id stands as a
49
+ * reference to code, as before. Anything else is unresolved, with the proposed ids closest to it. A non-string endpoint
50
+ * is left to the design's own validation.
51
+ */
52
+ function resolveEdgeEndpoints(edges, { proposed, graph }) {
53
+ const known = graph === undefined ? proposed : new Set([...proposed, ...graph]);
54
+ const unresolved = [];
55
+ const resolved = edges.map((edge, index) => {
56
+ const judge = (endpoint, field) => {
57
+ if (typeof endpoint !== 'string' || known.has(endpoint))
58
+ return endpoint;
59
+ const id = canonicalEndpoint(endpoint, known);
60
+ if (id !== undefined)
61
+ return id;
62
+ if (graph === undefined && (0, graph_js_1.parseNodeId)(endpoint) !== undefined)
63
+ return endpoint;
64
+ unresolved.push({ edge: index, field, endpoint, closest: closestIds(endpoint, proposed) });
65
+ return endpoint;
66
+ };
67
+ return {
68
+ ...edge,
69
+ ...('from' in edge ? { from: judge(edge.from, 'from') } : {}),
70
+ ...('to' in edge ? { to: judge(edge.to, 'to') } : {}),
71
+ ...(Array.isArray(edge.handlers) ? { handlers: edge.handlers.map(handler => judge(handler, 'handlers')) } : {})
72
+ };
73
+ });
74
+ return { edges: resolved, unresolved };
75
+ }
76
+ /** The refusal message for unresolved endpoints, naming each and the proposed ids closest to it. */
77
+ function unresolvedEndpointsMessage(unresolved) {
78
+ const each = unresolved.map(({ edge, field, endpoint, closest }) => `edges[${edge}].${field} ${JSON.stringify(endpoint)}`
79
+ + (closest.length > 0 ? ` (closest proposed: ${closest.join(', ')})` : ''));
80
+ return `refusing the whole propose batch: ${each.join('; ')} names no node. An edge endpoint is a node id, `
81
+ + '`<subdomain>_<abbrev>_<slug>` as the propose call returns it in nodeIds, of a node this design proposes or of the code graph.';
82
+ }
83
+ //# sourceMappingURL=edge-endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-endpoints.js","sourceRoot":"","sources":["../../src/edge-endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { DesignFile } from './design.js';
2
+ import type { MapFile } from './map-structure.js';
3
+ /**
4
+ * The effective design: the design as its consumers read it, with every modify and removal that targets one of the
5
+ * design's own proposals folded into the proposals. A modify of a proposed node edits the proposal, and when it sets the
6
+ * label or subdomain the proposal's derived id moves with it, so every edge, handler scope, comment anchor and map
7
+ * reference to the old id follows. A removal of a proposed node or edge drops it, with every proposed edge touching a
8
+ * dropped node. An edge endpoint written as a `<subdomain>:<type>:<slug>` reference to a proposal is read as that
9
+ * proposal's id; an endpoint naming nothing stays as it is. Modifies and removals of code (graph) elements stay as they are. The session's op history is never
10
+ * folded: this is an export, for the bundle's design.json and map.json and for blueprint.md.
11
+ */
12
+ export type EffectiveDesign = {
13
+ design: DesignFile;
14
+ map: MapFile;
15
+ /** Each proposed node id a modify moved, to the id it ends at. */
16
+ renamed: ReadonlyMap<string, string>;
17
+ /** Each proposed node id a removal dropped, as it read when dropped. */
18
+ dropped: ReadonlySet<string>;
19
+ };
20
+ export declare function effectiveDesignOf(design: DesignFile, map: MapFile): EffectiveDesign;
21
+ //# sourceMappingURL=effective-design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-design.d.ts","sourceRoot":"","sources":["../../src/effective-design.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,UAAU,EAMX,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAgB,OAAO,EAAkB,MAAM,oBAAoB,CAAC;AAEhF;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,wEAAwE;IACxE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC9B,CAAC;AA0DF,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAI,eAAe,CAqGrF"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.effectiveDesignOf = effectiveDesignOf;
4
+ const design_js_1 = require("./design.js");
5
+ const apply_design_js_1 = require("./apply-design.js");
6
+ const edge_endpoints_js_1 = require("./edge-endpoints.js");
7
+ const edgeKey = (edge) => `${edge.from}|${edge.to}|${edge.kind}`;
8
+ // A modify's note folds in beside the proposal's own, so a note-only modify of a proposal is never lost.
9
+ function withSet(node, set, note) {
10
+ const next = { ...node };
11
+ const joined = (0, design_js_1.joinedNote)(node.note, note);
12
+ if (joined !== undefined)
13
+ next.note = joined;
14
+ if (set.label !== undefined)
15
+ next.label = set.label;
16
+ if (set.subdomain !== undefined)
17
+ next.subdomain = set.subdomain;
18
+ if (set.resourceKey !== undefined)
19
+ next.resourceKey = set.resourceKey;
20
+ if (set.queries !== undefined)
21
+ next.queries = set.queries;
22
+ if (set.rule !== undefined)
23
+ next.rule = set.rule;
24
+ if (set.errorCodes !== undefined)
25
+ next.errorCodes = [...set.errorCodes];
26
+ if (set.generic !== undefined)
27
+ next.generic = set.generic;
28
+ // BP-279: a modify sets the whole tag list, and [] clears it.
29
+ if (set.tags !== undefined && set.tags.length > 0)
30
+ next.tags = [...set.tags];
31
+ else if (set.tags !== undefined)
32
+ delete next.tags;
33
+ return next;
34
+ }
35
+ function anchorOf(anchor, idOf) {
36
+ if (anchor === null || anchor === undefined || (0, design_js_1.isCommentIdAnchor)(anchor))
37
+ return anchor;
38
+ if (typeof anchor === 'string')
39
+ return idOf(anchor);
40
+ return { ...anchor, from: idOf(anchor.from), to: idOf(anchor.to) };
41
+ }
42
+ function kpiOf(kpi, idOf) {
43
+ if (kpi.mode !== 'define' || kpi.definition.source.kind !== 'events')
44
+ return kpi;
45
+ const side = (events) => ({
46
+ ...events, esIds: events.esIds.flatMap(id => idOf(id) ?? [])
47
+ });
48
+ const { numerator, denominator } = kpi.definition.source;
49
+ return {
50
+ ...kpi,
51
+ definition: {
52
+ ...kpi.definition,
53
+ source: { ...kpi.definition.source, numerator: side(numerator), ...(denominator === undefined ? {} : { denominator: side(denominator) }) }
54
+ }
55
+ };
56
+ }
57
+ /** The map with each element id rewritten by `idOf`, and each reference to an element `idOf` drops (undefined) left out. */
58
+ function mapOf(map, idOf) {
59
+ const linked = (entries) => entries.flatMap(entry => {
60
+ const esId = idOf(entry.esId);
61
+ return esId === undefined ? [] : [{ ...entry, esId }];
62
+ });
63
+ return {
64
+ ...map,
65
+ links: linked(map.links),
66
+ coverage: linked(map.coverage),
67
+ observations: map.observations.map(observation => ({ ...observation, kpi: kpiOf(observation.kpi, idOf) })),
68
+ ...(map.review === undefined ? {} : { review: linked(map.review) })
69
+ };
70
+ }
71
+ function effectiveDesignOf(design, map) {
72
+ const nodes = (design.propose?.nodes ?? []).map(node => ({ ...node }));
73
+ // Each live proposal's current id, to its index in `nodes`; the first proposal of an id is the one applyDesign keeps.
74
+ const live = new Map();
75
+ nodes.forEach((node, index) => {
76
+ const id = (0, apply_design_js_1.proposedNodeId)(node);
77
+ if (!live.has(id))
78
+ live.set(id, index);
79
+ });
80
+ const proposedIds = new Set(live.keys());
81
+ const renamed = new Map();
82
+ const resolve = (id) => renamed.get(id) ?? id;
83
+ // An endpoint is resolved from the id it names as written, so a reference first becomes the id it was proposed as.
84
+ const endpoint = (id) => resolve((0, edge_endpoints_js_1.canonicalEndpoint)(id, proposedIds) ?? id);
85
+ const modify = [];
86
+ for (const entry of design.modify ?? []) {
87
+ const id = resolve(entry.id);
88
+ const index = live.get(id);
89
+ if (index === undefined) {
90
+ modify.push(entry);
91
+ continue;
92
+ }
93
+ nodes[index] = withSet(nodes[index], entry.set ?? {}, entry.note);
94
+ const next = (0, apply_design_js_1.proposedNodeId)(nodes[index]);
95
+ if (next === id)
96
+ continue;
97
+ live.delete(id);
98
+ if (!live.has(next))
99
+ live.set(next, index);
100
+ for (const [from, to] of renamed)
101
+ if (to === id)
102
+ renamed.set(from, next);
103
+ renamed.set(id, next);
104
+ }
105
+ const droppedNodes = new Set();
106
+ const dropped = new Set();
107
+ const writtenEdges = design.propose?.edges ?? [];
108
+ const proposedEdges = writtenEdges.map(edge => ({
109
+ ...edge,
110
+ from: endpoint(edge.from),
111
+ to: endpoint(edge.to),
112
+ ...(edge.handlers === undefined ? {} : { handlers: edge.handlers.map(endpoint) })
113
+ }));
114
+ // A removal drops the proposals it names as written; only when none is written so does it drop by the resolved
115
+ // endpoints. So removing a reference-form edge never also drops its correctly written twin.
116
+ const writtenKeys = writtenEdges.map(edge => edgeKey({ from: resolve(edge.from), to: resolve(edge.to), kind: edge.kind }));
117
+ const resolvedKeys = proposedEdges.map(edgeKey);
118
+ const droppedEdges = new Set();
119
+ const remove = [];
120
+ for (const entry of design.remove ?? []) {
121
+ if (entry.kind === 'node') {
122
+ const id = resolve(entry.id);
123
+ const index = live.get(id);
124
+ if (index === undefined) {
125
+ remove.push(entry);
126
+ continue;
127
+ }
128
+ live.delete(id);
129
+ droppedNodes.add(index);
130
+ dropped.add(id);
131
+ continue;
132
+ }
133
+ const written = edgeKey({ from: resolve(entry.from), to: resolve(entry.to), kind: entry.edgeKind });
134
+ const resolved = edgeKey({ from: endpoint(entry.from), to: endpoint(entry.to), kind: entry.edgeKind });
135
+ const asWritten = writtenKeys.flatMap((key, index) => key === written ? [index] : []);
136
+ const matched = asWritten.length > 0 ? asWritten : resolvedKeys.flatMap((key, index) => key === resolved ? [index] : []);
137
+ if (matched.length > 0)
138
+ matched.forEach(index => droppedEdges.add(index));
139
+ else
140
+ remove.push(entry);
141
+ }
142
+ const kept = new Set();
143
+ const edges = proposedEdges.flatMap((edge, index) => {
144
+ const key = edgeKey(edge);
145
+ if (droppedEdges.has(index) || dropped.has(edge.from) || dropped.has(edge.to) || kept.has(key))
146
+ return [];
147
+ kept.add(key);
148
+ if (edge.handlers === undefined)
149
+ return [edge];
150
+ const { handlers, ...artifactWide } = edge;
151
+ const scoped = handlers.filter(handler => !dropped.has(handler));
152
+ return [scoped.length > 0 ? { ...artifactWide, handlers: scoped } : artifactWide];
153
+ });
154
+ const proposedNodes = nodes.filter((_node, index) => !droppedNodes.has(index));
155
+ const comments = design.comments?.map(comment => ({ ...comment, anchor: anchorOf(comment.anchor, resolve) }));
156
+ const folds = {
157
+ propose: {
158
+ ...(design.propose?.nodes === undefined ? {} : { nodes: proposedNodes }),
159
+ ...(design.propose?.edges === undefined ? {} : { edges })
160
+ },
161
+ modify,
162
+ remove,
163
+ comments
164
+ };
165
+ // Each key where the design holds it, in its order, so the exported file differs from the replay only where it folds.
166
+ const folded = Object.fromEntries(Object.entries(design).map(([key, value]) => [key, key in folds ? folds[key] : value]));
167
+ return {
168
+ design: folded,
169
+ map: mapOf(map, id => {
170
+ const at = resolve(id);
171
+ return dropped.has(at) ? undefined : at;
172
+ }),
173
+ renamed,
174
+ dropped
175
+ };
176
+ }
177
+ //# sourceMappingURL=effective-design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-design.js","sourceRoot":"","sources":["../../src/effective-design.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { DecidedSource } from './map-vocabulary.js';
2
- import type { GherkinStep, MapEntryId, MapFile, MapOptionId, MapScenario } from './map-structure.js';
2
+ import type { GherkinStep, MapEntryId, MapFile, MapOptionId, MapScenario, ScenarioRejection } from './map-structure.js';
3
3
  /** Why a stored fork-derived scenario stops feeding tests until a human strikes or supersedes it. */
4
4
  export type ScenarioReviewReason = 'option-changed' | 'reopened' | 'moot' | 'fork-gone' | 'walk-changed' | 'walk-gone';
5
5
  /** `ready` when the walk carries given, when and then; `needs-gherkin` when it is prose. */
@@ -18,6 +18,8 @@ export type ForkScenarioProposal = {
18
18
  given: GherkinStep[];
19
19
  when: GherkinStep[];
20
20
  then: GherkinStep[];
21
+ /** BP-229 (D7): the walk's declared rejection, copied only when the walk carries one. */
22
+ rejection?: ScenarioRejection;
21
23
  };
22
24
  /** A stored scenario with derivedFrom, and why it is under review; null when its fork still stands. */
23
25
  export type DerivedScenarioJudgement = {
@@ -1 +1 @@
1
- {"version":3,"file":"fork-scenarios.d.ts","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,OAAO,EAEP,WAAW,EAEX,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAO5B,qGAAqG;AACrG,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,CAAC;AAEvH,4FAA4F;AAC5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1D,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,OAAO,EAAE,wBAAwB,EAAE,CAAC;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAA;CAAE,CAAC;AAE7H,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,GAAK,QAAQ,UAAU,EAAE,UAAU,WAAW,EAAE,MAAM,MAAM,KAAI,MACxB,CAAC;AAgCrE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,eAAe,GAAI,kBAAkB,CAuC5E"}
1
+ {"version":3,"file":"fork-scenarios.d.ts","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,OAAO,EAEP,WAAW,EAEX,WAAW,EAGX,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;AAO5B,qGAAqG;AACrG,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,CAAC;AAEvH,4FAA4F;AAC5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1D,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,yFAAyF;IACzF,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,OAAO,EAAE,wBAAwB,EAAE,CAAC;CACrC,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG;IAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAA;CAAE,CAAC;AAE7H,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,GAAK,QAAQ,UAAU,EAAE,UAAU,WAAW,EAAE,MAAM,MAAM,KAAI,MACxB,CAAC;AAoDrE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,eAAe,GAAI,kBAAkB,CAwC5E"}
@@ -8,13 +8,27 @@ const forkScenarioKey = (forkId, optionId, walk) => `${exports.FORK_SCENARIO_KEY
8
8
  exports.forkScenarioKey = forkScenarioKey;
9
9
  const isStructural = (walk) => walk.kind === 'structural';
10
10
  const hasGherkin = (walk) => walk.given !== undefined && walk.when !== undefined && walk.then !== undefined;
11
- const stepsOf = (text) => text === undefined ? [] : [{ text }];
11
+ const GHERKIN_KEYWORDS = ['given', 'when', 'then'];
12
+ // BP-231 (D11): a keyword's step carries the element the walk names for that keyword, and no key without one.
13
+ function stepsOf(walk, keyword) {
14
+ const text = walk[keyword];
15
+ if (text === undefined)
16
+ return [];
17
+ const element = walk.exercises?.[keyword];
18
+ return [element === undefined ? { text } : { text, exercises: { esId: element.esId } }];
19
+ }
20
+ // BP-231 (D11): an element absent on one side only, or a different id, is a change.
21
+ const sameExercises = (walk, basis) => GHERKIN_KEYWORDS.every(keyword => walk?.[keyword]?.esId === basis?.[keyword]?.esId);
22
+ // BP-229 (D8): absent means no rejection; a marker on one side only, or a different code, is a change.
23
+ const sameRejection = (walk, basis) => (walk === undefined) === (basis === undefined) && walk?.code === basis?.code;
12
24
  // The walk's fields a basis records; `kind` absent reads as behavioral, so spelling it out changes nothing.
13
25
  const sameWalk = (walk, basis) => walk.text === basis.text
14
26
  && isStructural(walk) === isStructural(basis)
15
27
  && walk.given === basis.given
16
28
  && walk.when === basis.when
17
- && walk.then === basis.then;
29
+ && walk.then === basis.then
30
+ && sameRejection(walk.rejection, basis.rejection)
31
+ && sameExercises(walk.exercises, basis.exercises);
18
32
  function reviewReasonOf(derivedFrom, forks) {
19
33
  const fork = forks.get(derivedFrom.forkId);
20
34
  if (fork === undefined)
@@ -68,9 +82,10 @@ function joinForkScenarios(map) {
68
82
  title: walk.scenario,
69
83
  text: walk.text,
70
84
  anchors: [fork.anchor ?? fork.id],
71
- given: ready ? stepsOf(walk.given) : [],
72
- when: ready ? stepsOf(walk.when) : [],
73
- then: ready ? stepsOf(walk.then) : []
85
+ given: ready ? stepsOf(walk, 'given') : [],
86
+ when: ready ? stepsOf(walk, 'when') : [],
87
+ then: ready ? stepsOf(walk, 'then') : [],
88
+ ...(walk.rejection === undefined ? {} : { rejection: walk.rejection })
74
89
  });
75
90
  }
76
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fork-scenarios.js","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fork-scenarios.js","sourceRoot":"","sources":["../../src/fork-scenarios.ts"],"names":[],"mappings":";;;AAuHA,8CAwCC;AArGD,wGAAwG;AAC3F,QAAA,wBAAwB,GAAG,UAAU,CAAC;AAE5C,MAAM,eAAe,GAAG,CAAE,MAAkB,EAAE,QAAqB,EAAE,IAAY,EAAW,EAAE,CACnG,GAAI,gCAAyB,GAAI,MAAO,IAAK,QAAS,IAAK,IAAK,EAAE,CAAC;AADxD,QAAA,eAAe,mBACyC;AAErE,MAAM,YAAY,GAAG,CAAE,IAAiC,EAAY,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;AAElG,MAAM,UAAU,GAAG,CAAE,IAAmB,EAAY,EAAE,CACpD,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AAIjF,MAAM,gBAAgB,GAA8B,CAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAE,CAAC;AAEhF,8GAA8G;AAC9G,SAAS,OAAO,CAAE,IAAmB,EAAE,OAAuB;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAE,OAAO,CAAE,CAAC;IAC7B,IAAK,IAAI,KAAK,SAAS;QAAG,OAAO,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAE,OAAO,CAAE,CAAC;IAC5C,OAAO,CAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC;AAC5F,CAAC;AAED,oFAAoF;AACpF,MAAM,aAAa,GAAG,CAAE,IAA+B,EAAE,KAAgC,EAAY,EAAE,CACrG,gBAAgB,CAAC,KAAK,CAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAE,OAAO,CAAE,EAAE,IAAI,KAAK,KAAK,EAAE,CAAE,OAAO,CAAE,EAAE,IAAI,CAAE,CAAC;AAE5F,uGAAuG;AACvG,MAAM,aAAa,GAAG,CAAE,IAAwB,EAAE,KAAyB,EAAY,EAAE,CACvF,CAAE,IAAI,KAAK,SAAS,CAAE,KAAK,CAAE,KAAK,KAAK,SAAS,CAAE,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC;AAEnF,4GAA4G;AAC5G,MAAM,QAAQ,GAAG,CAAE,IAAmB,EAAE,KAA8B,EAAY,EAAE,CAClF,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;OACrB,YAAY,CAAE,IAAI,CAAE,KAAK,YAAY,CAAE,KAAK,CAAE;OAC9C,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;OAC1B,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;OACxB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;OACxB,aAAa,CAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAE;OAChD,aAAa,CAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAE,CAAC;AAEtD,SAAS,cAAc,CAAE,WAA+B,EAAE,KAAuC;IAC/F,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAE,WAAW,CAAC,MAAM,CAAE,CAAC;IAC7C,IAAK,IAAI,KAAK,SAAS;QAAG,OAAO,WAAW,CAAC;IAC7C,IAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;QAAG,OAAO,UAAU,CAAC;IACrD,IAAK,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;QAAG,OAAO,MAAM,CAAC;IACjD,IAAK,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,QAAQ;QAAG,OAAO,gBAAgB,CAAC;IAC3E,8FAA8F;IAC9F,IAAK,WAAW,CAAC,IAAI,KAAK,SAAS;QAAG,OAAO,IAAI,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAE,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,WAAW,CAAC,QAAQ,CAAE,CAAC;IAC7F,MAAM,IAAI,GAAG,MAAM,EAAE,KAAK,CAAC,IAAI,CAAE,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,WAAW,CAAC,IAAI,CAAE,CAAC;IACxF,IAAK,IAAI,KAAK,SAAS;QAAG,OAAO,WAAW,CAAC;IAC7C,IAAK,WAAW,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAE;QAAE,OAAO,cAAc,CAAC;IACpG,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAE,GAAoB;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,SAAS;QAChG,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAE,IAAA,uBAAe,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAE,CAAE,CAAC,CAAC,CAAC;IAExF,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAM,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAK,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAG,SAAS;QACrE,MAAM,WAAW,GAAG,CAAE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;aAC5C,MAAM,CAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAE;aAC/C,OAAO,CAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;QACrC,KAAM,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAA,uBAAe,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAE,CAAC;YACrE,IAAK,YAAY,CAAE,IAAI,CAAE,IAAI,MAAM,CAAC,GAAG,CAAE,GAAG,CAAE;gBAAE,SAAS;YACzD,MAAM,KAAK,GAAG,UAAU,CAAE,IAAI,CAAE,CAAC;YACjC,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG;gBACH,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,MAAM,CAAC,MAAM;gBACvB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBACxC,KAAK,EAAE,IAAI,CAAC,QAAQ;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,CAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAE;gBACnC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAE,IAAI,EAAE,OAAO,CAAE,CAAC,CAAC,CAAC,EAAE;gBAC5C,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAE,IAAI,EAAE,MAAM,CAAE,CAAC,CAAC,CAAC,EAAE;gBAC1C,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAE,IAAI,EAAE,MAAM,CAAE,CAAC,CAAC,CAAC,EAAE;gBAC1C,GAAG,CAAE,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;aACxE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,CAAC,EAAE,CAAC,CAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAE,CAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW,KAAK,SAAS;QACtF,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAE,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,CAAE,WAAW,EAAE,KAAK,CAAE,EAAE,CAAE,CAAC,CAAC;IAEhF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
@@ -1,15 +1,40 @@
1
1
  import type { BlueprintEdge } from './edges.js';
2
2
  import { type BlueprintNode, type NodeType } from './nodes.js';
3
3
  export type SchemaVersion = 1;
4
+ /**
5
+ * The type words a repository's code names end in, by node type, as the repository declares them
6
+ * (`{ "aggregate": "Aggregate" }`). They are the repository's convention, never Blueprint's: its
7
+ * extractor writes them on the graph, and Blueprint tolerates exactly those. A label carries no type
8
+ * word by guarantee, so a node proposed as `Greeter` is realized by the code named `GreeterAggregate`
9
+ * ({@link codeNodeId}).
10
+ */
11
+ export type TypeWords = Partial<Record<NodeType, string>>;
4
12
  export type BlueprintGraph = {
5
13
  schemaVersion: SchemaVersion;
6
14
  subdomains: string[];
7
15
  nodes: BlueprintNode[];
8
16
  edges: BlueprintEdge[];
17
+ typeWords?: TypeWords;
9
18
  };
10
19
  export declare function emptyGraph(): BlueprintGraph;
11
20
  export declare function slugify(label: string): string;
12
21
  export declare function nodeId(subdomain: string, type: NodeType, label: string): string;
22
+ /** The type words a graph carries, each a string with a letter or digit; anything else in the field is ignored. */
23
+ export declare function typeWordsOf(graph: Pick<BlueprintGraph, 'typeWords'>): TypeWords | undefined;
24
+ /**
25
+ * The name the code of a node labelled `label` carries when its type's word is `word`: the label
26
+ * without the word it may end in, in PascalCase, then the word once. `Greeter` and `Greeter
27
+ * Aggregate` are both `GreeterAggregate`. The label ends in the word when its last letters and
28
+ * digits spell it, case and anything between them aside (`Orders Read Model` ends in `Readmodel`);
29
+ * a label that is nothing but the word keeps it.
30
+ */
31
+ export declare function codeName(label: string, word: string): string;
32
+ /**
33
+ * The id the code of a node proposed as (`subdomain`, `type`, `label`) extracts to when the
34
+ * repository declares a type word for `type`: the id of its {@link codeName}. `undefined` when the
35
+ * repository declares none for the type, so a proposal is realized by its own id alone.
36
+ */
37
+ export declare function codeNodeId(subdomain: string, type: NodeType, label: string, typeWords: TypeWords | undefined): string | undefined;
13
38
  export type ParsedNodeId = {
14
39
  subdomain: string;
15
40
  type: NodeType;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,aAAa,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,wBAAgB,OAAO,CAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAO/C;AAED,wBAAgB,MAAM,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAI,MAAM,CAEjF;AAED,mHAAmH;AACnH,wBAAgB,WAAW,CAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAI,SAAS,GAAG,SAAS,CAM7F;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAI,MAAM,CAQ9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAGpB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,wBAAgB,WAAW,CAAE,EAAE,EAAE,MAAM,GAAI,YAAY,GAAG,SAAS,CAOlE"}