@duplojs/agents-kit 0.1.0-beta.3 → 0.1.0-beta.6

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 (487) hide show
  1. package/README.md +11 -11
  2. package/dist/bin/index.mjs +2 -2
  3. package/dist/bin/installSkill/index.d.ts +2 -0
  4. package/dist/bin/{install → installSkill}/index.mjs +3 -3
  5. package/dist/bin/{install → installSkill}/skill.mjs +1 -1
  6. package/dist/bin/setup/instructions.d.ts +1 -1
  7. package/docs/API/10-lang/10-array/10-at.ts +4 -4
  8. package/docs/API/10-lang/10-array/10-coalescing.ts +3 -2
  9. package/docs/API/10-lang/10-array/10-indexOf.ts +1 -1
  10. package/docs/API/10-lang/10-array/10-is.ts +17 -3
  11. package/docs/API/10-lang/10-array/10-lastIndexOf.ts +1 -1
  12. package/docs/API/10-lang/10-chrono/10-addTime.ts +1 -1
  13. package/docs/API/10-lang/10-chrono/10-closestTo.ts +5 -8
  14. package/docs/API/10-lang/10-chrono/10-isDate.ts +15 -2
  15. package/docs/API/10-lang/10-chrono/10-isSerializedTheDate.ts +16 -1
  16. package/docs/API/10-lang/10-chrono/10-isSerializedTheTime.ts +16 -1
  17. package/docs/API/10-lang/10-chrono/10-isTime.ts +15 -2
  18. package/docs/API/10-lang/10-chrono/10-maxDate.ts +4 -8
  19. package/docs/API/10-lang/10-chrono/10-maxTime.ts +4 -8
  20. package/docs/API/10-lang/10-chrono/10-minDate.ts +4 -8
  21. package/docs/API/10-lang/10-chrono/10-minTime.ts +4 -8
  22. package/docs/API/10-lang/10-chrono/10-sortDates.ts +6 -8
  23. package/docs/API/10-lang/10-chrono/10-sortTimes.ts +6 -8
  24. package/docs/API/10-lang/10-chrono/10-subtractTime.ts +1 -1
  25. package/docs/API/10-lang/10-common/10-and.ts +6 -0
  26. package/docs/API/10-lang/10-common/10-createQueue.ts +4 -3
  27. package/docs/API/10-lang/10-common/10-createTransformer.ts +1 -1
  28. package/docs/API/10-lang/10-common/10-equal.ts +6 -0
  29. package/docs/API/10-lang/10-common/10-falsy.ts +19 -0
  30. package/docs/API/10-lang/10-common/10-instanceOf.ts +14 -3
  31. package/docs/API/10-lang/10-common/10-isType.ts +6 -0
  32. package/docs/API/10-lang/10-common/10-justExec.ts +3 -3
  33. package/docs/API/10-lang/10-common/10-or.ts +17 -3
  34. package/docs/API/10-lang/10-common/10-tap.ts +28 -0
  35. package/docs/API/10-lang/10-common/10-toJSON.ts +1 -1
  36. package/docs/API/10-lang/10-common/10-toNative.ts +1 -1
  37. package/docs/API/10-lang/10-common/10-toRegExp.ts +1 -1
  38. package/docs/API/10-lang/10-common/10-truthy.ts +19 -0
  39. package/docs/API/10-lang/10-common/10-whenNot.ts +44 -13
  40. package/docs/API/10-lang/10-common/index.llms.md +4 -0
  41. package/docs/API/10-lang/10-dataStructure/10-typeStructureIdentifier.ts +2 -2
  42. package/docs/API/10-lang/10-either/10-asyncGroup.ts +1 -1
  43. package/docs/API/10-lang/10-either/10-asyncSafeCallback.ts +4 -2
  44. package/docs/API/10-lang/10-either/10-extractErrorInLeft.ts +45 -0
  45. package/docs/API/10-lang/10-either/10-forwardAssertsSelection.ts +1 -1
  46. package/docs/API/10-lang/10-either/10-group.ts +1 -1
  47. package/docs/API/10-lang/10-either/10-hasInformation.ts +6 -0
  48. package/docs/API/10-lang/10-either/10-isLeft.ts +10 -1
  49. package/docs/API/10-lang/10-either/10-isRight.ts +10 -1
  50. package/docs/API/10-lang/10-either/10-isSelected.ts +13 -1
  51. package/docs/API/10-lang/10-either/10-keepAsRightSelection.ts +1 -1
  52. package/docs/API/10-lang/10-either/10-matchInformation.ts +7 -5
  53. package/docs/API/10-lang/10-either/10-matchInformationCombination.ts +61 -0
  54. package/docs/API/10-lang/10-either/10-matchInformationCombinationOtherwise.ts +62 -0
  55. package/docs/API/10-lang/10-either/10-matchInformationOtherwise.ts +7 -5
  56. package/docs/API/10-lang/10-either/10-rightAsyncPipe.ts +2 -1
  57. package/docs/API/10-lang/10-either/10-rightPipe.ts +1 -1
  58. package/docs/API/10-lang/10-either/10-safeCallback.ts +1 -1
  59. package/docs/API/10-lang/10-either/10-unwrapOr.ts +2 -2
  60. package/docs/API/10-lang/10-either/10-unwrapOtherwise.ts +2 -2
  61. package/docs/API/10-lang/10-either/10-whenHasInformation.ts +4 -3
  62. package/docs/API/10-lang/10-either/10-whenHasInformationOtherwise.ts +5 -5
  63. package/docs/API/10-lang/10-either/10-whenIsLeft.ts +2 -2
  64. package/docs/API/10-lang/10-either/10-whenIsLeftOtherwise.ts +5 -5
  65. package/docs/API/10-lang/10-either/10-whenIsRight.ts +2 -2
  66. package/docs/API/10-lang/10-either/10-whenIsRightOtherwise.ts +7 -7
  67. package/docs/API/10-lang/10-either/10-whenIsSelected.ts +5 -5
  68. package/docs/API/10-lang/10-either/10-whenIsSelectedOtherwise.ts +5 -5
  69. package/docs/API/10-lang/10-either/index.llms.md +12 -0
  70. package/docs/API/10-lang/10-generator/10-asyncConcat.ts +7 -10
  71. package/docs/API/10-lang/10-generator/10-asyncFlat.ts +6 -6
  72. package/docs/API/10-lang/10-generator/10-concat.ts +3 -3
  73. package/docs/API/10-lang/10-generator/10-flat.ts +2 -2
  74. package/docs/API/10-lang/10-generator/10-map.ts +1 -1
  75. package/docs/API/10-lang/10-generator/10-reduce.ts +1 -1
  76. package/docs/API/10-lang/10-number/10-betweenThan.ts +43 -0
  77. package/docs/API/10-lang/10-number/10-betweenThanOrEqual.ts +43 -0
  78. package/docs/API/10-lang/10-number/10-greaterThan.ts +35 -0
  79. package/docs/API/10-lang/10-number/10-greaterThanOrEqual.ts +35 -0
  80. package/docs/API/10-lang/10-number/10-isEven.ts +33 -0
  81. package/docs/API/10-lang/10-number/10-isInteger.ts +33 -0
  82. package/docs/API/10-lang/10-number/10-isMultipleOf.ts +35 -0
  83. package/docs/API/10-lang/10-number/10-isNegative.ts +33 -0
  84. package/docs/API/10-lang/10-number/10-isNotZero.ts +33 -0
  85. package/docs/API/10-lang/10-number/10-isOdd.ts +33 -0
  86. package/docs/API/10-lang/10-number/10-isPositive.ts +33 -0
  87. package/docs/API/10-lang/10-number/10-isSafe.ts +33 -0
  88. package/docs/API/10-lang/10-number/10-isStrictNegative.ts +34 -0
  89. package/docs/API/10-lang/10-number/10-isStrictPositive.ts +33 -0
  90. package/docs/API/10-lang/10-number/10-lessThan.ts +35 -0
  91. package/docs/API/10-lang/10-number/10-lessThanOrEqual.ts +35 -0
  92. package/docs/API/10-lang/10-number/10-max.ts +19 -0
  93. package/docs/API/10-lang/10-number/10-maxOf.ts +19 -0
  94. package/docs/API/10-lang/10-number/10-min.ts +19 -0
  95. package/docs/API/10-lang/10-number/10-minOf.ts +19 -0
  96. package/docs/API/10-lang/10-number/10-sort.ts +19 -0
  97. package/docs/API/10-lang/10-number/10-sum.ts +19 -0
  98. package/docs/API/10-lang/10-number/index.llms.md +92 -0
  99. package/docs/API/10-lang/10-number/index.md +3 -0
  100. package/docs/API/10-lang/10-object/10-assign.ts +41 -0
  101. package/docs/API/10-lang/10-object/10-countKeys.ts +15 -0
  102. package/docs/API/10-lang/10-object/10-deepDiscriminate.ts +63 -0
  103. package/docs/API/10-lang/10-object/10-deepOverride.ts +35 -0
  104. package/docs/API/10-lang/10-object/10-discriminate.ts +55 -0
  105. package/docs/API/10-lang/10-object/10-discriminateEntryKey.ts +43 -0
  106. package/docs/API/10-lang/10-object/10-discriminateEntryValue.ts +44 -0
  107. package/docs/API/10-lang/10-object/10-entries.ts +19 -0
  108. package/docs/API/10-lang/10-object/10-entry.ts +17 -0
  109. package/docs/API/10-lang/10-object/10-fromEntries.ts +23 -0
  110. package/docs/API/10-lang/10-object/10-getDeepProperty.ts +26 -0
  111. package/docs/API/10-lang/10-object/10-getProperty.ts +24 -0
  112. package/docs/API/10-lang/10-object/10-hasKeys.ts +43 -0
  113. package/docs/API/10-lang/10-object/10-isSimple.ts +38 -0
  114. package/docs/API/10-lang/10-object/10-keys.ts +19 -0
  115. package/docs/API/10-lang/10-object/10-omit.ts +39 -0
  116. package/docs/API/10-lang/10-object/10-override.ts +24 -0
  117. package/docs/API/10-lang/10-object/10-pick.ts +41 -0
  118. package/docs/API/10-lang/10-object/10-to.ts +40 -0
  119. package/docs/API/10-lang/10-object/10-transformProperties.ts +43 -0
  120. package/docs/API/10-lang/10-object/10-transformProperty.ts +39 -0
  121. package/docs/API/10-lang/10-object/10-values.ts +19 -0
  122. package/docs/API/10-lang/10-object/index.llms.md +92 -0
  123. package/docs/API/10-lang/10-object/index.md +3 -0
  124. package/docs/API/10-lang/10-path/10-computeRelative.ts +19 -0
  125. package/docs/API/10-lang/10-path/10-concatSegment.ts +28 -0
  126. package/docs/API/10-lang/10-path/10-create.ts +21 -0
  127. package/docs/API/10-lang/10-path/10-createAbsolute.ts +21 -0
  128. package/docs/API/10-lang/10-path/10-createAbsoluteOrThrow.ts +16 -0
  129. package/docs/API/10-lang/10-path/10-createMatcher.ts +50 -0
  130. package/docs/API/10-lang/10-path/10-createOrThrow.ts +16 -0
  131. package/docs/API/10-lang/10-path/10-createSegment.ts +26 -0
  132. package/docs/API/10-lang/10-path/10-createSegmentOrThrow.ts +16 -0
  133. package/docs/API/10-lang/10-path/10-declareAbsolutePath.ts +15 -0
  134. package/docs/API/10-lang/10-path/10-declarePath.ts +15 -0
  135. package/docs/API/10-lang/10-path/10-declareSegment.ts +15 -0
  136. package/docs/API/10-lang/10-path/10-getBaseName.ts +22 -0
  137. package/docs/API/10-lang/10-path/10-getExtensionName.ts +22 -0
  138. package/docs/API/10-lang/10-path/10-getParentFolderPath.ts +25 -0
  139. package/docs/API/10-lang/10-path/10-is.ts +46 -0
  140. package/docs/API/10-lang/10-path/10-isAbsolute.ts +46 -0
  141. package/docs/API/10-lang/10-path/10-isSegment.ts +42 -0
  142. package/docs/API/10-lang/10-path/10-normalize.ts +26 -0
  143. package/docs/API/10-lang/10-path/10-resolveFrom.ts +37 -0
  144. package/docs/API/10-lang/10-path/10-resolveRelative.ts +23 -0
  145. package/docs/API/10-lang/10-path/index.llms.md +88 -0
  146. package/docs/API/10-lang/10-path/index.md +3 -0
  147. package/docs/API/10-lang/10-pattern/10-exhaustive.ts +26 -0
  148. package/docs/API/10-lang/10-pattern/10-isMatch.ts +72 -0
  149. package/docs/API/10-lang/10-pattern/10-match.ts +133 -0
  150. package/docs/API/10-lang/10-pattern/10-matchWithEntity.ts +49 -0
  151. package/docs/API/10-lang/10-pattern/10-matchWithEntityOtherwise.ts +55 -0
  152. package/docs/API/10-lang/10-pattern/10-matchWithError.ts +45 -0
  153. package/docs/API/10-lang/10-pattern/10-matchWithErrorOtherwise.ts +48 -0
  154. package/docs/API/10-lang/10-pattern/10-matchWithFact.ts +49 -0
  155. package/docs/API/10-lang/10-pattern/10-matchWithFactOtherwise.ts +49 -0
  156. package/docs/API/10-lang/10-pattern/10-matchWithNumber.ts +33 -0
  157. package/docs/API/10-lang/10-pattern/10-matchWithNumberOtherwise.ts +37 -0
  158. package/docs/API/10-lang/10-pattern/10-matchWithString.ts +34 -0
  159. package/docs/API/10-lang/10-pattern/10-matchWithStringOtherwise.ts +35 -0
  160. package/docs/API/10-lang/10-pattern/10-matchWithTaggedObject.ts +43 -0
  161. package/docs/API/10-lang/10-pattern/10-matchWithTaggedObjectOtherwise.ts +49 -0
  162. package/docs/API/10-lang/10-pattern/10-otherwise.ts +28 -0
  163. package/docs/API/10-lang/10-pattern/10-union.ts +47 -0
  164. package/docs/API/10-lang/10-pattern/10-when.ts +46 -0
  165. package/docs/API/10-lang/10-pattern/10-whenNot.ts +123 -0
  166. package/docs/API/10-lang/10-pattern/index.llms.md +80 -0
  167. package/docs/API/10-lang/10-pattern/index.md +3 -0
  168. package/docs/API/10-lang/10-printer/10-bold.ts +12 -0
  169. package/docs/API/10-lang/10-printer/10-colorized.ts +18 -0
  170. package/docs/API/10-lang/10-printer/10-colorizedBold.ts +18 -0
  171. package/docs/API/10-lang/10-printer/10-indent.ts +20 -0
  172. package/docs/API/10-lang/10-printer/10-primitives.md +11 -0
  173. package/docs/API/10-lang/10-printer/10-render.ts +29 -0
  174. package/docs/API/10-lang/10-printer/10-renderLine.ts +12 -0
  175. package/docs/API/10-lang/10-printer/10-renderParagraph.ts +16 -0
  176. package/docs/API/10-lang/10-printer/index.llms.md +37 -0
  177. package/docs/API/10-lang/10-printer/index.md +3 -0
  178. package/docs/API/10-lang/10-string/10-at.ts +18 -0
  179. package/docs/API/10-lang/10-string/10-capitalize.ts +18 -0
  180. package/docs/API/10-lang/10-string/10-charAt.ts +18 -0
  181. package/docs/API/10-lang/10-string/10-concat.ts +18 -0
  182. package/docs/API/10-lang/10-string/10-endsWith.ts +33 -0
  183. package/docs/API/10-lang/10-string/10-extract.ts +18 -0
  184. package/docs/API/10-lang/10-string/10-extractAll.ts +18 -0
  185. package/docs/API/10-lang/10-string/10-first.ts +17 -0
  186. package/docs/API/10-lang/10-string/10-includes.ts +33 -0
  187. package/docs/API/10-lang/10-string/10-indexOf.ts +17 -0
  188. package/docs/API/10-lang/10-string/10-isComposedOf.ts +33 -0
  189. package/docs/API/10-lang/10-string/10-isEmail.ts +56 -0
  190. package/docs/API/10-lang/10-string/10-isIn.ts +34 -0
  191. package/docs/API/10-lang/10-string/10-isKeyof.ts +37 -0
  192. package/docs/API/10-lang/10-string/10-isNotEmpty.ts +32 -0
  193. package/docs/API/10-lang/10-string/10-isNumber.ts +32 -0
  194. package/docs/API/10-lang/10-string/10-isTrimmed.ts +33 -0
  195. package/docs/API/10-lang/10-string/10-isUrl.ts +31 -0
  196. package/docs/API/10-lang/10-string/10-isUuid.ts +31 -0
  197. package/docs/API/10-lang/10-string/10-join.ts +18 -0
  198. package/docs/API/10-lang/10-string/10-last.ts +17 -0
  199. package/docs/API/10-lang/10-string/10-lastIndexOf.ts +17 -0
  200. package/docs/API/10-lang/10-string/10-length.ts +18 -0
  201. package/docs/API/10-lang/10-string/10-lengthEqual.ts +33 -0
  202. package/docs/API/10-lang/10-string/10-maxCharacters.ts +33 -0
  203. package/docs/API/10-lang/10-string/10-minCharacters.ts +33 -0
  204. package/docs/API/10-lang/10-string/10-normalize.ts +17 -0
  205. package/docs/API/10-lang/10-string/10-padEnd.ts +17 -0
  206. package/docs/API/10-lang/10-string/10-padStart.ts +17 -0
  207. package/docs/API/10-lang/10-string/10-pop.ts +17 -0
  208. package/docs/API/10-lang/10-string/10-prepend.ts +17 -0
  209. package/docs/API/10-lang/10-string/10-repeat.ts +17 -0
  210. package/docs/API/10-lang/10-string/10-replace.ts +18 -0
  211. package/docs/API/10-lang/10-string/10-replaceAll.ts +17 -0
  212. package/docs/API/10-lang/10-string/10-search.ts +17 -0
  213. package/docs/API/10-lang/10-string/10-shift.ts +17 -0
  214. package/docs/API/10-lang/10-string/10-slice.ts +17 -0
  215. package/docs/API/10-lang/10-string/10-sort.ts +19 -0
  216. package/docs/API/10-lang/10-string/10-sortCompare.ts +17 -0
  217. package/docs/API/10-lang/10-string/10-split.ts +34 -0
  218. package/docs/API/10-lang/10-string/10-startsWith.ts +33 -0
  219. package/docs/API/10-lang/10-string/10-stringify.ts +11 -0
  220. package/docs/API/10-lang/10-string/10-substring.ts +17 -0
  221. package/docs/API/10-lang/10-string/10-test.ts +17 -0
  222. package/docs/API/10-lang/10-string/10-to.ts +11 -0
  223. package/docs/API/10-lang/10-string/10-toLowerCase.ts +17 -0
  224. package/docs/API/10-lang/10-string/10-toUpperCase.ts +17 -0
  225. package/docs/API/10-lang/10-string/10-trim.ts +17 -0
  226. package/docs/API/10-lang/10-string/10-trimEnd.ts +17 -0
  227. package/docs/API/10-lang/10-string/10-trimStart.ts +17 -0
  228. package/docs/API/10-lang/10-string/10-uncapitalize.ts +17 -0
  229. package/docs/API/10-lang/10-string/index.llms.md +208 -0
  230. package/docs/API/10-lang/10-string/index.md +3 -0
  231. package/docs/API/10-lang/10-tuple/10-from.ts +50 -0
  232. package/docs/API/10-lang/10-tuple/10-map.ts +37 -0
  233. package/docs/API/10-lang/10-tuple/index.llms.md +12 -0
  234. package/docs/API/10-lang/10-tuple/index.md +3 -0
  235. package/docs/API/40-json-web-token/10-tokenHandler/10-createTokenHandler.ts +160 -0
  236. package/docs/API/40-json-web-token/10-tokenHandler/index.llms.md +8 -0
  237. package/docs/API/40-json-web-token/10-tokenHandler/index.md +3 -0
  238. package/docs/API/40-json-web-token/20-signer/10-createHS256.ts +24 -0
  239. package/docs/API/40-json-web-token/20-signer/10-createHS512.ts +24 -0
  240. package/docs/API/40-json-web-token/20-signer/10-createRS256.ts +28 -0
  241. package/docs/API/40-json-web-token/20-signer/10-createRS512.ts +28 -0
  242. package/docs/API/40-json-web-token/20-signer/10-factory.ts +29 -0
  243. package/docs/API/40-json-web-token/20-signer/index.llms.md +24 -0
  244. package/docs/API/40-json-web-token/20-signer/index.md +3 -0
  245. package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP.ts +26 -0
  246. package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP256.ts +26 -0
  247. package/docs/API/40-json-web-token/30-cipher/10-factory.ts +29 -0
  248. package/docs/API/40-json-web-token/30-cipher/index.llms.md +16 -0
  249. package/docs/API/40-json-web-token/30-cipher/index.md +3 -0
  250. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.decrypt.ts +17 -0
  251. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.encrypt.ts +11 -0
  252. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.generateInitializationVector.ts +9 -0
  253. package/docs/API/40-json-web-token/40-utils/10-HMAC.sign.ts +13 -0
  254. package/docs/API/40-json-web-token/40-utils/10-HMAC.verify.ts +11 -0
  255. package/docs/API/40-json-web-token/40-utils/10-RSA.sign.ts +14 -0
  256. package/docs/API/40-json-web-token/40-utils/10-RSA.verify.ts +13 -0
  257. package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.decrypt.ts +13 -0
  258. package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.encrypt.ts +10 -0
  259. package/docs/API/40-json-web-token/40-utils/10-decodeBase64.ts +9 -0
  260. package/docs/API/40-json-web-token/40-utils/10-decodeBase64Url.ts +9 -0
  261. package/docs/API/40-json-web-token/40-utils/10-decodeText.ts +9 -0
  262. package/docs/API/40-json-web-token/40-utils/10-encodeBase64.ts +9 -0
  263. package/docs/API/40-json-web-token/40-utils/10-encodeBase64Url.ts +9 -0
  264. package/docs/API/40-json-web-token/40-utils/10-encodeText.ts +9 -0
  265. package/docs/API/40-json-web-token/40-utils/10-isBase64Url.ts +11 -0
  266. package/docs/API/40-json-web-token/40-utils/10-jsonParse.ts +11 -0
  267. package/docs/API/40-json-web-token/40-utils/10-pemToBinary.ts +11 -0
  268. package/docs/API/40-json-web-token/40-utils/index.llms.md +76 -0
  269. package/docs/API/40-json-web-token/40-utils/index.md +3 -0
  270. package/docs/API/40-json-web-token/index.md +3 -0
  271. package/docs/API/50-form/10-vue/10-construction/10-createForm.ts +48 -0
  272. package/docs/API/50-form/10-vue/10-construction/10-createFormField.ts +66 -0
  273. package/docs/API/50-form/10-vue/10-construction/10-createGridTemplates.ts +39 -0
  274. package/docs/API/50-form/10-vue/10-construction/10-createInput.ts +46 -0
  275. package/docs/API/50-form/10-vue/10-construction/10-createTemplate.ts +36 -0
  276. package/docs/API/50-form/10-vue/10-construction/fixtures/AddressInput.vue +19 -0
  277. package/docs/API/50-form/10-vue/10-construction/index.llms.md +24 -0
  278. package/docs/API/50-form/10-vue/10-construction/index.md +3 -0
  279. package/docs/API/50-form/10-vue/20-layouts/10-useCheckLayout.ts +40 -0
  280. package/docs/API/50-form/10-vue/20-layouts/10-useDisabledLayout.ts +34 -0
  281. package/docs/API/50-form/10-vue/20-layouts/10-useMultiLayout.ts +32 -0
  282. package/docs/API/50-form/10-vue/20-layouts/10-useRepeatLayout.ts +34 -0
  283. package/docs/API/50-form/10-vue/20-layouts/10-useSectionLayout.ts +20 -0
  284. package/docs/API/50-form/10-vue/20-layouts/10-useSlotLayout.ts +37 -0
  285. package/docs/API/50-form/10-vue/20-layouts/10-useStepLayout.ts +31 -0
  286. package/docs/API/50-form/10-vue/20-layouts/10-useUnionLayout.ts +48 -0
  287. package/docs/API/50-form/10-vue/20-layouts/index.llms.md +36 -0
  288. package/docs/API/50-form/10-vue/20-layouts/index.md +3 -0
  289. package/docs/API/50-form/10-vue/30-designSystem/10-useCheckbox.ts +13 -0
  290. package/docs/API/50-form/10-vue/30-designSystem/10-useCheckboxPolicy.ts +18 -0
  291. package/docs/API/50-form/10-vue/30-designSystem/10-useDateInput.ts +20 -0
  292. package/docs/API/50-form/10-vue/30-designSystem/10-useDualRangeInput.ts +27 -0
  293. package/docs/API/50-form/10-vue/30-designSystem/10-useFileInput.ts +23 -0
  294. package/docs/API/50-form/10-vue/30-designSystem/10-useNumberInput.ts +18 -0
  295. package/docs/API/50-form/10-vue/30-designSystem/10-useRadioGroup.ts +31 -0
  296. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeDateInput.ts +23 -0
  297. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeInput.ts +18 -0
  298. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeTimeInput.ts +23 -0
  299. package/docs/API/50-form/10-vue/30-designSystem/10-useSelectInput.ts +31 -0
  300. package/docs/API/50-form/10-vue/30-designSystem/10-useTextInput.ts +14 -0
  301. package/docs/API/50-form/10-vue/30-designSystem/10-useTextareaInput.ts +14 -0
  302. package/docs/API/50-form/10-vue/30-designSystem/10-useTimeInput.ts +20 -0
  303. package/docs/API/50-form/10-vue/30-designSystem/20-components.md +11 -0
  304. package/docs/API/50-form/10-vue/30-designSystem/index.llms.md +65 -0
  305. package/docs/API/50-form/10-vue/30-designSystem/index.md +3 -0
  306. package/docs/API/50-form/10-vue/fixtures/templates.ts +20 -0
  307. package/docs/API/50-form/10-vue/index.md +3 -0
  308. package/docs/API/50-form/index.md +3 -0
  309. package/docs/API/60-playwright/10-construction/10-createComponent.ts +47 -0
  310. package/docs/API/60-playwright/10-construction/10-createComponentInteraction.ts +28 -0
  311. package/docs/API/60-playwright/10-construction/10-createPage.ts +34 -0
  312. package/docs/API/60-playwright/10-construction/10-createStepWrapper.ts +23 -0
  313. package/docs/API/60-playwright/10-construction/10-createWebsite.ts +57 -0
  314. package/docs/API/60-playwright/10-construction/10-initClient.ts +38 -0
  315. package/docs/API/60-playwright/10-construction/index.llms.md +28 -0
  316. package/docs/API/60-playwright/10-construction/index.md +3 -0
  317. package/docs/API/60-playwright/20-actions/10-check.ts +9 -0
  318. package/docs/API/60-playwright/20-actions/10-clear.ts +9 -0
  319. package/docs/API/60-playwright/20-actions/10-click.ts +9 -0
  320. package/docs/API/60-playwright/20-actions/10-dragTo.ts +10 -0
  321. package/docs/API/60-playwright/20-actions/10-extractContent.ts +10 -0
  322. package/docs/API/60-playwright/20-actions/10-fill.ts +9 -0
  323. package/docs/API/60-playwright/20-actions/10-focus.ts +9 -0
  324. package/docs/API/60-playwright/20-actions/10-forceClick.ts +10 -0
  325. package/docs/API/60-playwright/20-actions/10-hover.ts +9 -0
  326. package/docs/API/60-playwright/20-actions/10-press.ts +9 -0
  327. package/docs/API/60-playwright/20-actions/10-selectOption.ts +10 -0
  328. package/docs/API/60-playwright/20-actions/10-type.ts +10 -0
  329. package/docs/API/60-playwright/20-actions/10-uncheck.ts +9 -0
  330. package/docs/API/60-playwright/20-actions/10-withStep.ts +10 -0
  331. package/docs/API/60-playwright/20-actions/index.llms.md +60 -0
  332. package/docs/API/60-playwright/20-actions/index.md +3 -0
  333. package/docs/API/60-playwright/30-assertions/10-toBeBusy.ts +10 -0
  334. package/docs/API/60-playwright/30-assertions/10-toBeChecked.ts +9 -0
  335. package/docs/API/60-playwright/30-assertions/10-toBeDisabled.ts +9 -0
  336. package/docs/API/60-playwright/30-assertions/10-toBeEnabled.ts +9 -0
  337. package/docs/API/60-playwright/30-assertions/10-toBeHidden.ts +9 -0
  338. package/docs/API/60-playwright/30-assertions/10-toBeNotBusy.ts +10 -0
  339. package/docs/API/60-playwright/30-assertions/10-toBeVisible.ts +10 -0
  340. package/docs/API/60-playwright/30-assertions/10-toContainText.ts +9 -0
  341. package/docs/API/60-playwright/30-assertions/10-toHaveAttribute.ts +12 -0
  342. package/docs/API/60-playwright/30-assertions/10-toHaveClass.ts +9 -0
  343. package/docs/API/60-playwright/30-assertions/10-toHaveNoText.ts +10 -0
  344. package/docs/API/60-playwright/30-assertions/10-toHaveQuantity.ts +20 -0
  345. package/docs/API/60-playwright/30-assertions/10-toHaveText.ts +9 -0
  346. package/docs/API/60-playwright/30-assertions/10-toHaveValue.ts +9 -0
  347. package/docs/API/60-playwright/30-assertions/10-withStep.ts +10 -0
  348. package/docs/API/60-playwright/30-assertions/index.llms.md +64 -0
  349. package/docs/API/60-playwright/30-assertions/index.md +3 -0
  350. package/docs/API/60-playwright/fixtures/component.ts +44 -0
  351. package/docs/API/60-playwright/index.md +3 -0
  352. package/docs/API.llms.md +84 -0
  353. package/docs/concepts/01-fundamental/01-constraint/20-manipulation.ts +9 -6
  354. package/docs/concepts/01-fundamental/01-constraint/30-cast.ts +9 -5
  355. package/docs/concepts/01-fundamental/02-currying/01-use.ts +5 -0
  356. package/docs/concepts/01-fundamental/02-currying/10-built-in-function.ts +28 -16
  357. package/docs/concepts/01-fundamental/02-currying/20-inner-pipe.ts +11 -2
  358. package/docs/concepts/01-fundamental/02-currying/30-async-pipe.ts +11 -2
  359. package/docs/concepts/01-fundamental/03-either/10-discrimination.ts +23 -12
  360. package/docs/concepts/01-fundamental/03-either/20-exhaustive-handling.ts +27 -10
  361. package/docs/concepts/01-fundamental/03-either/30-composition.ts +18 -10
  362. package/docs/concepts/01-fundamental/03-either/40-result-adaptation.ts +10 -4
  363. package/docs/concepts/01-fundamental/03-either/50-external-results.ts +16 -3
  364. package/docs/concepts/01-fundamental/04-data-structure/10-structure.ts +110 -59
  365. package/docs/concepts/01-fundamental/04-data-structure/20-constraint.ts +20 -12
  366. package/docs/concepts/01-fundamental/04-data-structure/30-validation.ts +13 -9
  367. package/docs/concepts/01-fundamental/04-data-structure/40-codecs.ts +31 -20
  368. package/docs/concepts/01-fundamental/04-data-structure/50-recursive.ts +10 -1
  369. package/docs/concepts/01-fundamental/05-chrono/10-creation.ts +39 -13
  370. package/docs/concepts/01-fundamental/05-chrono/20-manipulation.ts +20 -4
  371. package/docs/concepts/01-fundamental/05-chrono/30-serialized.ts +22 -6
  372. package/docs/concepts/01-fundamental/05-chrono/40-timezone.ts +5 -1
  373. package/docs/concepts/01-fundamental/06-modeling/20-entity.ts +29 -42
  374. package/docs/concepts/01-fundamental/06-modeling/30-tagged-object.ts +46 -23
  375. package/docs/concepts/01-fundamental/06-modeling/40-entity-lifecycle.ts +30 -33
  376. package/docs/concepts/01-fundamental/07-discrimination/10-entity.ts +52 -20
  377. package/docs/concepts/01-fundamental/07-discrimination/20-fact.ts +54 -38
  378. package/docs/concepts/01-fundamental/07-discrimination/30-tagged-object.ts +52 -20
  379. package/docs/concepts/01-fundamental/07-discrimination/40-error.ts +26 -10
  380. package/docs/concepts/01-fundamental/07-discrimination/50-literal.ts +29 -10
  381. package/docs/concepts/01-fundamental/07-discrimination/60-shape.ts +10 -2
  382. package/docs/concepts/01-fundamental/07-discrimination/70-predicate.ts +18 -6
  383. package/docs/concepts/01-fundamental/08-kind/01-identity.md +7 -0
  384. package/docs/concepts/01-fundamental/08-kind/20-metadata.md +11 -0
  385. package/docs/concepts/01-fundamental/08-kind/30-transport.md +11 -0
  386. package/docs/concepts/01-fundamental/08-kind/index.md +3 -0
  387. package/docs/concepts/02-server/10-file/10-manipulation.ts +15 -3
  388. package/docs/concepts/02-server/10-file/20-path.ts +22 -6
  389. package/docs/concepts/02-server/20-http/10-init.ts +1 -9
  390. package/docs/concepts/02-server/20-http/20-route.ts +40 -32
  391. package/docs/concepts/02-server/20-http/30-routine.ts +12 -19
  392. package/docs/concepts/02-server/20-http/40-jwt.ts +49 -37
  393. package/docs/concepts/02-server/20-http/50-open-api.ts +44 -0
  394. package/docs/concepts/02-server/20-http/index.md +1 -1
  395. package/docs/concepts/02-server/30-environment/10-platform.ts +12 -3
  396. package/docs/concepts/02-server/30-environment/20-variable.ts +13 -7
  397. package/docs/concepts/03-client/10-http/10-init.ts +11 -23
  398. package/docs/concepts/03-client/10-http/20-request.ts +79 -69
  399. package/docs/concepts/03-client/10-http/30-hook.ts +23 -23
  400. package/docs/concepts/03-client/20-form/10-init.ts +18 -15
  401. package/docs/concepts/03-client/20-form/20-input.ts +13 -6
  402. package/docs/concepts/03-client/20-form/30-layout.ts +44 -49
  403. package/docs/concepts/03-client/20-form/40-template.ts +10 -5
  404. package/docs/concepts/03-client/20-form/50-integration.md +11 -0
  405. package/docs/concepts/03-client/20-form/examples/postModeration/ThePage.vue +32 -0
  406. package/docs/concepts/03-client/20-form/examples/postModeration/usePostModeration.ts +80 -0
  407. package/docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md +23 -20
  408. package/docs/concepts/05-type-driven-design/01-architecture/index.md +1 -1
  409. package/docs/concepts/05-type-driven-design/02-domains/10-entities.md +29 -37
  410. package/docs/concepts/05-type-driven-design/02-domains/20-aggregates.md +42 -26
  411. package/docs/concepts/05-type-driven-design/02-domains/30-repositories.md +20 -26
  412. package/docs/concepts/05-type-driven-design/02-domains/40-refinements.md +30 -0
  413. package/docs/concepts/05-type-driven-design/02-domains/index.md +1 -1
  414. package/docs/concepts/05-type-driven-design/03-applications/10-use-case.md +33 -40
  415. package/docs/concepts/05-type-driven-design/03-applications/20-ports.md +49 -0
  416. package/docs/concepts/05-type-driven-design/03-applications/index.md +1 -1
  417. package/docs/concepts/05-type-driven-design/04-infrastructure/10-implementation.md +27 -36
  418. package/docs/concepts/05-type-driven-design/04-infrastructure/index.md +1 -1
  419. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/index.ts +1 -0
  420. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/waitingListEntry.ts +17 -0
  421. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientGiveBackBook.ts +30 -12
  422. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientRentBook.ts +9 -8
  423. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/createBook.ts +7 -7
  424. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/index.ts +2 -0
  425. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/withdrawBook.ts +32 -0
  426. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientGiveBackBook.ts +72 -13
  427. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientRentBook.ts +37 -11
  428. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/createBook.ts +29 -17
  429. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/index.ts +1 -0
  430. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/withdrawBook.ts +37 -0
  431. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/create.ts +4 -5
  432. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/index.ts +2 -0
  433. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/rental.ts +9 -9
  434. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/reserve.ts +37 -0
  435. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/returnBook.ts +11 -9
  436. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/withdraw.ts +21 -0
  437. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/index.ts +42 -11
  438. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/giveBackBook.ts +11 -9
  439. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/rentBook.ts +10 -10
  440. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/index.ts +6 -29
  441. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/index.ts +1 -0
  442. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/cancel.ts +26 -0
  443. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/create.ts +33 -0
  444. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/index.ts +3 -0
  445. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/prepare.ts +23 -0
  446. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/index.ts +79 -0
  447. package/docs/concepts/05-type-driven-design/fixtures/business/domains/index.ts +1 -0
  448. package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/index.ts +1 -0
  449. package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/refineLinkBetweenClientAndBorrowedBook.ts +34 -0
  450. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/book.ts +1 -1
  451. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/index.ts +1 -0
  452. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/waitingListEntry.ts +19 -0
  453. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/clientRentBook.ts +3 -3
  454. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/bookExist.ts +2 -2
  455. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/clientExist.ts +2 -2
  456. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientGiveBackBook.ts +23 -14
  457. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientRentBook.ts +7 -12
  458. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/book.ts +1 -1
  459. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/index.ts +1 -0
  460. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/waitingListEntry.ts +17 -0
  461. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/useCases/index.ts +2 -1
  462. package/docs/concepts/05-type-driven-design/index.md +2 -2
  463. package/docs/concepts.llms.md +71 -25
  464. package/instructions/coding-conventions.md +2 -2
  465. package/package.json +17 -14
  466. package/skills/http-client/SKILL.md +1 -1
  467. package/skills/http-client/references/configuration.md +3 -1
  468. package/skills/http-client/references/examples/client-expectations.ts +11 -10
  469. package/skills/http-client/references/examples/client-streams.ts +2 -2
  470. package/skills/http-client/references/examples/external-client.ts +2 -2
  471. package/skills/http-client/references/responses.md +1 -1
  472. package/skills/http-server/SKILL.md +4 -9
  473. package/skills/http-server/references/examples/authentication.ts +2 -2
  474. package/skills/http-server/references/examples/inferred-client.ts +54 -0
  475. package/skills/http-server/references/examples/minimal-route.ts +2 -3
  476. package/skills/http-server/references/examples/protected-route.ts +4 -6
  477. package/skills/http-server/references/examples/rename-user-route.ts +4 -6
  478. package/skills/http-server/references/examples/user-checker.ts +2 -2
  479. package/skills/http-server/references/examples/user-route.ts +12 -5
  480. package/skills/http-server/references/initialization.md +1 -1
  481. package/skills/http-server/references/reusable-flows.md +3 -3
  482. package/skills/http-server/references/routes-and-floor.md +11 -3
  483. package/dist/bin/install/index.d.ts +0 -2
  484. package/docs/concepts/02-server/20-http/50-codegen.ts +0 -29
  485. package/skills/http-server/references/code-generation.md +0 -31
  486. package/skills/http-server/references/examples/generate-sdk.ts +0 -36
  487. /package/dist/bin/{install → installSkill}/skill.d.ts +0 -0
