@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,27 @@
1
+ import * as DSCommand from "@duplojs/server/command";
2
+ import * as DSCommon from "@duplojs/server/common";
3
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
4
+ import * as DEither from "@duplojs/lang/either";
5
+ import type * as DCommon from "@duplojs/lang/common";
6
+
7
+ const result = await DSCommand.execOptions([
8
+ DSCommand.createOption("format", DDataStructure.literal(["json", "text"])),
9
+ DSCommand.createBooleanOption("verbose"),
10
+ ]);
11
+
12
+ if (DEither.isLeft(result)) {
13
+ DSCommon.exitProcess(1);
14
+ } else if (DEither.hasInformation(result, "success")) {
15
+ const options = DEither.unwrapRight(result);
16
+ type _CheckOptions = DCommon.ExpectType<
17
+ typeof options,
18
+ {
19
+ readonly format: "json" | "text" | undefined;
20
+ readonly verbose: boolean;
21
+ },
22
+ "strict"
23
+ >;
24
+
25
+ console.log(options);
26
+ }
27
+ // La branche log-help ne déclenche aucun traitement après l'aide.
@@ -0,0 +1,57 @@
1
+ import * as DSCommand from "@duplojs/server/command";
2
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
3
+ import type * as DCommon from "@duplojs/lang/common";
4
+ import * as DArray from "@duplojs/lang/array";
5
+
6
+ export const previewCommand = DSCommand.create(
7
+ "preview",
8
+ {
9
+ description: "Preview export parameters without writing files",
10
+ subjects: [
11
+ DSCommand.createArgument("source", DDataStructure.string()),
12
+ DSCommand.createArgument("destination", DDataStructure.string(), { optional: true }),
13
+ ],
14
+ options: [
15
+ DSCommand.createOption("format", DDataStructure.literal(["json", "text"]), {
16
+ required: true,
17
+ aliases: ["f"],
18
+ description: "Export format",
19
+ }),
20
+ DSCommand.createOption("limit", DDataStructure.number([
21
+ DDataStructure.integer(),
22
+ DDataStructure.greaterThanOrEqual(1),
23
+ DDataStructure.lessThanOrEqual(100),
24
+ ]), { description: "Maximum number of entries" }),
25
+ DSCommand.createBooleanOption("overwrite", { description: "Allow replacement" }),
26
+ DSCommand.createArrayOption("include", DDataStructure.string(), {
27
+ required: true,
28
+ min: 1,
29
+ max: 5,
30
+ description: "Comma-separated entries to include",
31
+ }),
32
+ ],
33
+ },
34
+ ({ args, options }) => {
35
+ type _CheckArgs = DCommon.ExpectType<
36
+ typeof args,
37
+ {
38
+ readonly source: string;
39
+ readonly destination: string | undefined;
40
+ },
41
+ "strict"
42
+ >;
43
+ type _CheckFormat = DCommon.ExpectType<typeof options.format, "json" | "text", "strict">;
44
+ type _CheckFlag = DCommon.ExpectType<typeof options.overwrite, boolean, "strict">;
45
+
46
+ // La liste obligatoire et son minimum garantissent l'accès sans absence.
47
+ const firstEntry = DArray.first(options.include);
48
+ type _CheckFirstEntry = DCommon.ExpectType<typeof firstEntry, string, "strict">;
49
+
50
+ console.log({
51
+ ...args,
52
+ ...options,
53
+ limit: options.limit ?? 20,
54
+ firstEntry,
55
+ });
56
+ },
57
+ );
@@ -0,0 +1,31 @@
1
+ # Arbre, aide et résultat d'exécution
2
+
3
+ ## Commandes nommées et racine
4
+
5
+ Une commande créée par `DSCommand.create` est une valeur à exporter puis importer dans le module qui assemble le parent. La placer dans les `subjects` du parent ; il n'y a pas de découverte automatique des fichiers. L'[exemple CLI](examples/cli.ts) importe explicitement sa sous-commande.
6
+
7
+ La sélection descend immédiatement vers la sous-commande lorsque le premier argument correspond à son nom. Le parent ne constitue donc ni un middleware ni une source d'options communes. Pour appeler `my-cli preview ...`, placer les options de `preview` après son nom et les déclarer sur cette commande. Mutualiser au besoin les déclarations d'options, puis les inclure dans les commandes concernées.
8
+
9
+ Le callback du parent traite son invocation sans sous-commande. Lui donner un comportement utile selon le projet, par exemple indiquer les actions disponibles. L'aide intégrée répond à `my-cli --help` et `my-cli preview --help` sans exécuter les callbacks correspondants.
10
+
11
+ ## Résultats et erreurs
12
+
13
+ `DSCommand.exec` lit les arguments du processus. Une erreur de décodage ou de validation est déjà affichée et revient dans un `DEither.Error<DSCommand.Error>` ; le callback de la commande sélectionnée ne s'exécute pas. Une exécution réussie, y compris l'affichage de l'aide, renvoie `DEither.Ok`.
14
+
15
+ Ce résultat ne fixe pas à lui seul un code de sortie d'échec. À la frontière du programme, le discriminer avec `DEither.isLeft` et, si le contrat du binaire le demande, terminer avec `DSCommon.exitProcess(1)` depuis `@duplojs/server/common`, comme dans l'exemple CLI. Éviter d'afficher une seconde fois le même diagnostic.
16
+
17
+ Les échecs métier restent à interpréter dans le callback qui consomme l'application : afficher le message adapté et choisir la conséquence pour le programme. Le callback attend une valeur `void` ou une promesse de `void` ; lui retourner un `Either` métier ne constitue pas un mécanisme de propagation. `exec` ne convertit pas les exceptions du callback en erreurs de validation.
18
+
19
+ Pour adapter les messages des data structures, `exec` et `execOptions` acceptent `dataStructureErrorInterpreter`.
20
+
21
+ ## Script recevant uniquement des options
22
+
23
+ `DSCommand.execOptions` renvoie un résultat à trois branches : `success` contient les options validées, `log-help` indique que l'aide a déjà été affichée, et un `Left` porte l'erreur déjà affichée. Discriminer le succès avec `DEither.hasInformation(result, "success")` avant de déballer et de lancer le travail ; une aide est aussi un `Right`.
24
+
25
+ Lire l'[exemple de script](examples/options-only.ts). Réserver cette forme aux scripts sans arguments positionnels ni arbre de commandes : elle ne vérifie pas les arguments restants après extraction des options.
26
+
27
+ ## Exposer le binaire
28
+
29
+ Réutiliser le mode d'exécution du projet. Pour un package compilé sous Node, placer un shebang `#!/usr/bin/env node` au début du point d'entrée généré et faire pointer le champ `bin` du `package.json` vers ce fichier exécutable. L'exemple `cli.ts` suppose une compilation qui conserve ce shebang. Si le projet exécute directement du TypeScript, utiliser son interpréteur et le shebang correspondants plutôt que pointer Node sur un TypeScript non pris en charge par sa configuration.
30
+
31
+ Vérifier que le fichier déclaré dans `bin` est produit, inclus dans le package distribué et exécutable. Tester ensuite la commande depuis un projet consommateur ou une installation locale du package.
@@ -0,0 +1,27 @@
1
+ # Entrées et garanties
2
+
3
+ Lire l'[exemple de prévisualisation](examples/preview-command.ts) pour combiner arguments, option obligatoire, option numérique facultative, flag et liste bornée. Les assertions `DCommon.ExpectType` y vérifient les garanties reçues dans le callback.
4
+
5
+ ## Valeurs du terminal
6
+
7
+ `createArgument` reçoit le nom, la data structure et les paramètres éventuels. L'ordre dans `subjects` fixe l'ordre des valeurs positionnelles. Une déclaration facultative ajoute `undefined` à la valeur reçue ; la data structure décrit la valeur présente.
8
+
9
+ `createOption` reçoit également un nom et une data structure. La syntaxe accepte `--format=json` et `--format json`, ainsi qu'un alias déclaré comme `-f json`. Déclarer les noms et les alias sans tirets. Le décodage depuis les chaînes est intégré, y compris vers un nombre : une data structure numérique peut donc valider un entier et ses bornes avant le callback.
10
+
11
+ Ne pas confondre une option facultative avec une valeur par défaut : appliquer la valeur de repli au résultat validé, ou rendre l'option obligatoire selon le contrat attendu.
12
+
13
+ ## Flags et listes
14
+
15
+ `createBooleanOption` modélise la présence : `--overwrite` active le flag. `--overwrite=false` est invalide ; ne pas le proposer comme syntaxe de désactivation.
16
+
17
+ `createArrayOption` reçoit le schéma d'un **élément**, puis décode les éléments d'une valeur séparée par des virgules par défaut : `--include=src,tests`. Utiliser `separator` pour changer ce séparateur. Ne pas supposer qu'une répétition du flag accumule les valeurs.
18
+
19
+ `min` et `max` contraignent la longueur d'une liste présente. Ils ne rendent pas l'option obligatoire : ajouter `required: true` si son absence doit échouer. Avec un `min` littéral de `1`, une liste obligatoire garantit un premier élément ; exploiter cette garantie sans assertion ni garde d'absence redondante.
20
+
21
+ Exemple d'appel de la sous-commande exposée par [cli.ts](examples/cli.ts) :
22
+
23
+ ```sh
24
+ my-cli preview ./src ./out --format=json --limit=20 --include=src,tests --overwrite
25
+ ```
26
+
27
+ L'exemple affiche les paramètres d'une prévisualisation ; il n'écrit aucun fichier. L'argument `destination` et l'option `limit` peuvent être omis, tandis que `source`, `format` et `include` sont requis.
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: duplojs-fundamental
3
+ description: "Appliquer les API et la philosophie fonctionnelle DuploJS pour toute tâche impliquant du code TypeScript, quel que soit le contexte d'exécution."
4
+ ---
5
+
6
+ # Fondamentaux DuploJS
7
+
8
+ ## Trouver les concepts
9
+
10
+ Appliquer la démarche du skill et lire les ressources indiquées lorsque leur condition est rencontrée. Pour rechercher un concept ou un mécanisme non couvert, consulter `docs/concepts.llms.md` du package `@duplojs/agents-kit`.
11
+
12
+ Le setup indique ce chemin dans `AGENTS.md` ou `CLAUDE.md`, relativement à leur dossier. Les chemins `docs/` partent du package installé, même avec `--copy`. Les références du skill partent de son dossier ; les liens d'un document se résolvent depuis ce document.
13
+
14
+ Si le chemin du routeur manque, le retrouver depuis le projet consommateur :
15
+
16
+ ```sh
17
+ node --input-type=module -e 'import { fileURLToPath } from "node:url"; console.log(fileURLToPath(import.meta.resolve("@duplojs/agents-kit/docs/concepts.llms.md")))'
18
+ ```
19
+
20
+ ## Utiliser DuploJS pour coder
21
+
22
+ Utiliser obligatoirement les API et l'écosystème DuploJS dès qu'un équivalent existe, y compris dans les tests. Avant d'utiliser une API native ou tierce ou de créer un utilitaire, chercher l'équivalent DuploJS.
23
+
24
+ - `@duplojs/lang` : primitives et manipulations JavaScript indépendantes de la plateforme.
25
+ - `@duplojs/server` : interactions avec l'environnement d'exécution serveur, notamment le système de fichiers. Par exemple, calculer un chemin avec `lang/path` et lire un fichier avec `server/file`.
26
+ - Pour un besoin spécialisé, rechercher le package et les API adaptés dans l'écosystème à partir de la documentation.
27
+
28
+ Importer le sous-export du domaine avec son namespace long lorsqu'il est exposé, comme dans les exemples liés depuis les références.
29
+
30
+ ## Laisser les types s'inférer
31
+
32
+ Dans les implémentations, laisser TypeScript inférer les retours des fonctions et les valeurs issues des appels pour que leurs types suivent le code et ses dépendances. Ne pas reconstituer manuellement un type que l'expression ou l'API peut inférer. Annoter un type de retour uniquement pour résoudre une récursivité. Les signatures d'interfaces et les déclarations de fonctions des exemples décrivent des contrats à implémenter ; elles ne demandent pas d'annoter le retour de leur implémentation.
33
+
34
+ ## Faire évoluer le code à l'endroit responsable
35
+
36
+ Lire les définitions, les contrats et les appelants concernés, puis intégrer le besoin dans la fonction, le modèle ou le module responsable. Si les adaptations se multiplient dans le traitement ou chez ses appelants, réexaminer cette responsabilité et simplifier la partie concernée.
37
+
38
+ Privilégier les fonctions pures, l'immutabilité et des transformations explicites. Isoler les interactions avec l'environnement et représenter les échecs prévisibles dans les types de retour. Recomposer les étapes ou extraire une responsabilité lorsque cela clarifie le traitement, en conservant les garanties métier et le rôle de chaque couche.
39
+
40
+ Limiter le remaniement au besoin demandé, puis relire la partie modifiée avec ses usages : déroulement compréhensible, absence de duplication et complexité proportionnée. Adapter les appelants concernés et vérifier les contrats ainsi que le comportement attendu.
41
+
42
+ ## Composer les transformations
43
+
44
+ De nombreuses fonctions proposent une forme curifiée pour `DCommon.pipe` : fournir les paramètres fixes directement dans l'étape du pipe, puis laisser celui-ci transmettre la donnée.
45
+
46
+ Lorsque la fonction retournée par la forme curifiée ne déclare pas ses propres génériques, ses types sont fixés lors de l'appel de configuration. Écrire cet appel directement comme argument de `pipe` ou `asyncPipe` : le contexte doit être disponible au moment de configurer l'étape. Préparer la fonction dans une variable puis passer cette variable à un pipe reste une préparation isolée ; l'ajout du pipe ne corrige pas cet usage. Ne pas ajouter des génériques explicites, annotations ou casts pour le forcer. L'[exemple de composition](references/examples/composition.ts) montre l'appel dans le pipe et la préparation à éviter ; [Composition](references/composition.md) explique les deux niveaux de signature.
47
+
48
+ Toujours écrire les appels de pipe sur plusieurs lignes : chaque argument sur sa propre ligne, une virgule après le dernier et la parenthèse de fermeture sur une ligne séparée. Appliquer ce format même avec seulement deux arguments, une donnée et une étape ; écrire l'appel curifié lui-même à la ligne de cette étape.
49
+
50
+ Un appel simple peut rester direct. Préparer séparément les données issues de sources indépendantes avant de les combiner ; les appels curifiés des étapes restent dans le pipe. Pour plusieurs étapes asynchrones, `DCommon.asyncPipe` attend chaque étape ; un seul `await` sur le résultat final suffit.
51
+
52
+ Lorsque les étapes doivent s'arrêter sur un `Left`, utiliser `DEither.rightPipe` ou `DEither.rightAsyncPipe` : chaque étape reçoit la valeur du `Right` précédent et le premier `Left` arrête la suite. Lire [Composition](references/composition.md) avant de construire ou modifier un tel enchaînement ; l'[exemple direct et curifié](references/examples/composition.ts) montre le cas synchrone sans échec.
53
+
54
+ ## Valider les entrées et conserver les garanties
55
+
56
+ Aux frontières du logiciel, valider les données externes avec une `DDataStructure`, qui porte leur contrat au runtime et dans les types. Utiliser l'intégration prévue par le module récepteur lorsqu'elle existe. Dans les traitements internes, exploiter les garanties déjà établies, sans refaire une validation pour le seul passage d'une fonction à une autre.
57
+
58
+ Préciser les contraintes utiles : bornes, entier, format, longueur minimale, maximale ou exacte. Une contrainte enrichit le type ; sa seule déclaration ne valide rien au runtime.
59
+
60
+ Choisir la construction selon les informations disponibles :
61
+
62
+ 1. **Littéral ou garantie compatible** : déclaration sûre ou calcul de compatibilité avec `DCommon.cast` ; utiliser `DCommon.infer` si le littéral doit être conservé.
63
+ 2. **Valeur runtime sans preuve** : validation ou fabrique sûre renvoyant un `Either` à traiter ou propager.
64
+ 3. **Refus du compilateur** : vérifier l'inférence et l'origine de la garantie attendue ; ne pas la fabriquer avec `as`, `!` ou un helper sans preuve.
65
+
66
+ `cast` et `infer` calculent une compatibilité de types, sans validation runtime. Pour écrire un contrat de validation, construire une valeur contrainte ou résoudre un refus de compatibilité, lire [Contraintes et validation](references/constraints-and-validation.md). L'[exemple de validation](references/examples/input-validation.ts) montre l'acquisition de garanties depuis une entrée inconnue.
67
+
68
+ Après chaque transformation, suivre le type du résultat : une garantie peut avoir été préservée, renforcée ou perdue. Exploiter les accès garantis aux collections sans garde redondante. Si la cible de `cast` n'est pas inférée dans un appel générique, lire la difficulté d'inférence de la référence avant de modifier les types.
69
+
70
+ ## Distinguer les résultats des défaillances d'environnement
71
+
72
+ Une issue prévisible et exploitable par le traitement appartient au contrat de résultat : réussite en `Right`, refus en `Left`. Cela comprend les validations de données externes, les absences et les manipulations impossibles, y compris techniques. L'information du résultat identifie le cas ; sa valeur transporte les données ou les détails du refus.
73
+
74
+ Dès qu'une branche d'une fonction renvoie un `Right` ou un `Left`, toutes ses branches renvoient un `Either`. Envelopper les valeurs de réussite dans un `Right`, y compris avec `DEither.ok()` pour une réussite sans valeur ; ne pas mélanger des `Either` et des valeurs brutes dans le contrat de retour.
75
+
76
+ Les exceptions de défaillance imprévue émises par les dépendances ou le runtime remontent implicitement. Les fonctions réutilisables n'ajoutent pas de `throw` ; elles propagent ou adaptent leurs `Left`. Discriminer le résultat avant de le déballer.
77
+
78
+ Réserver les `throw` explicites et `OrThrow` à la consommation finale du résultat par la frontière d'exécution : réponse, fin du programme ou exception adaptée. Être appelé depuis cette frontière ne suffit pas à autoriser un `throw`. La rareté ou le coût de propagation d'un refus prévisible ne changent pas cette règle.
79
+
80
+ Avant d'adapter une API qui lève sur un refus prévisible ou d'introduire `OrThrow`, lire [Résultats et erreurs](references/results-and-errors.md) pour choisir le traitement selon la responsabilité de l'appelant. Préférer les déclarations sûres pour les constantes connues ; l'[exemple de propagation](references/examples/error-propagation.ts) conserve les erreurs d'une opération dans le contrat de retour.
@@ -0,0 +1,35 @@
1
+ # Composer une opération
2
+
3
+ ## Forme directe et forme curifiée
4
+
5
+ La forme directe reçoit la donnée et les paramètres. La forme curifiée reçoit les paramètres dans l'étape du pipe, puis retourne la fonction qui recevra la donnée.
6
+
7
+ Lire la surcharge curifiée en distinguant les génériques de l'appel de configuration de ceux de la fonction retournée. Quand cette dernière ne déclare pas ses propres génériques, ses types sont déjà fixés à la configuration ; un appel ultérieur avec la donnée ne les infère pas à nouveau. Les génériques présents sur la surcharge extérieure ne rendent pas la fonction retournée générique.
8
+
9
+ Cette signature indique un usage directement dans `DCommon.pipe` ou `DCommon.asyncPipe`, dont le contexte fournit le type de la donnée lors de la configuration. Écrire l'appel de la forme curifiée à l'intérieur des arguments du pipe. Une fonction préparée dans une variable reste hors de ce contexte, même si cette variable est ensuite utilisée comme étape d'un pipe. Ne pas ajouter annotations, génériques explicites ou casts pour rendre cette préparation typable. Pour réutiliser le traitement, écrire une fonction qui reçoit la donnée et construit son pipe, ou utiliser la forme directe avec cette donnée.
10
+
11
+ Comparer les formes directe et curifiée dans [cet exemple de transformation](examples/composition.ts). Les vérifications de type montrent l'inférence lorsque les appels sont écrits dans le pipe. Le cas à éviter utilise des génériques explicites pour préparer une fonction, puis la passe à un pipe : ce code peut compiler tout en contredisant l'usage attendu.
12
+
13
+ Le pipe suit ici une même donnée : utilisateurs, utilisateurs actifs, noms. Une fonction déjà unaire de l'API peut être passée directement, comme `DString.trim`. Pour une forme curifiée, écrire son appel de configuration dans l'étape. Ne pas supposer que toutes les fonctions exposent les mêmes surcharges.
14
+
15
+ ## Mise en forme des pipes
16
+
17
+ Écrire tous les appels de pipe sur plusieurs lignes, avec chaque argument sur sa propre ligne, une virgule après le dernier argument et la parenthèse de fermeture sur une ligne séparée. Ce format s'applique aussi à une donnée suivie d'une seule étape, comme dans le premier pipe de l'exemple. L'appel qui configure la forme curifiée occupe la ligne de l'étape ; une variable préparée auparavant ne le remplace pas.
18
+
19
+ ## Plusieurs sources indépendantes
20
+
21
+ Quand plusieurs données indépendantes demandent chacune leur propre préparation, les nommer avant de les combiner. Cette préparation concerne les données ; les appels curifiés restent écrits dans les étapes de leur pipe.
22
+
23
+ Voir [la préparation de deux arguments indépendants](examples/independent-inputs.ts).
24
+
25
+ Le résultat de cet appel peut ensuite devenir l'entrée d'un autre pipe si plusieurs transformations se suivent.
26
+
27
+ ## Asynchronisme et résultats
28
+
29
+ `DCommon.asyncPipe` attend chaque étape avant la suivante. Un seul `await` sur le pipe suffit pour obtenir le résultat final.
30
+
31
+ Voir [un enchaînement asynchrone](examples/async-composition.ts).
32
+
33
+ Si chaque étape peut renvoyer un `Either`, utiliser `DEither.rightPipe` ou `DEither.rightAsyncPipe` pour propager automatiquement le premier `Left`. Un pipe ordinaire ne décide pas à lui seul comment traiter un `Left`. Les pipes de `DEither` transmettent la valeur du `Right` à l'étape suivante, et non son wrapper.
34
+
35
+ Pour approfondir, rechercher la currification et la composition des `Either` dans `docs/concepts.llms.md`, depuis la racine AgentKit indiquée dans les instructions du projet.
@@ -0,0 +1,61 @@
1
+ # Contraintes, déclarations et validation
2
+
3
+ ## Une garantie doit avoir une origine
4
+
5
+ Une contrainte exprime dans le typage une propriété de la valeur : entier, borne, longueur ou format. Une intersection cumule les garanties, par exemple `number & DNumber.Integer & DNumber.LessThan<25>`.
6
+
7
+ Déclarer ce type ne valide rien et ne transforme pas la valeur. La garantie vient d'une validation runtime, d'un prédicat qui affine le type, d'une fonction qui préserve cette propriété ou d'un calcul de compatibilité sur une information déjà connue statiquement.
8
+
9
+ ## Entrées : décrire le contrat complet
10
+
11
+ Une donnée reçue à une frontière externe passe par un data parser avant d'être considérée fiable. Une `DDataStructure` porte un schéma commun au runtime et au typage ; ses contraintes précisent le contrat au-delà de la nature de la donnée. Dans les fonctions internes, réutiliser les garanties déjà établies et suivre celles que les transformations conservent.
12
+
13
+ Voir [un contrat et sa validation](examples/input-validation.ts).
14
+
15
+ Choisir les contraintes selon les règles du besoin : bornes inclusives ou exclusives des nombres, minimum, maximum ou longueur exacte des chaînes et tableaux, formats, etc. Chaque contrainte d'une structure doit être compatible avec le type de donnée décrit.
16
+
17
+ Pour les entrées gérées par l'écosystème, chercher comment le module qui les reçoit accepte des structures et lui fournir le contrat. Exploiter ensuite les valeurs déjà validées. À une frontière qui n'offre pas cette intégration, appeler explicitement la validation et traiter son `Either`.
18
+
19
+ Exemples d'intégrations : `DSCommand.createArgument` et `DSCommand.createOption` pour une commande ; `.extract(...)` pour une route `@duplojs/http`. La règle s'applique à tout module qui reçoit des données externes.
20
+
21
+ ## `cast` : compatibilité calculée par TypeScript
22
+
23
+ `DCommon.cast` restitue la valeur sans validation runtime. Le type attendu donne la cible du calcul. Une garantie plus forte peut impliquer une garantie plus faible ; un littéral peut aussi fournir assez d'information.
24
+
25
+ Voir [les conversions de contraintes et les déclarations littérales](examples/cast.ts).
26
+
27
+ Ce calcul de types comble les implications que TypeScript ne déduit pas de lui-même. Il n'y a pas de calcul dynamique de validité lors de l'exécution. Une simple `string` ou un simple `number` provenant du runtime ne prouve pas une longueur, un format ou une borne.
28
+
29
+ Si `cast` émet une erreur, considérer que la compatibilité n'est pas établie. Une règle personnalisée peut ne pas avoir de support de calcul enregistré. Ne pas remplacer ce refus par `as`, une double assertion ou un helper qui fabrique la contrainte sans preuve. Vérifier l'inférence, valider par une structure ou un prédicat adapté, ou utiliser une autre construction sûre.
30
+
31
+ ## `infer` : conserver également le littéral
32
+
33
+ Préférer `cast` dans le cas courant. Utiliser `DCommon.infer` lorsqu'une valeur connue statiquement doit garder son type littéral en plus des contraintes calculées. Cette fonction exige une entrée littérale ; elle ne sert pas à valider une donnée runtime.
34
+
35
+ Voir [la conservation du littéral dans une propriété](examples/infer.ts).
36
+
37
+ ## Difficulté d'inférence : cible d'un paramètre générique direct
38
+
39
+ Lorsque `cast` ou `infer` est passé à un paramètre lui-même générique, TypeScript peut ne pas fournir une cible assez précise au calcul. Si le type attendu n'est pas inféré dans cette situation, l'expliciter avec `satisfies` immédiatement après l'appel. Ce traitement répond à une difficulté de contexte ; il n'est pas nécessaire à chaque utilisation de ces fonctions.
40
+
41
+ Voir [le calcul des contraintes avec un paramètre générique direct](examples/generic-inference.ts).
42
+
43
+ `satisfies` fournit le contexte du calcul ; il ne contourne pas la validation. Une propriété contrainte d'un objet générique peut déjà fournir ce contexte, comme dans [l'exemple de propriété littérale](examples/infer.ts) : ne pas ajouter ce contournement d'inférence partout.
44
+
45
+ ## Déclarations spécialisées et Chrono
46
+
47
+ Les domaines proposent aussi des helpers pour les valeurs connues. Préférer ces déclarations sûres à `OrThrow`.
48
+
49
+ Voir [les déclarations de chemins et de valeurs Chrono](examples/safe-declarations.ts).
50
+
51
+ Vérifier la surcharge réellement utilisée : le type de l'argument détermine si la fonction retourne directement la valeur ou un `Either`.
52
+
53
+ ## Les contraintes simplifient les opérations suivantes
54
+
55
+ Voir [les accès garantis après validation du tableau](examples/guaranteed-array-access.ts).
56
+
57
+ `MinElements<2>` garantit les indices `0` et `1` et l'existence du dernier élément. L'indice `2` reste incertain : un minimum de deux n'impose pas un maximum de deux. Les éléments garantis sont retournés directement, sans `Maybe` ni `undefined` ajouté pour une éventuelle absence. Une borne maximale ou une longueur exacte peut aussi permettre de prouver qu'un indice est absent.
58
+
59
+ Exploiter ces garanties sans garde redondante ni assertion. Respecter cependant le type propre aux éléments : un tableau dont les éléments peuvent eux-mêmes être `undefined` conserve cette possibilité. Après une transformation, suivre les contraintes du résultat ; un filtre peut supprimer des éléments et perdre une garantie de minimum.
60
+
61
+ Pour approfondir, rechercher les contraintes, les data structures, Chrono ou l'intégration du module concerné dans `docs/concepts.llms.md`, depuis la racine AgentKit indiquée par les instructions du projet.
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @title Composer des étapes asynchrones.
3
+ *
4
+ * Attendre le résultat final avec asyncPipe.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import * as DString from "@duplojs/lang/string";
8
+
9
+ declare function loadName(): Promise<string>;
10
+
11
+ const name = await DCommon.asyncPipe(
12
+ loadName(),
13
+ DString.trim,
14
+ DString.toLowerCase,
15
+ );
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @title Établir la compatibilité des contraintes.
3
+ *
4
+ * Convertir une garantie existante ou déclarer une valeur littérale.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import type * as DNumber from "@duplojs/lang/number";
8
+ import type * as DPath from "@duplojs/lang/path";
9
+
10
+ declare const belowTen: number & DNumber.LessThan<10>;
11
+ const belowTwentyFive: number & DNumber.LessThan<25> = DCommon.cast(belowTen);
12
+
13
+ const age: number & DNumber.GreaterThanOrEqual<18> = DCommon.cast(20);
14
+ const path: string & DPath.Path = DCommon.cast("resources/config.json");
15
+
16
+ // Une valeur incompatible ne peut pas acquérir la contrainte par cast.
17
+ // @ts-expect-error 10 ne respecte pas la borne minimale de 18.
18
+ const invalidAge: number & DNumber.GreaterThanOrEqual<18> = DCommon.cast(10);
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @title Composer une transformation.
3
+ *
4
+ * Appels curifiés dans un pipe multiligne, avec inférence depuis la donnée.
5
+ */
6
+ import * as DArray from "@duplojs/lang/array";
7
+ import * as DCommon from "@duplojs/lang/common";
8
+
9
+ declare const users: readonly {
10
+ enabled: boolean;
11
+ name: string;
12
+ }[];
13
+
14
+ const enabledUsers = DArray.filter(users, (user) => user.enabled);
15
+
16
+ // Même avec deux arguments, le pipe place la donnée et l'étape sur deux lignes.
17
+ // L'appel curifié est écrit ici, dans le contexte fourni par le pipe.
18
+ const names = DCommon.pipe(
19
+ users,
20
+ DArray.map((user) => user.name),
21
+ );
22
+
23
+ type _CheckNames = DCommon.ExpectType<typeof names, readonly string[], "strict">;
24
+
25
+ // Plusieurs transformations s'enchaînent avec leurs appels curifiés à leur place.
26
+ const enabledNames = DCommon.pipe(
27
+ users,
28
+ DArray.filter((user) => user.enabled),
29
+ DArray.map((user) => user.name),
30
+ );
31
+
32
+ type _CheckEnabledNames = DCommon.ExpectType<typeof enabledNames, readonly string[], "strict">;
33
+
34
+ // À éviter : les génériques explicites rendent la préparation typable, mais le
35
+ // pipe ajouté ensuite ne déplace pas l'appel de configuration dans son contexte.
36
+ const preparedNames = DArray.map<typeof users, string>((user) => user.name);
37
+ const namesFromPreparedStep = DCommon.pipe(
38
+ users,
39
+ preparedNames,
40
+ );
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @title Valider la configuration au démarrage.
3
+ *
4
+ * Utiliser une exception au point d’initialisation du programme.
5
+ */
6
+ import * as DSCommon from "@duplojs/server/common";
7
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
8
+
9
+ // Initialisation du programme, avant de commencer les traitements.
10
+ const environment = await DSCommon.environmentVariableOrThrow({
11
+ PORT: DDataStructure.number([
12
+ DDataStructure.integer(),
13
+ DDataStructure.greaterThanOrEqual(1),
14
+ DDataStructure.lessThanOrEqual(65535),
15
+ ]),
16
+ });
17
+
18
+ // Ici, l'initialisation exige un dossier de travail accessible pour démarrer.
19
+ const currentDirectory = DSCommon.getCurrentWorkDirectoryOrThrow();
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @title Propager les échecs dans le contrat de retour.
3
+ *
4
+ * Conserver les Left d’une opération dans une fonction réutilisable.
5
+ */
6
+ import * as DEither from "@duplojs/lang/either";
7
+ import type * as DCommon from "@duplojs/lang/common";
8
+ import * as DSFile from "@duplojs/server/file";
9
+ import type * as DPath from "@duplojs/lang/path";
10
+
11
+ async function loadText(path: string & DPath.Path) {
12
+ const result = await DSFile.readTextFile(path);
13
+ if (DEither.isLeft(result)) {
14
+ return result;
15
+ }
16
+
17
+ return DEither.right("text-loaded", DEither.unwrapRight(result));
18
+ }
19
+
20
+ type _CheckResult = DCommon.ExpectType<
21
+ Awaited<ReturnType<typeof loadText>>,
22
+ Exclude<DSFile.ReadTextFileResult, DEither.Right> | DEither.Right<"text-loaded", string>,
23
+ "strict"
24
+ >;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @title Fournir une cible de calcul en contexte générique.
3
+ *
4
+ * Utiliser satisfies avec cast et infer sur un paramètre générique direct.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import type * as DString from "@duplojs/lang/string";
8
+
9
+ declare function defineName<GenericName extends string & DString.MinCharacters<3>>(
10
+ name: GenericName,
11
+ ): GenericName;
12
+
13
+ const name = defineName(
14
+ DCommon.cast("Alice") satisfies string & DString.MinCharacters<3>,
15
+ );
16
+
17
+ const literalName = defineName(
18
+ DCommon.infer("Alice") satisfies string & DString.MinCharacters<3>,
19
+ );
20
+
21
+ type _CheckName = DCommon.ExpectType<
22
+ typeof name,
23
+ string & DString.MinCharacters<3>,
24
+ "strict"
25
+ >;
26
+
27
+ type _CheckLiteralName = DCommon.ExpectType<
28
+ typeof literalName,
29
+ "Alice" & DString.MinCharacters<3>,
30
+ "strict"
31
+ >;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @title Exploiter une taille minimale de tableau.
3
+ *
4
+ * Distinguer les indices garantis et les accès potentiellement absents.
5
+ */
6
+ import * as DArray from "@duplojs/lang/array";
7
+ import type * as DCommon from "@duplojs/lang/common";
8
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
9
+ import * as DEither from "@duplojs/lang/either";
10
+
11
+ const namesStructure = DDataStructure.array(
12
+ DDataStructure.string(),
13
+ [DDataStructure.minElements(2)],
14
+ );
15
+
16
+ declare const input: unknown;
17
+ const result = namesStructure.check(input);
18
+ if (DEither.isRight(result)) {
19
+ const names = DEither.unwrapRight(result);
20
+ const first = DArray.first(names);
21
+ const last = DArray.last(names);
22
+ const atZero = DArray.at(names, 0);
23
+ const atOne = DArray.at(names, 1);
24
+ const atTwo = DArray.at(names, 2);
25
+
26
+ type _CheckAccess = DCommon.ExpectType<
27
+ [typeof first, typeof last, typeof atZero, typeof atOne, typeof atTwo],
28
+ [string, string, string, string, string | undefined],
29
+ "strict"
30
+ >;
31
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @title Combiner des sources indépendantes.
3
+ *
4
+ * Préparer les arguments séparément avant leur combinaison.
5
+ */
6
+ import * as DArray from "@duplojs/lang/array";
7
+ import * as DString from "@duplojs/lang/string";
8
+
9
+ declare const users: readonly {
10
+ enabled: boolean;
11
+ name: string;
12
+ }[];
13
+ declare const rawSearch: string;
14
+ declare function searchUsers(names: readonly string[], search: string): readonly string[];
15
+
16
+ const names = DArray.map(users, (user) => user.name);
17
+ const search = DString.trim(rawSearch);
18
+ const matches = searchUsers(names, search);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @title Conserver une valeur littérale contrainte.
3
+ *
4
+ * Garder le littéral lors de la déclaration d’une propriété.
5
+ */
6
+ import * as DCommon from "@duplojs/lang/common";
7
+ import type * as DString from "@duplojs/lang/string";
8
+
9
+ declare function defineSettings<GenericSettings extends {
10
+ name: string & DString.MinCharacters<3>;
11
+ }>(settings: GenericSettings): GenericSettings;
12
+
13
+ const settings = defineSettings({
14
+ name: DCommon.infer("Alice"),
15
+ });
16
+
17
+ type _CheckName = DCommon.ExpectType<
18
+ typeof settings.name,
19
+ "Alice" & DString.MinCharacters<3>,
20
+ "strict"
21
+ >;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @title Valider un contrat de données.
3
+ *
4
+ * Décrire les contraintes puis discriminer le résultat de validation.
5
+ */
6
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
7
+ import * as DEither from "@duplojs/lang/either";
8
+ import type * as DCommon from "@duplojs/lang/common";
9
+
10
+ const requestStructure = DDataStructure.object({
11
+ name: DDataStructure.string([
12
+ DDataStructure.minCharacters(3),
13
+ DDataStructure.maxCharacters(40),
14
+ ]),
15
+ age: DDataStructure.number([
16
+ DDataStructure.integer(),
17
+ DDataStructure.greaterThanOrEqual(18),
18
+ ]),
19
+ tags: DDataStructure.array(
20
+ DDataStructure.string(),
21
+ [DDataStructure.minElements(2)],
22
+ ),
23
+ });
24
+
25
+ type Request = DDataStructure.StructureValue<typeof requestStructure>;
26
+
27
+ function validateRequest(input: unknown) {
28
+ return requestStructure.check(input);
29
+ }
30
+
31
+ declare const input: unknown;
32
+ const result = validateRequest(input);
33
+ if (DEither.isRight(result)) {
34
+ const request = DEither.unwrapRight(result);
35
+
36
+ type _CheckRequest = DCommon.ExpectType<typeof request, Request, "strict">;
37
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @title Déclarer une valeur connue ou traiter une entrée runtime.
3
+ *
4
+ * Distinguer les déclarations sûres et les fabriques renvoyant un Either.
5
+ */
6
+ import * as DChrono from "@duplojs/lang/chrono";
7
+ import type * as DCommon from "@duplojs/lang/common";
8
+ import * as DPath from "@duplojs/lang/path";
9
+
10
+ const configPath = DPath.declarePath("resources/config.json");
11
+ const releaseDate = DChrono.createDate("2026-09-30");
12
+ const timeout = DChrono.createTime(2, "hour");
13
+
14
+ declare const dateInput: string;
15
+ declare const timeInput: number;
16
+
17
+ // Les surcharges runtime renvoient des Either à traiter ou propager.
18
+ const dateResult = DChrono.createDate({ value: dateInput });
19
+ const timeResult = DChrono.createTime(timeInput);
20
+
21
+ type _CheckCreation = DCommon.ExpectType<
22
+ [typeof releaseDate, typeof timeout, typeof dateResult, typeof timeResult],
23
+ [DChrono.TheDate, DChrono.TheTime, DChrono.MayBeDate, DChrono.MayBeTime],
24
+ "strict"
25
+ >;