@duplojs/agents-kit 0.0.0-stage → 0.1.0-beta.3

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 (551) hide show
  1. package/README.md +73 -2
  2. package/dist/bin/index.d.ts +2 -0
  3. package/dist/bin/index.mjs +7 -0
  4. package/dist/bin/install/index.d.ts +2 -0
  5. package/dist/bin/install/index.mjs +25 -0
  6. package/dist/bin/install/skill.d.ts +28 -0
  7. package/dist/bin/install/skill.mjs +58 -0
  8. package/dist/bin/packagePath.d.ts +2 -0
  9. package/dist/bin/packagePath.mjs +12 -0
  10. package/dist/bin/setup/index.d.ts +12 -0
  11. package/dist/bin/setup/index.mjs +33 -0
  12. package/dist/bin/setup/instructions.d.ts +8 -0
  13. package/dist/bin/setup/instructions.mjs +27 -0
  14. package/dist/index.cjs +1 -0
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.mjs +0 -0
  17. package/docs/API/10-lang/10-array/10-at.ts +65 -0
  18. package/docs/API/10-lang/10-array/10-chunk.ts +42 -0
  19. package/docs/API/10-lang/10-array/10-coalescing.ts +19 -0
  20. package/docs/API/10-lang/10-array/10-concat.ts +34 -0
  21. package/docs/API/10-lang/10-array/10-copyWithin.ts +34 -0
  22. package/docs/API/10-lang/10-array/10-every.ts +25 -0
  23. package/docs/API/10-lang/10-array/10-fill.ts +34 -0
  24. package/docs/API/10-lang/10-array/10-fillAll.ts +34 -0
  25. package/docs/API/10-lang/10-array/10-filter.ts +43 -0
  26. package/docs/API/10-lang/10-array/10-find.ts +33 -0
  27. package/docs/API/10-lang/10-array/10-findAndReplace.ts +35 -0
  28. package/docs/API/10-lang/10-array/10-findAndSpliceDelete.ts +35 -0
  29. package/docs/API/10-lang/10-array/10-findAndSpliceInsert.ts +35 -0
  30. package/docs/API/10-lang/10-array/10-findAndSpliceReplace.ts +24 -0
  31. package/docs/API/10-lang/10-array/10-findDuplicates.ts +19 -0
  32. package/docs/API/10-lang/10-array/10-findIndex.ts +25 -0
  33. package/docs/API/10-lang/10-array/10-findLast.ts +33 -0
  34. package/docs/API/10-lang/10-array/10-findLastIndex.ts +25 -0
  35. package/docs/API/10-lang/10-array/10-first.ts +21 -0
  36. package/docs/API/10-lang/10-array/10-flat.ts +22 -0
  37. package/docs/API/10-lang/10-array/10-flatMap.ts +24 -0
  38. package/docs/API/10-lang/10-array/10-from.ts +25 -0
  39. package/docs/API/10-lang/10-array/10-group.ts +27 -0
  40. package/docs/API/10-lang/10-array/10-groupOutput.ts +30 -0
  41. package/docs/API/10-lang/10-array/10-includes.ts +24 -0
  42. package/docs/API/10-lang/10-array/10-indexOf.ts +24 -0
  43. package/docs/API/10-lang/10-array/10-insert.ts +34 -0
  44. package/docs/API/10-lang/10-array/10-is.ts +15 -0
  45. package/docs/API/10-lang/10-array/10-isLastIndex.ts +24 -0
  46. package/docs/API/10-lang/10-array/10-last.ts +21 -0
  47. package/docs/API/10-lang/10-array/10-lastIndexOf.ts +24 -0
  48. package/docs/API/10-lang/10-array/10-length.ts +28 -0
  49. package/docs/API/10-lang/10-array/10-lengthEqual.ts +39 -0
  50. package/docs/API/10-lang/10-array/10-map.ts +34 -0
  51. package/docs/API/10-lang/10-array/10-maxElements.ts +44 -0
  52. package/docs/API/10-lang/10-array/10-minElements.ts +44 -0
  53. package/docs/API/10-lang/10-array/10-notIncludes.ts +24 -0
  54. package/docs/API/10-lang/10-array/10-pop.ts +23 -0
  55. package/docs/API/10-lang/10-array/10-prepend.ts +34 -0
  56. package/docs/API/10-lang/10-array/10-push.ts +34 -0
  57. package/docs/API/10-lang/10-array/10-reduce.ts +28 -0
  58. package/docs/API/10-lang/10-array/10-reduceFrom.ts +16 -0
  59. package/docs/API/10-lang/10-array/10-reduceRight.ts +28 -0
  60. package/docs/API/10-lang/10-array/10-reverse.ts +25 -0
  61. package/docs/API/10-lang/10-array/10-select.ts +26 -0
  62. package/docs/API/10-lang/10-array/10-set.ts +24 -0
  63. package/docs/API/10-lang/10-array/10-shift.ts +23 -0
  64. package/docs/API/10-lang/10-array/10-slice.ts +24 -0
  65. package/docs/API/10-lang/10-array/10-some.ts +25 -0
  66. package/docs/API/10-lang/10-array/10-sort.ts +34 -0
  67. package/docs/API/10-lang/10-array/10-spliceDelete.ts +34 -0
  68. package/docs/API/10-lang/10-array/10-spliceInsert.ts +34 -0
  69. package/docs/API/10-lang/10-array/10-spliceReplace.ts +24 -0
  70. package/docs/API/10-lang/10-array/10-unshift.ts +34 -0
  71. package/docs/API/10-lang/10-array/index.llms.md +220 -0
  72. package/docs/API/10-lang/10-array/index.md +3 -0
  73. package/docs/API/10-lang/10-chrono/10-addDays.ts +25 -0
  74. package/docs/API/10-lang/10-chrono/10-addHours.ts +25 -0
  75. package/docs/API/10-lang/10-chrono/10-addMilliseconds.ts +25 -0
  76. package/docs/API/10-lang/10-chrono/10-addMinutes.ts +25 -0
  77. package/docs/API/10-lang/10-chrono/10-addMonths.ts +25 -0
  78. package/docs/API/10-lang/10-chrono/10-addSeconds.ts +25 -0
  79. package/docs/API/10-lang/10-chrono/10-addTime.ts +38 -0
  80. package/docs/API/10-lang/10-chrono/10-addWeeks.ts +25 -0
  81. package/docs/API/10-lang/10-chrono/10-addYears.ts +25 -0
  82. package/docs/API/10-lang/10-chrono/10-applyTimezone.ts +29 -0
  83. package/docs/API/10-lang/10-chrono/10-betweenThanDate.ts +27 -0
  84. package/docs/API/10-lang/10-chrono/10-betweenThanOrEqualDate.ts +27 -0
  85. package/docs/API/10-lang/10-chrono/10-betweenThanOrEqualTime.ts +27 -0
  86. package/docs/API/10-lang/10-chrono/10-betweenThanTime.ts +27 -0
  87. package/docs/API/10-lang/10-chrono/10-closestTo.ts +48 -0
  88. package/docs/API/10-lang/10-chrono/10-computeTime.ts +35 -0
  89. package/docs/API/10-lang/10-chrono/10-createDate.ts +122 -0
  90. package/docs/API/10-lang/10-chrono/10-createDateOrThrow.ts +39 -0
  91. package/docs/API/10-lang/10-chrono/10-createTime.ts +86 -0
  92. package/docs/API/10-lang/10-chrono/10-createTimeOrThrow.ts +28 -0
  93. package/docs/API/10-lang/10-chrono/10-eachDate.ts +67 -0
  94. package/docs/API/10-lang/10-chrono/10-equalDate.ts +26 -0
  95. package/docs/API/10-lang/10-chrono/10-equalTime.ts +26 -0
  96. package/docs/API/10-lang/10-chrono/10-formatDate.ts +43 -0
  97. package/docs/API/10-lang/10-chrono/10-formatTime.ts +37 -0
  98. package/docs/API/10-lang/10-chrono/10-getDayOfMonth.ts +37 -0
  99. package/docs/API/10-lang/10-chrono/10-getDayOfWeek.ts +30 -0
  100. package/docs/API/10-lang/10-chrono/10-getDayOfYear.ts +28 -0
  101. package/docs/API/10-lang/10-chrono/10-getDifference.ts +29 -0
  102. package/docs/API/10-lang/10-chrono/10-getFirstDayOfMonth.ts +24 -0
  103. package/docs/API/10-lang/10-chrono/10-getFirstDayOfWeek.ts +24 -0
  104. package/docs/API/10-lang/10-chrono/10-getHour.ts +28 -0
  105. package/docs/API/10-lang/10-chrono/10-getLastDayOfMonth.ts +24 -0
  106. package/docs/API/10-lang/10-chrono/10-getLastDayOfWeek.ts +24 -0
  107. package/docs/API/10-lang/10-chrono/10-getMilliseconds.ts +24 -0
  108. package/docs/API/10-lang/10-chrono/10-getMinute.ts +27 -0
  109. package/docs/API/10-lang/10-chrono/10-getMonth.ts +27 -0
  110. package/docs/API/10-lang/10-chrono/10-getSecond.ts +27 -0
  111. package/docs/API/10-lang/10-chrono/10-getTimezoneOffset.ts +28 -0
  112. package/docs/API/10-lang/10-chrono/10-getWeekOfYear.ts +27 -0
  113. package/docs/API/10-lang/10-chrono/10-getYear.ts +27 -0
  114. package/docs/API/10-lang/10-chrono/10-greaterThanDate.ts +26 -0
  115. package/docs/API/10-lang/10-chrono/10-greaterThanOrEqualDate.ts +26 -0
  116. package/docs/API/10-lang/10-chrono/10-greaterThanOrEqualTime.ts +26 -0
  117. package/docs/API/10-lang/10-chrono/10-greaterThanTime.ts +26 -0
  118. package/docs/API/10-lang/10-chrono/10-isDate.ts +23 -0
  119. package/docs/API/10-lang/10-chrono/10-isSafeTimeValue.ts +19 -0
  120. package/docs/API/10-lang/10-chrono/10-isSafeTimestamp.ts +19 -0
  121. package/docs/API/10-lang/10-chrono/10-isSerializedTheDate.ts +26 -0
  122. package/docs/API/10-lang/10-chrono/10-isSerializedTheTime.ts +26 -0
  123. package/docs/API/10-lang/10-chrono/10-isTime.ts +23 -0
  124. package/docs/API/10-lang/10-chrono/10-lessThanDate.ts +26 -0
  125. package/docs/API/10-lang/10-chrono/10-lessThanOrEqualDate.ts +26 -0
  126. package/docs/API/10-lang/10-chrono/10-lessThanOrEqualTime.ts +26 -0
  127. package/docs/API/10-lang/10-chrono/10-lessThanTime.ts +26 -0
  128. package/docs/API/10-lang/10-chrono/10-makeSafeTimeValue.ts +19 -0
  129. package/docs/API/10-lang/10-chrono/10-makeSafeTimestamp.ts +19 -0
  130. package/docs/API/10-lang/10-chrono/10-maxDate.ts +23 -0
  131. package/docs/API/10-lang/10-chrono/10-maxTime.ts +23 -0
  132. package/docs/API/10-lang/10-chrono/10-minDate.ts +23 -0
  133. package/docs/API/10-lang/10-chrono/10-minTime.ts +23 -0
  134. package/docs/API/10-lang/10-chrono/10-now.ts +13 -0
  135. package/docs/API/10-lang/10-chrono/10-round.ts +41 -0
  136. package/docs/API/10-lang/10-chrono/10-serialize.ts +23 -0
  137. package/docs/API/10-lang/10-chrono/10-sortDates.ts +32 -0
  138. package/docs/API/10-lang/10-chrono/10-sortTimes.ts +31 -0
  139. package/docs/API/10-lang/10-chrono/10-subtractDays.ts +25 -0
  140. package/docs/API/10-lang/10-chrono/10-subtractHours.ts +25 -0
  141. package/docs/API/10-lang/10-chrono/10-subtractMilliseconds.ts +25 -0
  142. package/docs/API/10-lang/10-chrono/10-subtractMinutes.ts +25 -0
  143. package/docs/API/10-lang/10-chrono/10-subtractMonths.ts +25 -0
  144. package/docs/API/10-lang/10-chrono/10-subtractSeconds.ts +25 -0
  145. package/docs/API/10-lang/10-chrono/10-subtractTime.ts +38 -0
  146. package/docs/API/10-lang/10-chrono/10-subtractWeeks.ts +25 -0
  147. package/docs/API/10-lang/10-chrono/10-subtractYears.ts +25 -0
  148. package/docs/API/10-lang/10-chrono/10-toDateISOString.ts +17 -0
  149. package/docs/API/10-lang/10-chrono/10-toNative.ts +25 -0
  150. package/docs/API/10-lang/10-chrono/10-toTimeValue.ts +17 -0
  151. package/docs/API/10-lang/10-chrono/10-toTimestamp.ts +17 -0
  152. package/docs/API/10-lang/10-chrono/10-today.ts +13 -0
  153. package/docs/API/10-lang/10-chrono/10-tomorrow.ts +13 -0
  154. package/docs/API/10-lang/10-chrono/10-yesterday.ts +13 -0
  155. package/docs/API/10-lang/10-chrono/index.llms.md +332 -0
  156. package/docs/API/10-lang/10-chrono/index.md +3 -0
  157. package/docs/API/10-lang/10-common/10-and.ts +45 -0
  158. package/docs/API/10-lang/10-common/10-asserts.ts +13 -0
  159. package/docs/API/10-lang/10-common/10-asyncInnerPipe.ts +23 -0
  160. package/docs/API/10-lang/10-common/10-asyncLoop.ts +25 -0
  161. package/docs/API/10-lang/10-common/10-asyncPipe.ts +21 -0
  162. package/docs/API/10-lang/10-common/10-callThen.ts +22 -0
  163. package/docs/API/10-lang/10-common/10-cast.ts +16 -0
  164. package/docs/API/10-lang/10-common/10-clone.ts +12 -0
  165. package/docs/API/10-lang/10-common/10-createAsyncRetry.ts +34 -0
  166. package/docs/API/10-lang/10-common/10-createBuilder.ts +19 -0
  167. package/docs/API/10-lang/10-common/10-createEnum.ts +25 -0
  168. package/docs/API/10-lang/10-common/10-createExternalPromise.ts +13 -0
  169. package/docs/API/10-lang/10-common/10-createFormData.ts +16 -0
  170. package/docs/API/10-lang/10-common/10-createInterpolation.ts +12 -0
  171. package/docs/API/10-lang/10-common/10-createQueue.ts +16 -0
  172. package/docs/API/10-lang/10-common/10-createTransformer.ts +16 -0
  173. package/docs/API/10-lang/10-common/10-detachObjectMethod.ts +20 -0
  174. package/docs/API/10-lang/10-common/10-equal.ts +31 -0
  175. package/docs/API/10-lang/10-common/10-escapeRegExp.ts +11 -0
  176. package/docs/API/10-lang/10-common/10-falsy.ts +12 -0
  177. package/docs/API/10-lang/10-common/10-forward.ts +11 -0
  178. package/docs/API/10-lang/10-common/10-forwardAsserts.ts +17 -0
  179. package/docs/API/10-lang/10-common/10-forwardLog.ts +11 -0
  180. package/docs/API/10-lang/10-common/10-infer.ts +16 -0
  181. package/docs/API/10-lang/10-common/10-innerPipe.ts +23 -0
  182. package/docs/API/10-lang/10-common/10-instanceOf.ts +23 -0
  183. package/docs/API/10-lang/10-common/10-isType.ts +29 -0
  184. package/docs/API/10-lang/10-common/10-justExec.ts +28 -0
  185. package/docs/API/10-lang/10-common/10-justReturn.ts +19 -0
  186. package/docs/API/10-lang/10-common/10-loop.ts +20 -0
  187. package/docs/API/10-lang/10-common/10-memo.ts +12 -0
  188. package/docs/API/10-lang/10-common/10-memoObject.ts +11 -0
  189. package/docs/API/10-lang/10-common/10-memoPromise.ts +16 -0
  190. package/docs/API/10-lang/10-common/10-or.ts +29 -0
  191. package/docs/API/10-lang/10-common/10-pipe.ts +21 -0
  192. package/docs/API/10-lang/10-common/10-pipeCall.ts +20 -0
  193. package/docs/API/10-lang/10-common/10-prepareAsyncPipe.ts +20 -0
  194. package/docs/API/10-lang/10-common/10-preparePipe.ts +20 -0
  195. package/docs/API/10-lang/10-common/10-promiseAll.ts +16 -0
  196. package/docs/API/10-lang/10-common/10-promiseObject.ts +22 -0
  197. package/docs/API/10-lang/10-common/10-removeConstraint.ts +13 -0
  198. package/docs/API/10-lang/10-common/10-shameOnYou.ts +20 -0
  199. package/docs/API/10-lang/10-common/10-simpleClone.ts +12 -0
  200. package/docs/API/10-lang/10-common/10-stringToBytes.ts +16 -0
  201. package/docs/API/10-lang/10-common/10-stringToMillisecond.ts +17 -0
  202. package/docs/API/10-lang/10-common/10-timeout.ts +11 -0
  203. package/docs/API/10-lang/10-common/10-toCurriedPredicate.ts +28 -0
  204. package/docs/API/10-lang/10-common/10-toJSON.ts +15 -0
  205. package/docs/API/10-lang/10-common/10-toNative.ts +15 -0
  206. package/docs/API/10-lang/10-common/10-toRegExp.ts +17 -0
  207. package/docs/API/10-lang/10-common/10-transformer.ts +21 -0
  208. package/docs/API/10-lang/10-common/10-truthy.ts +12 -0
  209. package/docs/API/10-lang/10-common/10-useAsyncRetry.ts +31 -0
  210. package/docs/API/10-lang/10-common/10-when.ts +27 -0
  211. package/docs/API/10-lang/10-common/10-whenElse.ts +28 -0
  212. package/docs/API/10-lang/10-common/10-whenNot.ts +26 -0
  213. package/docs/API/10-lang/10-common/index.llms.md +228 -0
  214. package/docs/API/10-lang/10-common/index.md +3 -0
  215. package/docs/API/10-lang/10-dataStructure/10-absolutePath.ts +25 -0
  216. package/docs/API/10-lang/10-dataStructure/10-allowedCharacters.ts +25 -0
  217. package/docs/API/10-lang/10-dataStructure/10-array.ts +23 -0
  218. package/docs/API/10-lang/10-dataStructure/10-arrayLengthEqual.ts +25 -0
  219. package/docs/API/10-lang/10-dataStructure/10-betweenThan.ts +25 -0
  220. package/docs/API/10-lang/10-dataStructure/10-betweenThanOrEqual.ts +25 -0
  221. package/docs/API/10-lang/10-dataStructure/10-bigint.ts +22 -0
  222. package/docs/API/10-lang/10-dataStructure/10-boolean.ts +22 -0
  223. package/docs/API/10-lang/10-dataStructure/10-createCodec.ts +45 -0
  224. package/docs/API/10-lang/10-dataStructure/10-createCodecs.ts +134 -0
  225. package/docs/API/10-lang/10-dataStructure/10-createErrorInterpreter.ts +74 -0
  226. package/docs/API/10-lang/10-dataStructure/10-date.ts +23 -0
  227. package/docs/API/10-lang/10-dataStructure/10-email.ts +25 -0
  228. package/docs/API/10-lang/10-dataStructure/10-endsWith.ts +24 -0
  229. package/docs/API/10-lang/10-dataStructure/10-even.ts +25 -0
  230. package/docs/API/10-lang/10-dataStructure/10-extend.ts +27 -0
  231. package/docs/API/10-lang/10-dataStructure/10-greaterThan.ts +25 -0
  232. package/docs/API/10-lang/10-dataStructure/10-greaterThanOrEqual.ts +25 -0
  233. package/docs/API/10-lang/10-dataStructure/10-include.ts +24 -0
  234. package/docs/API/10-lang/10-dataStructure/10-integer.ts +25 -0
  235. package/docs/API/10-lang/10-dataStructure/10-isNullStructure.ts +12 -0
  236. package/docs/API/10-lang/10-dataStructure/10-isNullable.ts +12 -0
  237. package/docs/API/10-lang/10-dataStructure/10-isOptional.ts +12 -0
  238. package/docs/API/10-lang/10-dataStructure/10-isUndefinedStructure.ts +12 -0
  239. package/docs/API/10-lang/10-dataStructure/10-lazy.ts +23 -0
  240. package/docs/API/10-lang/10-dataStructure/10-lessThan.ts +25 -0
  241. package/docs/API/10-lang/10-dataStructure/10-lessThanOrEqual.ts +25 -0
  242. package/docs/API/10-lang/10-dataStructure/10-literal.ts +19 -0
  243. package/docs/API/10-lang/10-dataStructure/10-maxCharacters.ts +25 -0
  244. package/docs/API/10-lang/10-dataStructure/10-maxElements.ts +25 -0
  245. package/docs/API/10-lang/10-dataStructure/10-minCharacters.ts +25 -0
  246. package/docs/API/10-lang/10-dataStructure/10-minElements.ts +25 -0
  247. package/docs/API/10-lang/10-dataStructure/10-multipleOf.ts +25 -0
  248. package/docs/API/10-lang/10-dataStructure/10-negative.ts +25 -0
  249. package/docs/API/10-lang/10-dataStructure/10-notEmpty.ts +25 -0
  250. package/docs/API/10-lang/10-dataStructure/10-notZero.ts +25 -0
  251. package/docs/API/10-lang/10-dataStructure/10-null.ts +22 -0
  252. package/docs/API/10-lang/10-dataStructure/10-nullable.ts +19 -0
  253. package/docs/API/10-lang/10-dataStructure/10-number.ts +22 -0
  254. package/docs/API/10-lang/10-dataStructure/10-numberInString.ts +25 -0
  255. package/docs/API/10-lang/10-dataStructure/10-object.ts +25 -0
  256. package/docs/API/10-lang/10-dataStructure/10-odd.ts +25 -0
  257. package/docs/API/10-lang/10-dataStructure/10-optional.ts +19 -0
  258. package/docs/API/10-lang/10-dataStructure/10-partial.ts +23 -0
  259. package/docs/API/10-lang/10-dataStructure/10-path.ts +25 -0
  260. package/docs/API/10-lang/10-dataStructure/10-positive.ts +25 -0
  261. package/docs/API/10-lang/10-dataStructure/10-record.ts +22 -0
  262. package/docs/API/10-lang/10-dataStructure/10-refine.ts +27 -0
  263. package/docs/API/10-lang/10-dataStructure/10-regex.ts +24 -0
  264. package/docs/API/10-lang/10-dataStructure/10-required.ts +21 -0
  265. package/docs/API/10-lang/10-dataStructure/10-safe.ts +25 -0
  266. package/docs/API/10-lang/10-dataStructure/10-segmentPath.ts +25 -0
  267. package/docs/API/10-lang/10-dataStructure/10-startsWith.ts +24 -0
  268. package/docs/API/10-lang/10-dataStructure/10-strictNegative.ts +25 -0
  269. package/docs/API/10-lang/10-dataStructure/10-strictPositive.ts +25 -0
  270. package/docs/API/10-lang/10-dataStructure/10-string.ts +22 -0
  271. package/docs/API/10-lang/10-dataStructure/10-stringLengthEqual.ts +25 -0
  272. package/docs/API/10-lang/10-dataStructure/10-time.ts +23 -0
  273. package/docs/API/10-lang/10-dataStructure/10-trimmed.ts +25 -0
  274. package/docs/API/10-lang/10-dataStructure/10-typeStructureIdentifier.ts +33 -0
  275. package/docs/API/10-lang/10-dataStructure/10-undefined.ts +22 -0
  276. package/docs/API/10-lang/10-dataStructure/10-union.ts +24 -0
  277. package/docs/API/10-lang/10-dataStructure/10-unwrapLazy.ts +17 -0
  278. package/docs/API/10-lang/10-dataStructure/10-url.ts +25 -0
  279. package/docs/API/10-lang/10-dataStructure/10-uuid.ts +25 -0
  280. package/docs/API/10-lang/10-dataStructure/index.llms.md +264 -0
  281. package/docs/API/10-lang/10-dataStructure/index.md +3 -0
  282. package/docs/API/10-lang/10-either/10-asyncGroup.ts +44 -0
  283. package/docs/API/10-lang/10-either/10-asyncSafeCallback.ts +23 -0
  284. package/docs/API/10-lang/10-either/10-error.ts +12 -0
  285. package/docs/API/10-lang/10-either/10-expect.ts +13 -0
  286. package/docs/API/10-lang/10-either/10-fail.ts +12 -0
  287. package/docs/API/10-lang/10-either/10-forwardAssertsSelection.ts +28 -0
  288. package/docs/API/10-lang/10-either/10-group.ts +58 -0
  289. package/docs/API/10-lang/10-either/10-hasInformation.ts +24 -0
  290. package/docs/API/10-lang/10-either/10-isLeft.ts +16 -0
  291. package/docs/API/10-lang/10-either/10-isRight.ts +16 -0
  292. package/docs/API/10-lang/10-either/10-isSelected.ts +29 -0
  293. package/docs/API/10-lang/10-either/10-keepAsRightByInformation.ts +29 -0
  294. package/docs/API/10-lang/10-either/10-keepAsRightSelection.ts +23 -0
  295. package/docs/API/10-lang/10-either/10-left.ts +13 -0
  296. package/docs/API/10-lang/10-either/10-matchInformation.ts +26 -0
  297. package/docs/API/10-lang/10-either/10-matchInformationOtherwise.ts +27 -0
  298. package/docs/API/10-lang/10-either/10-none.ts +12 -0
  299. package/docs/API/10-lang/10-either/10-ok.ts +12 -0
  300. package/docs/API/10-lang/10-either/10-result.ts +18 -0
  301. package/docs/API/10-lang/10-either/10-rewriteInformation.ts +24 -0
  302. package/docs/API/10-lang/10-either/10-right.ts +13 -0
  303. package/docs/API/10-lang/10-either/10-rightAsyncPipe.ts +69 -0
  304. package/docs/API/10-lang/10-either/10-rightPipe.ts +72 -0
  305. package/docs/API/10-lang/10-either/10-safeCallback.ts +29 -0
  306. package/docs/API/10-lang/10-either/10-some.ts +12 -0
  307. package/docs/API/10-lang/10-either/10-success.ts +12 -0
  308. package/docs/API/10-lang/10-either/10-toMaybe.ts +53 -0
  309. package/docs/API/10-lang/10-either/10-unwrapByInformation.ts +20 -0
  310. package/docs/API/10-lang/10-either/10-unwrapByInformationOrThrow.ts +19 -0
  311. package/docs/API/10-lang/10-either/10-unwrapLeft.ts +14 -0
  312. package/docs/API/10-lang/10-either/10-unwrapLeftOrThrow.ts +17 -0
  313. package/docs/API/10-lang/10-either/10-unwrapOr.ts +17 -0
  314. package/docs/API/10-lang/10-either/10-unwrapOtherwise.ts +20 -0
  315. package/docs/API/10-lang/10-either/10-unwrapRight.ts +14 -0
  316. package/docs/API/10-lang/10-either/10-unwrapRightOrThrow.ts +17 -0
  317. package/docs/API/10-lang/10-either/10-unwrapSelection.ts +26 -0
  318. package/docs/API/10-lang/10-either/10-unwrapSelectionOrThrow.ts +19 -0
  319. package/docs/API/10-lang/10-either/10-whenHasInformation.ts +35 -0
  320. package/docs/API/10-lang/10-either/10-whenHasInformationOtherwise.ts +29 -0
  321. package/docs/API/10-lang/10-either/10-whenIsLeft.ts +20 -0
  322. package/docs/API/10-lang/10-either/10-whenIsLeftOtherwise.ts +27 -0
  323. package/docs/API/10-lang/10-either/10-whenIsRight.ts +20 -0
  324. package/docs/API/10-lang/10-either/10-whenIsRightOtherwise.ts +26 -0
  325. package/docs/API/10-lang/10-either/10-whenIsSelected.ts +33 -0
  326. package/docs/API/10-lang/10-either/10-whenIsSelectedOtherwise.ts +35 -0
  327. package/docs/API/10-lang/10-either/index.llms.md +184 -0
  328. package/docs/API/10-lang/10-either/index.md +3 -0
  329. package/docs/API/10-lang/10-generator/10-asyncChunk.ts +55 -0
  330. package/docs/API/10-lang/10-generator/10-asyncConcat.ts +46 -0
  331. package/docs/API/10-lang/10-generator/10-asyncFilter.ts +41 -0
  332. package/docs/API/10-lang/10-generator/10-asyncFlat.ts +37 -0
  333. package/docs/API/10-lang/10-generator/10-asyncGroup.ts +65 -0
  334. package/docs/API/10-lang/10-generator/10-asyncLoop.ts +59 -0
  335. package/docs/API/10-lang/10-generator/10-asyncMap.ts +48 -0
  336. package/docs/API/10-lang/10-generator/10-asyncReduce.ts +63 -0
  337. package/docs/API/10-lang/10-generator/10-chunk.ts +44 -0
  338. package/docs/API/10-lang/10-generator/10-concat.ts +37 -0
  339. package/docs/API/10-lang/10-generator/10-createExternalAsyncGenerator.ts +29 -0
  340. package/docs/API/10-lang/10-generator/10-execute.ts +44 -0
  341. package/docs/API/10-lang/10-generator/10-filter.ts +35 -0
  342. package/docs/API/10-lang/10-generator/10-flat.ts +25 -0
  343. package/docs/API/10-lang/10-generator/10-group.ts +44 -0
  344. package/docs/API/10-lang/10-generator/10-groupOutput.ts +48 -0
  345. package/docs/API/10-lang/10-generator/10-loop.ts +55 -0
  346. package/docs/API/10-lang/10-generator/10-map.ts +35 -0
  347. package/docs/API/10-lang/10-generator/10-reduce.ts +51 -0
  348. package/docs/API/10-lang/10-generator/10-reduceFrom.ts +30 -0
  349. package/docs/API/10-lang/10-generator/index.llms.md +84 -0
  350. package/docs/API/10-lang/10-generator/index.md +3 -0
  351. package/docs/API/10-lang/index.md +3 -0
  352. package/docs/API/index.md +3 -0
  353. package/docs/API.llms.md +31 -0
  354. package/docs/concepts/01-fundamental/01-constraint/01-use.ts +22 -0
  355. package/docs/concepts/01-fundamental/01-constraint/10-built-in-constraint.ts +37 -0
  356. package/docs/concepts/01-fundamental/01-constraint/20-manipulation.ts +38 -0
  357. package/docs/concepts/01-fundamental/01-constraint/30-cast.ts +62 -0
  358. package/docs/concepts/01-fundamental/01-constraint/40-custom-constraint.ts +45 -0
  359. package/docs/concepts/01-fundamental/01-constraint/index.md +3 -0
  360. package/docs/concepts/01-fundamental/02-currying/01-use.ts +33 -0
  361. package/docs/concepts/01-fundamental/02-currying/10-built-in-function.ts +178 -0
  362. package/docs/concepts/01-fundamental/02-currying/20-inner-pipe.ts +39 -0
  363. package/docs/concepts/01-fundamental/02-currying/30-async-pipe.ts +42 -0
  364. package/docs/concepts/01-fundamental/02-currying/index.md +3 -0
  365. package/docs/concepts/01-fundamental/03-either/01-use.ts +21 -0
  366. package/docs/concepts/01-fundamental/03-either/10-discrimination.ts +79 -0
  367. package/docs/concepts/01-fundamental/03-either/20-exhaustive-handling.ts +73 -0
  368. package/docs/concepts/01-fundamental/03-either/30-composition.ts +72 -0
  369. package/docs/concepts/01-fundamental/03-either/40-result-adaptation.ts +40 -0
  370. package/docs/concepts/01-fundamental/03-either/50-external-results.ts +59 -0
  371. package/docs/concepts/01-fundamental/03-either/60-contextual-state.ts +40 -0
  372. package/docs/concepts/01-fundamental/03-either/index.md +3 -0
  373. package/docs/concepts/01-fundamental/04-data-structure/01-use.ts +22 -0
  374. package/docs/concepts/01-fundamental/04-data-structure/10-structure.ts +193 -0
  375. package/docs/concepts/01-fundamental/04-data-structure/20-constraint.ts +78 -0
  376. package/docs/concepts/01-fundamental/04-data-structure/30-validation.ts +100 -0
  377. package/docs/concepts/01-fundamental/04-data-structure/40-codecs.ts +151 -0
  378. package/docs/concepts/01-fundamental/04-data-structure/50-recursive.ts +48 -0
  379. package/docs/concepts/01-fundamental/04-data-structure/60-interpret-error.ts +123 -0
  380. package/docs/concepts/01-fundamental/04-data-structure/index.md +3 -0
  381. package/docs/concepts/01-fundamental/05-chrono/01-use.ts +14 -0
  382. package/docs/concepts/01-fundamental/05-chrono/10-creation.ts +59 -0
  383. package/docs/concepts/01-fundamental/05-chrono/20-manipulation.ts +94 -0
  384. package/docs/concepts/01-fundamental/05-chrono/30-serialized.ts +73 -0
  385. package/docs/concepts/01-fundamental/05-chrono/40-timezone.ts +81 -0
  386. package/docs/concepts/01-fundamental/05-chrono/index.md +3 -0
  387. package/docs/concepts/01-fundamental/06-modeling/10-new-type.ts +42 -0
  388. package/docs/concepts/01-fundamental/06-modeling/20-entity.ts +204 -0
  389. package/docs/concepts/01-fundamental/06-modeling/30-tagged-object.ts +181 -0
  390. package/docs/concepts/01-fundamental/06-modeling/40-entity-lifecycle.ts +275 -0
  391. package/docs/concepts/01-fundamental/06-modeling/50-evidence.ts +94 -0
  392. package/docs/concepts/01-fundamental/06-modeling/60-signed-function.ts +26 -0
  393. package/docs/concepts/01-fundamental/06-modeling/index.md +3 -0
  394. package/docs/concepts/01-fundamental/07-discrimination/10-entity.ts +104 -0
  395. package/docs/concepts/01-fundamental/07-discrimination/20-fact.ts +142 -0
  396. package/docs/concepts/01-fundamental/07-discrimination/30-tagged-object.ts +105 -0
  397. package/docs/concepts/01-fundamental/07-discrimination/40-error.ts +57 -0
  398. package/docs/concepts/01-fundamental/07-discrimination/50-literal.ts +87 -0
  399. package/docs/concepts/01-fundamental/07-discrimination/60-shape.ts +152 -0
  400. package/docs/concepts/01-fundamental/07-discrimination/70-predicate.ts +89 -0
  401. package/docs/concepts/01-fundamental/07-discrimination/index.md +3 -0
  402. package/docs/concepts/01-fundamental/index.md +1 -0
  403. package/docs/concepts/02-server/10-file/10-manipulation.ts +40 -0
  404. package/docs/concepts/02-server/10-file/20-path.ts +56 -0
  405. package/docs/concepts/02-server/10-file/index.md +3 -0
  406. package/docs/concepts/02-server/20-http/10-init.ts +31 -0
  407. package/docs/concepts/02-server/20-http/20-route.ts +174 -0
  408. package/docs/concepts/02-server/20-http/30-routine.ts +195 -0
  409. package/docs/concepts/02-server/20-http/40-jwt.ts +137 -0
  410. package/docs/concepts/02-server/20-http/50-codegen.ts +29 -0
  411. package/docs/concepts/02-server/20-http/index.md +3 -0
  412. package/docs/concepts/02-server/30-environment/10-platform.ts +38 -0
  413. package/docs/concepts/02-server/30-environment/20-variable.ts +41 -0
  414. package/docs/concepts/02-server/30-environment/index.md +3 -0
  415. package/docs/concepts/02-server/40-command/10-use.ts +112 -0
  416. package/docs/concepts/02-server/40-command/20-sub-command.ts +48 -0
  417. package/docs/concepts/02-server/40-command/index.md +3 -0
  418. package/docs/concepts/02-server/index.md +1 -0
  419. package/docs/concepts/03-client/10-http/10-init.ts +64 -0
  420. package/docs/concepts/03-client/10-http/20-request.ts +244 -0
  421. package/docs/concepts/03-client/10-http/30-hook.ts +139 -0
  422. package/docs/concepts/03-client/10-http/index.md +3 -0
  423. package/docs/concepts/03-client/20-form/10-init.ts +95 -0
  424. package/docs/concepts/03-client/20-form/20-input.ts +96 -0
  425. package/docs/concepts/03-client/20-form/30-layout.ts +160 -0
  426. package/docs/concepts/03-client/20-form/40-template.ts +89 -0
  427. package/docs/concepts/03-client/20-form/index.md +3 -0
  428. package/docs/concepts/03-client/index.md +1 -0
  429. package/docs/concepts/04-tests/01-unit/10-either.ts +136 -0
  430. package/docs/concepts/04-tests/01-unit/20-server-mocking.ts +53 -0
  431. package/docs/concepts/04-tests/01-unit/index.md +3 -0
  432. package/docs/concepts/04-tests/02-e2e/10-init.ts +80 -0
  433. package/docs/concepts/04-tests/02-e2e/20-architecture.ts +76 -0
  434. package/docs/concepts/04-tests/02-e2e/30-testing.ts +90 -0
  435. package/docs/concepts/04-tests/02-e2e/index.md +3 -0
  436. package/docs/concepts/04-tests/index.md +1 -0
  437. package/docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md +41 -0
  438. package/docs/concepts/05-type-driven-design/01-architecture/index.md +3 -0
  439. package/docs/concepts/05-type-driven-design/02-domains/10-entities.md +58 -0
  440. package/docs/concepts/05-type-driven-design/02-domains/20-aggregates.md +49 -0
  441. package/docs/concepts/05-type-driven-design/02-domains/30-repositories.md +41 -0
  442. package/docs/concepts/05-type-driven-design/02-domains/index.md +3 -0
  443. package/docs/concepts/05-type-driven-design/03-applications/10-use-case.md +69 -0
  444. package/docs/concepts/05-type-driven-design/03-applications/index.md +3 -0
  445. package/docs/concepts/05-type-driven-design/04-infrastructure/10-implementation.md +56 -0
  446. package/docs/concepts/05-type-driven-design/04-infrastructure/index.md +3 -0
  447. package/docs/concepts/05-type-driven-design/fixtures/business/applications/index.ts +2 -0
  448. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/book.ts +10 -0
  449. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/client.ts +10 -0
  450. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/email.ts +7 -0
  451. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/index.ts +3 -0
  452. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientGiveBackBook.ts +27 -0
  453. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientRentBook.ts +30 -0
  454. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/createBook.ts +32 -0
  455. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/index.ts +2 -0
  456. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientGiveBackBook.ts +15 -0
  457. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientRentBook.ts +16 -0
  458. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/createBook.ts +21 -0
  459. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/index.ts +3 -0
  460. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/create.ts +34 -0
  461. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/index.ts +3 -0
  462. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/rental.ts +31 -0
  463. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/returnBook.ts +30 -0
  464. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/index.ts +87 -0
  465. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/giveBackBook.ts +33 -0
  466. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/index.ts +2 -0
  467. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/rentBook.ts +32 -0
  468. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/index.ts +82 -0
  469. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/index.ts +2 -0
  470. package/docs/concepts/05-type-driven-design/fixtures/business/domains/index.ts +3 -0
  471. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/book.ts +16 -0
  472. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/client.ts +7 -0
  473. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/email.ts +12 -0
  474. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/index.ts +3 -0
  475. package/docs/concepts/05-type-driven-design/fixtures/business/index.ts +2 -0
  476. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/clientRentBook.ts +62 -0
  477. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/index.ts +11 -0
  478. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/bookExist.ts +19 -0
  479. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/clientExist.ts +19 -0
  480. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/index.ts +2 -0
  481. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/main.ts +19 -0
  482. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientGiveBackBook.ts +37 -0
  483. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientRentBook.ts +50 -0
  484. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/index.ts +2 -0
  485. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/book.ts +25 -0
  486. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/client.ts +7 -0
  487. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/email.ts +10 -0
  488. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/index.ts +3 -0
  489. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/useCases/index.ts +12 -0
  490. package/docs/concepts/05-type-driven-design/index.md +3 -0
  491. package/docs/concepts.llms.md +475 -0
  492. package/instructions/coding-conventions.md +8 -0
  493. package/package.json +96 -3
  494. package/skills/command/SKILL.md +63 -0
  495. package/skills/command/references/examples/cli.ts +22 -0
  496. package/skills/command/references/examples/options-only.ts +27 -0
  497. package/skills/command/references/examples/preview-command.ts +57 -0
  498. package/skills/command/references/execution.md +31 -0
  499. package/skills/command/references/inputs.md +27 -0
  500. package/skills/fundamental/SKILL.md +80 -0
  501. package/skills/fundamental/references/composition.md +35 -0
  502. package/skills/fundamental/references/constraints-and-validation.md +61 -0
  503. package/skills/fundamental/references/examples/async-composition.ts +15 -0
  504. package/skills/fundamental/references/examples/cast.ts +18 -0
  505. package/skills/fundamental/references/examples/composition.ts +40 -0
  506. package/skills/fundamental/references/examples/environment-initialization.ts +19 -0
  507. package/skills/fundamental/references/examples/error-propagation.ts +24 -0
  508. package/skills/fundamental/references/examples/generic-inference.ts +31 -0
  509. package/skills/fundamental/references/examples/guaranteed-array-access.ts +31 -0
  510. package/skills/fundamental/references/examples/independent-inputs.ts +18 -0
  511. package/skills/fundamental/references/examples/infer.ts +21 -0
  512. package/skills/fundamental/references/examples/input-validation.ts +37 -0
  513. package/skills/fundamental/references/examples/safe-declarations.ts +25 -0
  514. package/skills/fundamental/references/results-and-errors.md +59 -0
  515. package/skills/http-client/SKILL.md +50 -0
  516. package/skills/http-client/references/configuration.md +9 -0
  517. package/skills/http-client/references/examples/client-expectations.ts +84 -0
  518. package/skills/http-client/references/examples/client-streams.ts +74 -0
  519. package/skills/http-client/references/examples/external-client.ts +78 -0
  520. package/skills/http-client/references/hooks.md +7 -0
  521. package/skills/http-client/references/responses.md +39 -0
  522. package/skills/http-client/references/streams.md +10 -0
  523. package/skills/http-server/SKILL.md +66 -0
  524. package/skills/http-server/references/code-generation.md +31 -0
  525. package/skills/http-server/references/examples/authentication.ts +42 -0
  526. package/skills/http-server/references/examples/contracts.ts +19 -0
  527. package/skills/http-server/references/examples/generate-sdk.ts +36 -0
  528. package/skills/http-server/references/examples/initialize.ts +29 -0
  529. package/skills/http-server/references/examples/minimal-route.ts +18 -0
  530. package/skills/http-server/references/examples/protected-route.ts +31 -0
  531. package/skills/http-server/references/examples/rename-user-route.ts +54 -0
  532. package/skills/http-server/references/examples/user-checker.ts +26 -0
  533. package/skills/http-server/references/examples/user-route.ts +38 -0
  534. package/skills/http-server/references/initialization.md +33 -0
  535. package/skills/http-server/references/reusable-flows.md +40 -0
  536. package/skills/http-server/references/routes-and-floor.md +38 -0
  537. package/skills/modeling/SKILL.md +76 -0
  538. package/skills/modeling/references/domain.md +33 -0
  539. package/skills/modeling/references/orchestration.md +36 -0
  540. package/skills/server/SKILL.md +55 -0
  541. package/skills/server/references/environment.md +30 -0
  542. package/skills/server/references/examples/environment.ts +41 -0
  543. package/skills/server/references/examples/file-structure.ts +26 -0
  544. package/skills/server/references/examples/files.ts +52 -0
  545. package/skills/server/references/files.md +38 -0
  546. package/skills/server/references/structures.md +15 -0
  547. package/skills/test/SKILL.md +70 -0
  548. package/skills/test/references/examples/results.ts +95 -0
  549. package/skills/test/references/examples/server.ts +59 -0
  550. package/skills/test/references/results.md +21 -0
  551. package/skills/test/references/server.md +17 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @title Preuves de passage par une opération.