@@ -0,0 +1,32 @@
1
+ import * as DInvocation from "@duplojs/lang/invocation";
2
+ import * as DEither from "@duplojs/lang/either";
3
+ import { type Book, withdrawBook } from "../../domains";
4
+ import { BookRepositoryPort, WaitingListEntryRepositoryPort } from "../ports";
5
+
6
+ export const WithdrawBookUseCase = DInvocation.createReader(
7
+ {
8
+ BookRepositoryPort,
9
+ WaitingListEntryRepositoryPort,
10
+ },
11
+ ({
12
+ bookRepository,
13
+ waitingListEntryRepository,
14
+ }) => (
15
+ params: {
16
+ book: Book.Entity & (Book.AvailableFlag | Book.ReservedFlag);
17
+ },
18
+ ) => DEither.rightAsyncPipe(
19
+ params.book,
20
+ (book) => DInvocation.consumeWorkflow(
21
+ withdrawBook(book),
22
+ {
23
+ "commit/withdrawn-book": bookRepository.save,
24
+ "iterate/active-waiting-list-entries-for-withdrawn-book": {
25
+ getIterator: waitingListEntryRepository.findAllActiveByBook,
26
+ concurrency: 5,
27
+ },
28
+ "commit/cancelled-waiting-list-entry": waitingListEntryRepository.save,
29
+ },
30
+ ),
31
+ ),
32
+ );
@@ -1,15 +1,74 @@
1
1
  import * as DInvocation from "@duplojs/lang/invocation";
2
- import { ClientGiveBackBook, ReturnBookFact, type Client } from "../entities";
2
+ import { ClientGiveBackBook, ReturnBookFact, ReserveBookFact, PrepareWaitingListEntryFact } from "../entities";
3
3
  import * as DEither from "@duplojs/lang/either";
4
- import { type BookRepository } from "../repositories";
5
-
6
- export function clientGiveBackBook(
7
- client: Client.Entity & Client.HaveBookFlag,
8
- ) {
9
- return DInvocation.createResolver({
10
- client: DEither.unwrapRight(ClientGiveBackBook.run(client)),
11
- book: DEither.unwrapRight(ReturnBookFact.run(client)),
12
- })<{
13
- rankBookAvailability: BookRepository["rankAvailability"];
14
- }>();
15
- }
4
+ import { type BookRepository, type WaitingListEntryRepository } from "../repositories";
5
+ import * as DCommon from "@duplojs/lang/common";
6
+ import { type refineLinkBetweenClientAndBorrowedBook } from "../refinements";
7
+
8
+ export const clientGiveBackBook = DInvocation.createWorkflow(
9
+ ({ commit, resolve }) => function *(
10
+ clientWithBorrowedBook: DInvocation.GetEvidenceResult<
11
+ typeof refineLinkBetweenClientAndBorrowedBook,
12
+ "client-with-borrowed-book"
13
+ >,
14
+ ) {
15
+ const givenBackBook = DCommon.pipe(
16
+ clientWithBorrowedBook,
17
+ ReturnBookFact.run,
18
+ DEither.unwrapRight,
19
+ );
20
+
21
+ const clientGivenBackBook = DCommon.pipe(
22
+ clientWithBorrowedBook,
23
+ ClientGiveBackBook.run,
24
+ DEither.unwrapRight,
25
+ );
26
+
27
+ const selection: DInvocation.GetEvidenceResult<
28
+ WaitingListEntryRepository["findNextPendingForBook"],
29
+ "next-pending-waiting-list-entry" | "no-pending-waiting-list-entry"
30
+ > = yield *resolve("next-pending-waiting-list-entry", givenBackBook);
31
+
32
+ if (selection.waitingListEntry === null) {
33
+ yield *commit("book-and-client", {
34
+ givenBackBook,
35
+ clientGivenBackBook,
36
+ });
37
+
38
+ yield *commit("rank-availability", givenBackBook)
39
+ .withSignature<BookRepository["rankAvailability"]>();
40
+
41
+ return DEither.result("book-returned-without-waiting-list-entry", {
42
+ book: givenBackBook,
43
+ client: clientGivenBackBook,
44
+ });
45
+ }
46
+
47
+ const reservedBook = DCommon.pipe(
48
+ selection,
49
+ ReserveBookFact.run,
50
+ DEither.unwrapRight,
51
+ );
52
+
53
+ const readyWaitingListEntry = DCommon.pipe(
54
+ selection.waitingListEntry,
55
+ PrepareWaitingListEntryFact.run,
56
+ DEither.unwrapRight,
57
+ );
58
+
59
+ yield *commit("book-client-and-waiting-list-entry", {
60
+ reservedBook,
61
+ clientGivenBackBook,
62
+ readyWaitingListEntry,
63
+ });
64
+
65
+ yield *commit("rank-availability", reservedBook)
66
+ .withSignature<BookRepository["rankAvailability"]>();
67
+
68
+ return DEither.result("book-returned-and-reserved", {
69
+ book: reservedBook,
70
+ client: clientGivenBackBook,
71
+ waitingListEntry: readyWaitingListEntry,
72
+ });
73
+ },
74
+ );
@@ -2,15 +2,41 @@ import * as DInvocation from "@duplojs/lang/invocation";
2
2
  import { BookRentalFact, ClientRentBookFact, type Book, type Client } from "../entities";