3
+ *
4
+ * Exiger dans les types qu’une valeur soit passée par un traitement préalable.
5
+ */
6
+ import * as DModeling from "@duplojs/lang/modeling";
7
+ import * as DInvocation from "@duplojs/lang/invocation";
8
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
9
+ import * as DCommon from "@duplojs/lang/common";
10
+ import * as DEither from "@duplojs/lang/either";
11
+
12
+ // Certaines règles portent sur le parcours d’une valeur plutôt que sur sa seule forme.
13
+ const Id = DModeling.createNewType(
14
+ "Id",
15
+ DDataStructure.string(),
16
+ [DDataStructure.uuid()],
17
+ );
18
+ type Id = DDataStructure.StructureValue<typeof Id>;
19
+
20
+ interface Entity {
21
+ id: Id;
22
+ }
23
+
24
+ interface IdGenerator {
25
+ // Evidence représente uniquement dans le typage la preuve produite par une opération.
26
+ // Le résultat ne porte pas seulement un Id, mais aussi la preuve "generated".
27
+ generateId(): Id & DInvocation.Evidence<"generated">;
28
+ }
29
+
30
+ const implementation: IdGenerator = {
31
+ generateId: () => DCommon.pipe(
32
+ "550e8400-e29b-41d4-a716-446655440000",
33
+ Id.map,
34
+ DEither.unwrapRightOrThrow,
35
+
36
+ // appendEvidence restitue la même valeur, sans propriété ni contrôle runtime.
37
+ // L'implémentation doit donc avoir établi la garantie avant d'ajouter la preuve.
38
+ // Cela fonctionne aussi avec les valeurs primitives.
39
+ DInvocation.appendEvidence("generated"),
40
+ ),
41
+ };
42
+
43
+ // GetEvidenceResult extrait du retour d'une méthode la valeur portant l'évidence demandée.
44
+ // createEntity exige ainsi l'Id avec la preuve "generated" du contrat de generateId.
45
+ // Deux méthodes annonçant la même valeur et la même évidence restent compatibles :
46
+ // pour distinguer leurs provenances, utiliser des noms d'évidence distincts.
47
+ declare function createEntity(
48
+ params: {
49
+ id: DInvocation.GetEvidenceResult<IdGenerator["generateId"], "generated">;
50
+ },
51
+ ): Entity;
52
+
53
+ // La relation entre génération et création est exprimée dans la signature.
54
+ createEntity({ id: implementation.generateId() });
55
+
56
+ declare const idWithoutEvidence: Id;
57
+ // @ts-expect-error Un Id seul ne prouve pas le passage par la génération attendue.
58
+ createEntity({ id: idWithoutEvidence });
59
+
60
+ // Quand l'opération possède plusieurs issues, EvidenceResult associe chaque information
61
+ // à une valeur portant l'évidence du même nom. Comme appendEvidence, cette construction
62
+ // ne réalise pas la vérification : checkId doit réellement consulter le registre.
63
+ interface Registry {
64
+ checkId(id: Id): Promise<
65
+ | DInvocation.EvidenceResult<"id-available", Id>
66
+ | DInvocation.EvidenceResult<"id-already-registered", Id>
67
+ >;
68
+ }
69
+
70
+ // GetEvidenceResult sélectionne ici une seule issue, même à travers la promesse et l'Either.
71
+ type AvailableId = DInvocation.GetEvidenceResult<Registry["checkId"], "id-available">;
72
+ type _CheckAvailableId = DCommon.ExpectType<AvailableId, Id & DInvocation.Evidence<"id-available">, "strict">;
73
+
74
+ declare function createRegisteredEntity(id: AvailableId): Entity;
75
+
76
+ // La couche appelante discrimine le résultat pour obtenir cette preuve.
77
+ // La disponibilité autorise la création ; l'autre issue devient un Left,
78
+ // propagé par rightAsyncPipe sans appeler createRegisteredEntity.
79
+ function registerEntity(registry: Registry, id: Id) {
80
+ return DEither.rightAsyncPipe(
81
+ DCommon.asyncPipe(
82
+ registry.checkId(id),
83
+ DEither.keepAsRightByInformation("id-available"),
84
+ ),
85
+ createRegisteredEntity,
86
+ );
87
+ }
88
+
89
+ declare const alreadyRegisteredId: DInvocation.GetEvidenceResult<Registry["checkId"], "id-already-registered">;
90
+ // @ts-expect-error Le résultat d'une autre branche ne prouve pas la disponibilité.
91
+ createRegisteredEntity(alreadyRegisteredId);
92
+
93
+ // @ts-expect-error La méthode ne produit pas d'évidence nommée generated.
94
+ type UnsupportedEvidence = DInvocation.GetEvidenceResult<Registry["checkId"], "generated">;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @title Identité des fonctions dans les dépendances.
3
+ *
4
+ * Exiger une fonction identifiée au-delà de sa seule signature TypeScript.
5
+ */
6
+ import * as DInvocation from "@duplojs/lang/invocation";
7
+
8
+ interface ActionService {
9
+ // Deux fonctions () => void ne sont pas nécessairement interchangeables dans le modèle.
10
+ // SignedFunction ajoute à cette signature l’identité de l’opération attendue.
11
+ someAction: DInvocation.SignedFunction<"someAction", () => void>;
12
+ }
13
+
14
+ const implementation: ActionService = {
15
+ // signedFunction associe l’identité à l’implémentation.
16
+ // Cette information existe au runtime sur la fonction, contrairement à une Evidence.
17
+ someAction: DInvocation.signedFunction("someAction", () => void 0),
18
+ };
19
+
20
+ // La dépendance exige précisément l’opération identifiée comme someAction.
21
+ declare function otherFunction(someFunction: ActionService["someAction"]): void;
22
+
23
+ otherFunction(implementation.someAction);
24
+
25
+ // @ts-expect-error Une même signature d’appel ne suffit pas sans l’identité attendue.
26
+ otherFunction(() => void 0);
@@ -0,0 +1,3 @@
1
+ ## Modélisation
2
+
3
+ Identités métier, modèles de données, états et transitions, preuves de passage et identité des opérations dans les contrats.
@@ -0,0 +1,104 @@
1
+ /**
2
+ * @title Discrimination des entités par identité.
3
+ *
4
+ * Sélection exhaustive ou partielle selon le nom métier, avec typage précis des branches.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import type * as DModeling from "@duplojs/lang/modeling";
8
+ import * as DPattern from "@duplojs/lang/pattern";
9
+
10
+ // Une Entity porte une identité associée à son nom. Le matcher utilise cette identité,
11
+ // sans devoir déduire le cas à partir de la forme de l’objet ou de ses propriétés.
12
+ interface User extends DModeling.Entity<"User"> {
13
+ readonly id: string;
14
+ readonly name: string;
15
+ }
16
+
17
+ interface Admin extends DModeling.Entity<"Admin"> {
18
+ readonly id: string;
19
+ readonly permissions: readonly string[];
20
+ }
21
+
22
+ type Entity =
23
+ | User
24
+ | Admin;
25
+
26
+ declare const entity: Entity;
27
+
28
+ // `matchWithEntity` discrimine une union à partir du nom de chaque `Entity`.
29
+ //
30
+ // La sélection est exhaustive : chaque entité présente dans l'union
31
+ // doit posséder un handler.
32
+ //
33
+ // Chaque callback reçoit directement le type précis correspondant
34
+ // au nom de l'entité.
35
+
36
+ // string | number
37
+ const matchedEntity = DPattern.matchWithEntity(
38
+ entity,
39
+ {
40
+ // User
41
+ User: (user) => user.name,
42
+
43
+ // Admin
44
+ Admin: (admin) => admin.permissions.length,
45
+ },
46
+ );
47
+
48
+ // La sélection exhaustive crée un point d'ancrage dans le typage.
49
+ //
50
+ // Si une nouvelle `Entity` est ajoutée à l'union, le matcher devra
51
+ // également définir son traitement.
52
+ //
53
+ // À l'inverse, une clé ne correspondant à aucune entité de l'union
54
+ // ne peut pas être ajoutée au matcher.
55
+
56
+ // `matchWithEntity` possède également une forme curried afin d'être
57
+ // directement utilisée dans un pipe.
58
+
59
+ // string | number
60
+ const matchedEntityInPipe = DCommon.pipe(
61
+ entity,
62
+ DPattern.matchWithEntity({
63
+ // User
64
+ User: (user) => user.name,
65
+
66
+ // Admin
67
+ Admin: (admin) => admin.permissions.length,
68
+ }),
69
+ );
70
+
71
+ // `matchWithEntityOtherwise` permet de ne sélectionner explicitement
72
+ // qu'une partie des entités.
73
+ //
74
+ // `otherwise` reçoit uniquement les entités qui n'ont pas déjà
75
+ // été prises en charge par le matcher.
76
+
77
+ // string | number
78
+ const matchedEntityOtherwise = DPattern.matchWithEntityOtherwise(
79
+ entity,
80
+ {
81
+ // User
82
+ User: (user) => user.name,
83
+ },
84
+ // Admin
85
+ (admin) => admin.permissions.length,
86
+ );
87
+
88
+ // La forme curried est également disponible.
89
+ //
90
+ // Le typage de `otherwise` évolue avec les handlers déjà déclarés.
91
+ // Il représente toujours précisément le reste de l'union.
92
+
93
+ // string | number
94
+ const matchedEntityOtherwiseInPipe = DCommon.pipe(
95
+ entity,
96
+ DPattern.matchWithEntityOtherwise(
97
+ {
98
+ // User
99
+ User: (user) => user.name,
100
+ },
101
+ // Admin
102
+ (admin) => admin.permissions.length,
103
+ ),
104
+ );
@@ -0,0 +1,142 @@
1
+ /**
2
+ * @title Discrimination selon le fait courant.
3
+ *
4
+ * Choisir une branche selon la Fact portée par une valeur et accéder aux données du fait.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import * as DModeling from "@duplojs/lang/modeling";
8
+ import * as DPattern from "@duplojs/lang/pattern";
9
+
10
+ // Une Fact appliquée à une entité y conserve son nom et sa payload.
11
+ // La sélection porte sur ce fait courant, même lorsque toutes les variantes sont la même Entity.
12
+ interface UserCreatedFact extends DModeling.Fact<
13
+ "UserCreated",
14
+ {
15
+ name: string;
16
+ }
17
+ > {}
18
+
19
+ interface UserDeletedFact extends DModeling.Fact<
20
+ "UserDeleted",
21
+ {
22
+ reason: string;
23
+ }
24
+ > {}
25
+
26
+ type UserCreated = (
27
+ & DModeling.Entity<"User">
28
+ & {
29
+ readonly id: string;
30
+ }
31
+ & UserCreatedFact
32
+ );
33
+
34
+ type UserDeleted = (
35
+ & DModeling.Entity<"User">
36
+ & {
37
+ readonly id: string;
38
+ }
39
+ & UserDeletedFact
40
+ );
41
+
42
+ type User =
43
+ | UserCreated
44
+ | UserDeleted;
45
+
46
+ declare const user: User;
47
+
48
+ // `matchWithFact` discrimine une union à partir du nom de la `Fact`
49
+ // portée par chaque valeur.
50
+ //
51
+ // La sélection est exhaustive : chaque fact présente dans l'union
52
+ // doit posséder un handler.
53
+ //
54
+ // Chaque callback reçoit directement la valeur avec la `Fact` précise
55
+ // correspondant au nom sélectionné. La payload est accessible sur cette valeur avec factKind.
56
+ // Cette lecture fonctionne dans les formes directe et curifiée.
57
+
58
+ // string | number
59
+ const matchedFact = DPattern.matchWithFact(
60
+ user,
61
+ {
62
+ // UserCreated
63
+ UserCreated: (createdUser) => (
64
+ DModeling.factKind.getValue(createdUser).payload.name
65
+ ),
66
+
67
+ // UserDeleted
68
+ UserDeleted: (deletedUser) => (
69
+ DModeling.factKind.getValue(deletedUser).payload.reason.length
70
+ ),
71
+ },
72
+ );
73
+
74
+ // La sélection exhaustive crée un point d'ancrage dans le typage.
75
+ //
76
+ // Si une nouvelle `Fact` est ajoutée à l'union, le matcher devra
77
+ // également définir son traitement.
78
+ //
79
+ // À l'inverse, une clé ne correspondant à aucune fact de l'union
80
+ // ne peut pas être ajoutée au matcher.
81
+
82
+ // `matchWithFact` possède également une forme curried afin d'être
83
+ // directement utilisée dans un pipe.
84
+
85
+ // string | number
86
+ const matchedFactInPipe = DCommon.pipe(
87
+ user,
88
+ DPattern.matchWithFact({
89
+ // UserCreated
90
+ UserCreated: (createdUser) => (
91
+ DModeling.factKind.getValue(createdUser).payload.name
92
+ ),
93
+
94
+ // UserDeleted
95
+ UserDeleted: (deletedUser) => (
96
+ DModeling.factKind.getValue(deletedUser).payload.reason.length
97
+ ),
98
+ }),
99
+ );
100
+
101
+ // `matchWithFactOtherwise` permet de ne sélectionner explicitement
102
+ // qu'une partie des facts.
103
+ //
104
+ // `otherwise` reçoit uniquement les valeurs portant les facts
105
+ // qui n'ont pas déjà été prises en charge par le matcher.
106
+
107
+ // string | UserDeleted
108
+ const matchedFactOtherwise = DPattern.matchWithFactOtherwise(
109
+ user,
110
+ {
111
+ // UserCreated
112
+ UserCreated: (createdUser) => (
113
+ DModeling.factKind.getValue(createdUser).payload.name
114
+ ),
115
+ },
116
+ // UserDeleted
117
+ (deletedUser) => (
118
+ deletedUser
119
+ ),
120
+ );
121
+
122
+ // La forme curried est également disponible.
123
+ //
124
+ // Le typage de `otherwise` évolue avec les handlers déjà déclarés.
125
+ // Il représente toujours précisément le reste de l'union de facts.
126
+
127
+ // string | UserDeleted
128
+ const matchedFactOtherwiseInPipe = DCommon.pipe(
129
+ user,
130
+ DPattern.matchWithFactOtherwise(
131
+ {
132
+ // UserCreated
133
+ UserCreated: (createdUser) => (
134
+ DModeling.factKind.getValue(createdUser).payload.name
135
+ ),
136
+ },
137
+ // UserDeleted
138
+ (deletedUser) => (
139
+ deletedUser
140
+ ),
141
+ ),
142
+ );
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @title Discrimination des objets par tag.
3
+ *
4
+ * Identifier la forme d’un objet par son tag et traiter tout ou partie de l’union.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import type * as DModeling from "@duplojs/lang/modeling";
8
+ import * as DPattern from "@duplojs/lang/pattern";
9
+
10
+ // Le tag fait partie de la donnée et identifie chaque TaggedObject.
11
+ // Le matcher l’utilise pour distinguer les variantes indépendamment de leurs propriétés.
12
+ interface EmailNotification extends DModeling.ObjectTag<"EmailNotification"> {
13
+ readonly email: string;
14
+ readonly subject: string;
15
+ }
16
+
17
+ interface SmsNotification extends DModeling.ObjectTag<"SmsNotification"> {
18
+ readonly phone: string;
19
+ readonly message: string;
20
+ }
21
+
22
+ type Notification =
23
+ | EmailNotification
24
+ | SmsNotification;
25
+
26
+ declare const notification: Notification;
27
+
28
+ // `matchWithTaggedObject` discrimine une union à partir du tag
29
+ // porté par chaque `TaggedObject`.
30
+ //
31
+ // La sélection est exhaustive : chaque tag présent dans l'union
32
+ // doit posséder un handler.
33
+ //
34
+ // Chaque callback reçoit directement le `TaggedObject` précis
35
+ // correspondant au tag sélectionné.
36
+
37
+ // string
38
+ const matchedNotification = DPattern.matchWithTaggedObject(
39
+ notification,
40
+ {
41
+ // EmailNotification
42
+ EmailNotification: (emailNotification) => emailNotification.email,
43
+
44
+ // SmsNotification
45
+ SmsNotification: (smsNotification) => smsNotification.phone,
46
+ },
47
+ );
48
+
49
+ // La sélection exhaustive crée un point d'ancrage dans le typage.
50
+ //
51
+ // Si un nouveau `TaggedObject` est ajouté à l'union, le matcher devra
52
+ // également définir son traitement.
53
+ //
54
+ // À l'inverse, une clé ne correspondant à aucun tag de l'union
55
+ // ne peut pas être ajoutée au matcher.
56
+
57
+ // `matchWithTaggedObject` possède également une forme curried afin d'être
58
+ // directement utilisée dans un pipe.
59
+
60
+ // string
61
+ const matchedNotificationInPipe = DCommon.pipe(
62
+ notification,
63
+ DPattern.matchWithTaggedObject({
64
+ // EmailNotification
65
+ EmailNotification: (emailNotification) => emailNotification.email,
66
+
67
+ // SmsNotification
68
+ SmsNotification: (smsNotification) => smsNotification.phone,
69
+ }),
70
+ );
71
+
72
+ // `matchWithTaggedObjectOtherwise` permet de ne sélectionner explicitement
73
+ // qu'une partie des tags.
74
+ //
75
+ // `otherwise` reçoit uniquement les `TaggedObject` qui n'ont pas déjà
76
+ // été pris en charge par le matcher.
77
+
78
+ // string
79
+ const matchedNotificationOtherwise = DPattern.matchWithTaggedObjectOtherwise(
80
+ notification,
81
+ {
82
+ // EmailNotification
83
+ EmailNotification: (emailNotification) => emailNotification.email,
84
+ },
85
+ // SmsNotification
86
+ (smsNotification) => smsNotification.phone,
87
+ );
88
+
89
+ // La forme curried est également disponible.
90
+ //
91
+ // Le typage de `otherwise` évolue avec les handlers déjà déclarés.
92
+ // Il représente toujours précisément le reste de l'union de `TaggedObject`.
93
+
94
+ // string
95
+ const matchedNotificationOtherwiseInPipe = DCommon.pipe(
96
+ notification,
97
+ DPattern.matchWithTaggedObjectOtherwise(
98
+ {
99
+ // EmailNotification
100
+ EmailNotification: (emailNotification) => emailNotification.email,
101
+ },
102
+ // SmsNotification
103
+ (smsNotification) => smsNotification.phone,
104
+ ),
105
+ );
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @title Discrimination des erreurs par identifiant.
3
+ *
4
+ * Sélection exhaustive ou partielle des erreurs DuploJS, avec typage précis des branches et des cas restants.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import * as DPattern from "@duplojs/lang/pattern";
8
+
9
+ // Le matcher sélectionne l'identifiant porté par le kind d'une DuploJSError.
10
+ // Cet identifiant est fixé ici par parentClass ; il ne dépend ni du message
11
+ // ni du nom de la classe.
12
+ class InvalidInputError extends DCommon.DuploJSError.parentClass("invalid-input") {}
13
+ class UnavailableServiceError extends DCommon.DuploJSError.parentClass("unavailable-service", Error) {}
14
+
15
+ type OperationError =
16
+ | InvalidInputError
17
+ | UnavailableServiceError;
18
+
19
+ declare const error: OperationError;
20
+
21
+ // matchWithError exige un handler pour chaque identifiant de l'union
22
+ // et refuse les clés étrangères à celle-ci. Ajouter une erreur au contrat
23
+ // impose donc de compléter le matcher.
24
+ // Chaque callback reçoit l'erreur précise, avec ses propriétés et sa cause typées.
25
+
26
+ // string | Error
27
+ const matchedError = DPattern.matchWithError(
28
+ error,
29
+ {
30
+ // InvalidInputError ; cause est undefined.
31
+ "invalid-input": (invalidInput) => invalidInput.message,
32
+
33
+ // UnavailableServiceError ; cause est Error.
34
+ "unavailable-service": (unavailableService) => unavailableService.cause,
35
+ },
36
+ );
37
+
38
+ // matchWithErrorOtherwise sélectionne explicitement une partie des identifiants.
39
+ // Le callback otherwise reçoit uniquement les erreurs non prises en charge.
40
+ // Les deux fonctions existent en forme directe et curried, utilisable dans un pipe.
41
+
42
+ // string | Error
43
+ const matchedErrorOtherwise = DCommon.pipe(
44
+ error,
45
+ DPattern.matchWithErrorOtherwise(
46
+ {
47
+ // InvalidInputError
48
+ "invalid-input": (invalidInput) => invalidInput.message,
49
+ },
50
+ // UnavailableServiceError
51
+ (unavailableService) => unavailableService.cause,
52
+ ),
53
+ );
54
+
55
+ // Ces matchers attendent des DuploJSError dont les identifiants sont des types
56
+ // littéraux connus. Conserver l'union précise : Error natif et DuploJSError
57
+ // sans identifiant littéral ne fournissent pas ce contrat de discrimination.
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @title Discrimination des valeurs littérales.
3
+ *
4
+ * Traitement exhaustif ou partiel d’une union selon la valeur, avec branches typées.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import * as DPattern from "@duplojs/lang/pattern";
8
+
9
+ // Pour une union de valeurs littérales, privilégier les matchers dédiés aux string ou number.
10
+ // Ils sélectionnent directement la valeur et affinent le type reçu dans chaque branche.
11
+
12
+ declare const status: "pending" | "ready" | "failed";
13
+
14
+ // `matchWithString` discrimine exhaustivement une union de string literals.
15
+ //
16
+ // Chaque valeur possible doit posséder un handler et chaque callback reçoit
17
+ // précisément le literal correspondant.
18
+
19
+ // "wait" | "run" | "error"
20
+ const matchedStatus = DPattern.matchWithString(
21
+ status,
22
+ {
23
+ // "pending"
24
+ pending: () => "wait" as const,
25
+
26
+ // "ready"
27
+ ready: () => "run" as const,
28
+
29
+ // "failed"
30
+ failed: () => "error" as const,
31
+ },
32
+ );
33
+
34
+ // La forme curried peut être utilisée directement dans un pipe.
35
+
36
+ // "wait" | "run" | "error"
37
+ const matchedStatusInPipe = DCommon.pipe(
38
+ status,
39
+ DPattern.matchWithString({
40
+ pending: () => "wait" as const,
41
+ ready: () => "run" as const,
42
+ failed: () => "error" as const,
43
+ }),
44
+ );
45
+
46
+ // La variante `otherwise` permet de ne sélectionner qu'une partie de l'union.
47
+ //
48
+ // Le callback `otherwise` reçoit précisément les literals non traités.
49
+
50
+ // "run" | "not-ready"
51
+ const matchedStatusOtherwise = DPattern.matchWithStringOtherwise(
52
+ status,
53
+ {
54
+ ready: () => "run" as const,
55
+ },
56
+ // "pending" | "failed"
57
+ () => "not-ready" as const,
58
+ );
59
+
60
+ declare const code: 200 | 404 | 500;
61
+
62
+ // `matchWithNumber` applique le même principe aux unions de number literals.
63
+
64
+ // "success" | "not-found" | "error"
65
+ const matchedCode = DPattern.matchWithNumber(
66
+ code,
67
+ {
68
+ 200: () => "success" as const,
69
+ 404: () => "not-found" as const,
70
+ 500: () => "error" as const,
71
+ },
72
+ );
73
+
74
+ // `matchWithNumberOtherwise` permet également une sélection partielle.
75
+
76
+ // "success" | "error"
77
+ const matchedCodeOtherwise = DPattern.matchWithNumberOtherwise(
78
+ code,
79
+ {
80
+ 200: () => "success" as const,
81
+ },
82
+ // 404 | 500
83
+ () => "error" as const,
84
+ );
85
+
86
+ // Un matcher exhaustif doit couvrir chaque valeur possible et refuse les clés étrangères à l’union.
87
+ // Ajouter une valeur au contrat impose de réviser les branches, contrairement à une sélection partielle.