3
3
  import * as DEither from "@duplojs/lang/either";
4
4
  import { type EmailRepository } from "../repositories/email";
5
+ import * as DCommon from "@duplojs/lang/common";
5
6
 
6
- export function clientRentBook(
7
- client: Client.Entity & Client.CanRentBookFlag,
8
- book: Book.Entity & Book.AvailableFlag,
9
- ) {
10
- return DInvocation.createResolver({
11
- client: DEither.unwrapRight(ClientRentBookFact.run(client, book)),
12
- book: DEither.unwrapRight(BookRentalFact.run(client, book)),
13
- })<{
14
- sendInformationalEmail: EmailRepository["sendRentInformationalEmail"];
15
- }>();
16
- }
7
+ export const clientRentBook = DInvocation.createWorkflow(
8
+ ({ commit }) => function *(
9
+ params: {
10
+ client: Client.Entity & Client.CanRentBookFlag;
11
+ book: Book.Entity & Book.AvailableFlag;
12
+ },
13
+ ) {
14
+ const clientWithBorrowedBook = DCommon.pipe(
15
+ params,
16
+ ClientRentBookFact.run,
17
+ DEither.unwrapRight,
18
+ );
19
+
20
+ const borrowedBook = DCommon.pipe(
21
+ params,
22
+ BookRentalFact.run,
23
+ DEither.unwrapRight,
24
+ );
25
+
26
+ yield *commit("book-and-client", {
27
+ borrowedBook,
28
+ clientWithBorrowedBook,
29
+ });
30
+
31
+ yield *commit("send-informational-email", {
32
+ book: borrowedBook,
33
+ client: clientWithBorrowedBook,
34
+ })
35
+ .withSignature<EmailRepository["sendRentInformationalEmail"]>();
36
+
37
+ return {
38
+ book: borrowedBook,
39
+ client: clientWithBorrowedBook,
40
+ };
41
+ },
42
+ );
@@ -1,21 +1,33 @@
1
- import type * as DInvocation from "@duplojs/lang/invocation";
1
+ import * as DInvocation from "@duplojs/lang/invocation";
2
2
  import { type BookRepository } from "../repositories";
3
3
  import { CreateBookFact } from "../entities";
4
+ import * as DCommon from "@duplojs/lang/common";
5
+ import * as DEither from "@duplojs/lang/either";
4
6
 
5
- export function createBook(
6
- params: {
7
- id: DInvocation.GetEvidenceResult<
8
- BookRepository["generateId"],
9
- "generated"
10
- >;
11
- title: DInvocation.GetEvidenceResult<
12
- BookRepository["titleIsAlreadyRegistered"],
13
- "title-not-registered"
14
- >;
7
+ export const createBook = DInvocation.createWorkflow(
8
+ ({ commit }) => function *(
9
+ params: {
10
+ id: DInvocation.GetEvidenceResult<
11
+ BookRepository["generateId"],
12
+ "generated"
13
+ >;
14
+ title: DInvocation.GetEvidenceResult<
15
+ BookRepository["titleIsAlreadyRegistered"],
16
+ "title-not-registered"
17
+ >;
18
+ },
19
+ ) {
20
+ const createdBook = DCommon.pipe(
21
+ {
22
+ id: params.id,
23
+ title: params.title,
24
+ },
25
+ CreateBookFact.run,
26
+ DEither.unwrapRight,
27
+ );
28
+
29
+ yield *commit("book", createdBook);
30
+
31
+ return createdBook;
15
32
  },
16
- ) {
17
- return CreateBookFact.run({
18
- id: params.id,
19
- title: params.title,
20
- });
21
- }
33
+ );
@@ -1,3 +1,4 @@
1
1
  export * from "./clientGiveBackBook";
2
2
  export * from "./clientRentBook";
3
3
  export * from "./createBook";
4
+ export * from "./withdrawBook";
@@ -0,0 +1,37 @@
1
+ import * as DInvocation from "@duplojs/lang/invocation";
2
+ import * as DCommon from "@duplojs/lang/common";
3
+ import * as DEither from "@duplojs/lang/either";
4
+ import { type Book, WithdrawBookFact, CancelWaitingListEntryFact } from "../entities";
5
+ import { type WaitingListEntryRepository } from "../repositories";
6
+
7
+ export const withdrawBook = DInvocation.createWorkflow(
8
+ ({ commit, iterate }) => function *(book: Book.Entity & (Book.AvailableFlag | Book.ReservedFlag)) {
9
+ const withdrawnBook = DCommon.pipe(
10
+ book,
11
+ WithdrawBookFact.run,
12
+ DEither.unwrapRight,
13
+ );
14
+
15
+ yield *commit("withdrawn-book", withdrawnBook);
16
+
17
+ yield *iterate("active-waiting-list-entries-for-withdrawn-book", withdrawnBook)(function *(
18
+ linkedWaitingListEntry: DInvocation.GetEvidenceResult<
19
+ WaitingListEntryRepository["findAllActiveByBook"],
20
+ "active-waiting-list-entry-for-withdrawn-book"
21
+ >,
22
+ ) {
23
+ const cancelledWaitingListEntry = DCommon.pipe(
24
+ {
25
+ waitingListEntry: linkedWaitingListEntry.waitingListEntry,
26
+ reason: "book-withdrawn",
27
+ },
28
+ CancelWaitingListEntryFact.run,
29
+ DEither.unwrapRight,
30
+ );
31
+
32
+ yield *commit("cancelled-waiting-list-entry", cancelledWaitingListEntry);
33
+ });
34
+
35
+ return withdrawnBook;
36
+ },
37
+ );
@@ -2,15 +2,13 @@ import * as DModeling from "@duplojs/lang/modeling";
2
2
  import { Book } from "..";
3
3
  import * as DCommon from "@duplojs/lang/common";
4
4
 
5
- export type CreateBookFact = DModeling.Fact<
5
+ export const CreateBookFact = DModeling.createFact<
6
6
  "CreateBook",
7
7
  {
8
8
  id: Book.Id;
9
+ title: Book.Title;
9
10
  state: Book.AvailableState;
10
- }
11
- >;
12
- export const CreateBookFact = DModeling.createFact<
13
- CreateBookFact,
11
+ },
14
12
  typeof Book.Entity
15
13
  >("CreateBook")(
16
14
  ({ applyFact }) => (
@@ -32,3 +30,4 @@ export const CreateBookFact = DModeling.createFact<
32
30
  );
33
31
  },
34
32
  );
33
+ export type CreateBookFact = DModeling.GetFact<typeof CreateBookFact>;
@@ -1,3 +1,5 @@
1
1
  export * from "./create";
2
2
  export * from "./rental";
3
3
  export * from "./returnBook";
4
+ export * from "./reserve";
5
+ export * from "./withdraw";
@@ -3,24 +3,23 @@ import { type Client } from "../../client";
3
3
  import { Book } from "..";
4
4
  import * as DCommon from "@duplojs/lang/common";
5
5
 
6
- export type BookRentalFact = DModeling.Fact<
7
- "BookRental",
8
- Book.BorrowedState
9
- >;
10
6
  export const BookRentalFact = DModeling.createFact<
11
- BookRentalFact,
7
+ "BookRental",
8
+ Book.BorrowedState,
12
9
  typeof Book.Entity
13
10
  >("BookRental")(
14
11
  ({ applyFact }) => (
15
- client: Client.Entity & Client.CanRentBookFlag,
16
- book: Book.Entity & Book.AvailableFlag,
12
+ params: {
13
+ client: Client.Entity & Client.CanRentBookFlag;
14
+ book: Book.Entity & Book.AvailableFlag;
15
+ },
17
16
  ) => {
18
17
  const borrowedState = Book.BorrowedState.new({
19
- currentBorrowerId: client.id,
18
+ currentBorrowerId: params.client.id,
20
19
  });
21
20
 
22
21
  return DCommon.pipe(
23
- book,
22
+ params.book,
24
23
  Book.Entity.update({
25
24
  state: borrowedState,
26
25
  }),
@@ -29,3 +28,4 @@ export const BookRentalFact = DModeling.createFact<
29
28
  );
30
29
  },
31
30
  );
31
+ export type BookRentalFact = DModeling.GetFact<typeof BookRentalFact>;
@@ -0,0 +1,37 @@
1
+ import * as DModeling from "@duplojs/lang/modeling";
2
+ import * as DCommon from "@duplojs/lang/common";
3
+ import { Book } from "..";
4
+ import { type Client } from "../../client";
5
+ import { type WaitingListEntry } from "../../waitingListEntry";
6
+
7
+ export const ReserveBookFact = DModeling.createFact<
8
+ "ReserveBook",
9
+ {
10
+ waitingListEntryId: WaitingListEntry.Id;
11
+ clientId: Client.Id;
12
+ },
13
+ typeof Book.Entity
14
+ >("ReserveBook")(
15
+ ({ applyFact }) => (
16
+ params: {
17
+ book: Book.Entity & Book.AvailableFlag;
18
+ waitingListEntry: WaitingListEntry.Entity & WaitingListEntry.PendingFlag;
19
+ },
20
+ ) => {
21
+ const payload = {
22
+ waitingListEntryId: params.waitingListEntry.id,
23
+ clientId: params.waitingListEntry.clientId,
24
+ };
25
+ const state = Book.ReservedState.new({
26
+ waitingListEntryId: payload.waitingListEntryId,
27
+ });
28
+
29
+ return DCommon.pipe(
30
+ params.book,
31
+ Book.Entity.update({ state }),
32
+ Book.ReservedFlag.append(state),
33
+ applyFact(payload),
34
+ );
35
+ },
36
+ );
37
+ export type ReserveBookFact = DModeling.GetFact<typeof ReserveBookFact>;
@@ -1,21 +1,22 @@
1
1
  import * as DModeling from "@duplojs/lang/modeling";
2
- import { Client } from "../../client";
2
+ import { type Client } from "../../client";
3
3
  import { Book } from "..";
4
4
  import * as DCommon from "@duplojs/lang/common";
5
5
 
6
- export type ReturnBookFact = DModeling.Fact<
7
- "ReturnBook",
8
- Client.Id
9
- >;
10
6
  export const ReturnBookFact = DModeling.createFact<
11
- ReturnBookFact,
7
+ "ReturnBook",
8
+ Client.Id,
12
9
  typeof Book.Entity
13
10
  >("ReturnBook")(
14
11
  ({ applyFact }) => (
15
- client: Client.Entity & Client.HaveBookFlag,
12
+ {
13
+ client,
14
+ book,
15
+ }: {
16
+ client: Client.Entity;
17
+ book: Book.Entity & Book.BorrowedFlag;
18
+ },
16
19
  ) => {
17
- const book = Client.HaveBookFlag.getPayload(client);
18
-
19
20
  const availableState = Book.AvailableState.new({});
20
21
 
21
22
  return DCommon.pipe(
@@ -28,3 +29,4 @@ export const ReturnBookFact = DModeling.createFact<
28
29
  );
29
30
  },
30
31
  );
32
+ export type ReturnBookFact = DModeling.GetFact<typeof ReturnBookFact>;
@@ -0,0 +1,21 @@
1
+ import * as DModeling from "@duplojs/lang/modeling";
2
+ import * as DCommon from "@duplojs/lang/common";
3
+ import { Book } from "..";
4
+
5
+ export const WithdrawBookFact = DModeling.createFact<
6
+ "WithdrawBook",
7
+ Book.WithdrawnState,
8
+ typeof Book.Entity
9
+ >("WithdrawBook")(
10
+ ({ applyFact }) => (book: Book.Entity & (Book.AvailableFlag | Book.ReservedFlag)) => {
11
+ const state = Book.WithdrawnState.new({});
12
+
13
+ return DCommon.pipe(
14
+ book,
15
+ Book.Entity.update({ state }),
16
+ Book.WithdrawnFlag.append(state),
17
+ applyFact(state),
18
+ );
19
+ },
20
+ );
21
+ export type WithdrawBookFact = DModeling.GetFact<typeof WithdrawBookFact>;
@@ -3,7 +3,8 @@ import * as DModeling from "@duplojs/lang/modeling";
3
3
  import { Client } from "../client";
4
4
  import * as DPattern from "@duplojs/lang/pattern";
5
5
  import * as DEither from "@duplojs/lang/either";
6
- import { type CreateBookFact, type BookRentalFact, type ReturnBookFact } from "./facts";
6
+ import { type CreateBookFact, type BookRentalFact, type ReturnBookFact, type ReserveBookFact, type WithdrawBookFact } from "./facts";
7
+ import { WaitingListEntry } from "../waitingListEntry";
7
8
 
8
9
  export * from "./facts";
9
10
 
@@ -33,12 +34,22 @@ export namespace Book {
33
34
  );
34
35
  export type BorrowedState = DDataStructure.StructureValue<typeof BorrowedState>;
35
36
 
37
+ export const ReservedState = DModeling.createTaggedObject("ReservedState", {
38
+ waitingListEntryId: WaitingListEntry.Id,
39
+ });
40
+ export type ReservedState = DDataStructure.StructureValue<typeof ReservedState>;
41
+
42
+ export const WithdrawnState = DModeling.createTaggedObject("WithdrawnState", {});
43
+ export type WithdrawnState = DDataStructure.StructureValue<typeof WithdrawnState>;
44
+
36
45
  export const Entity = namespace.createEntity(() => ({
37
46
  id: Id,
38
47
  title: Title,
39
48
  state: DDataStructure.union([
40
49
  AvailableState,
41
50
  BorrowedState,
51
+ ReservedState,
52
+ WithdrawnState,
42
53
  ]),
43
54
  }));
44
55
  export type Entity = DDataStructure.StructureValue<typeof Entity>;
@@ -47,25 +58,37 @@ export namespace Book {
47
58
  | CreateBookFact
48
59
  | BookRentalFact
49
60
  | ReturnBookFact
61
+ | ReserveBookFact
62
+ | WithdrawBookFact
50
63
  );
51
64
 
52
- export type AvailableFlag = DModeling.Flag<
53
- "Available",
54
- AvailableState
55
- >;
56
65
  export const AvailableFlag = DModeling.createFlag<
57
- AvailableFlag,
66
+ "Available",
67
+ AvailableState,
58
68
  typeof Entity
59
69
  >("Available");
70
+ export type AvailableFlag = DModeling.GetFlag<typeof AvailableFlag>;
60
71
 
61
- export type BorrowedFlag = DModeling.Flag<
62
- "Borrowed",
63
- BorrowedState
64
- >;
65
72
  export const BorrowedFlag = DModeling.createFlag<
66
- BorrowedFlag,
73
+ "Borrowed",
74
+ BorrowedState,
67
75
  typeof Entity
68
76
  >("Borrowed");
77
+ export type BorrowedFlag = DModeling.GetFlag<typeof BorrowedFlag>;
78
+
79
+ export const ReservedFlag = DModeling.createFlag<
80
+ "Reserved",
81
+ ReservedState,
82
+ typeof Entity
83
+ >("Reserved");
84
+ export type ReservedFlag = DModeling.GetFlag<typeof ReservedFlag>;
85
+
86
+ export const WithdrawnFlag = DModeling.createFlag<
87
+ "Withdrawn",
88
+ WithdrawnState,
89
+ typeof Entity
90
+ >("Withdrawn");
91
+ export type WithdrawnFlag = DModeling.GetFlag<typeof WithdrawnFlag>;
69
92
 
70
93
  export function refineState<
71
94
  GenericEntity extends Entity,
@@ -81,6 +104,14 @@ export namespace Book {
81
104
  "BorrowedState",
82
105
  BorrowedFlag.append(entity, state),
83
106
  ),
107
+ ReservedState: (state) => DEither.result(
108
+ "ReservedState",
109
+ ReservedFlag.append(entity, state),
110
+ ),
111
+ WithdrawnState: (state) => DEither.result(
112
+ "WithdrawnState",
113
+ WithdrawnFlag.append(entity, state),
114
+ ),
84
115
  },
85
116
  );
86
117
  }
@@ -4,22 +4,23 @@ import { type Book } from "../../book";
4
4
  import * as DArray from "@duplojs/lang/array";
5
5
  import * as DCommon from "@duplojs/lang/common";
6
6
 
7
- export type ClientGiveBackBook = DModeling.Fact<
8
- "ClientGiveBackBook",
9
- Book.Entity
10
- >;
11
7
  export const ClientGiveBackBook = DModeling.createFact<
12
- ClientGiveBackBook,
8
+ "ClientGiveBackBook",
9
+ Book.Entity,
13
10
  typeof Client.Entity
14
11
  >("ClientGiveBackBook")(
15
12
  ({ applyFact }) => (
16
- client: Client.Entity & Client.HaveBookFlag,
13
+ {
14
+ client,
15
+ book,
16
+ }: {
17
+ client: Client.Entity;
18
+ book: Book.Entity & Book.BorrowedFlag;
19
+ },
17
20
  ) => {
18
- const book = Client.HaveBookFlag.getPayload(client);
19
-
20
21
  const borrowedBooks = DArray.filter(
21
22
  client.borrowedBooks,
22
- (bookId) => bookId === book.id,
23
+ (bookId) => bookId !== book.id,
23
24
  );
24
25
 
25
26
  return DCommon.pipe(
@@ -31,3 +32,4 @@ export const ClientGiveBackBook = DModeling.createFact<
31
32
  );
32
33
  },
33
34
  );
35
+ export type ClientGiveBackBook = DModeling.GetFact<typeof ClientGiveBackBook>;
@@ -4,25 +4,24 @@ import { type Book } from "../../book";
4
4
  import * as DArray from "@duplojs/lang/array";
5
5
  import * as DCommon from "@duplojs/lang/common";
6
6
 
7
- export type ClientRentBookFact = DModeling.Fact<
8
- "ClientRentBookFact",
9
- Client.Entity["borrowedBooks"]
10
- >;
11
7
  export const ClientRentBookFact = DModeling.createFact<
12
- ClientRentBookFact,
8
+ "ClientRentBookFact",
9
+ Client.Entity["borrowedBooks"],
13
10
  typeof Client.Entity
14
11
  >("ClientRentBookFact")(
15
12
  ({ applyFact }) => (
16
- client: Client.Entity & Client.CanRentBookFlag,
17
- book: Book.Entity & Book.AvailableFlag,
13
+ params: {
14
+ client: Client.Entity & Client.CanRentBookFlag;
15
+ book: Book.Entity & Book.AvailableFlag;
16
+ },
18
17
  ) => {
19
18
  const borrowedBooks = DArray.push(
20
- Client.CanRentBookFlag.getPayload(client),
21
- book.id,
19
+ Client.CanRentBookFlag.getPayload(params.client),
20
+ params.book.id,
22
21
  );
23
22
 
24
23
  return DCommon.pipe(
25
- client,
24
+ params.client,
26
25
  Client.Entity.update({
27
26
  borrowedBooks,
28
27
  }),
@@ -30,3 +29,4 @@ export const ClientRentBookFact = DModeling.createFact<
30
29
  );
31
30
  },
32
31
  );
32
+ export type ClientRentBookFact = DModeling.GetFact<typeof ClientRentBookFact>;
@@ -27,23 +27,19 @@ export namespace Client {
27
27
  | ClientGiveBackBook
28
28
  );
29
29
 
30
- export type CanRentBookFlag = DModeling.Flag<
31
- "CanRentBook",
32
- readonly Book.Id[] & DArray.MaxElements<4>
33
- >;
34
30
  export const CanRentBookFlag = DModeling.createFlag<
35
- CanRentBookFlag,
31
+ "CanRentBook",
32
+ readonly Book.Id[] & DArray.MaxElements<4>,
36
33
  typeof Entity
37
34
  >("CanRentBook");
35
+ export type CanRentBookFlag = DModeling.GetFlag<typeof CanRentBookFlag>;
38
36
 
39
- export type NoBookRentalSlotsAvailableFlag = DModeling.Flag<
40
- "NoBookRentalSlotsAvailable",
41
- undefined
42
- >;
43
37
  export const NoBookRentalSlotsAvailableFlag = DModeling.createFlag<
44
- NoBookRentalSlotsAvailableFlag,
38
+ "NoBookRentalSlotsAvailable",
39
+ undefined,
45
40
  typeof Entity
46
41
  >("NoBookRentalSlotsAvailable");
42
+ export type NoBookRentalSlotsAvailableFlag = DModeling.GetFlag<typeof NoBookRentalSlotsAvailableFlag>;
47
43
 
48
44
  export function canRentBook<
49
45
  GenericEntity extends Entity,
@@ -60,23 +56,4 @@ export namespace Client {
60
56
  );
61
57
  }
62
58
  }
63
-
64
- export type HaveBookFlag = DModeling.Flag<
65
- "HaveBook",
66
- Book.Entity
67
- >;
68
- export const HaveBookFlag = DModeling.createFlag<
69
- HaveBookFlag,
70
- typeof Entity
71
- >("HaveBook");
72
- export function clientHaveBook(client: Entity, book: Book.Entity) {
73
- if (DArray.includes(client.borrowedBooks, book.id)) {
74
- return DEither.right(
75
- "client-have-book",
76
- HaveBookFlag.append(client, book),
77
- );
78
- }
79
-
80
- return DEither.left("client-not-have-book");
81
- }
82
59
  }
@@ -1,2 +1,3 @@
1
1
  export * from "./book";
2
2
  export * from "./client";
3
+ export * from "./waitingListEntry";