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

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 (485) hide show
  1. package/README.md +11 -11
  2. package/dist/bin/index.mjs +2 -2
  3. package/dist/bin/installSkill/index.d.ts +2 -0
  4. package/dist/bin/{install → installSkill}/index.mjs +3 -3
  5. package/dist/bin/{install → installSkill}/skill.mjs +1 -1
  6. package/dist/bin/setup/instructions.d.ts +1 -1
  7. package/docs/API/10-lang/10-array/10-at.ts +4 -4
  8. package/docs/API/10-lang/10-array/10-coalescing.ts +3 -2
  9. package/docs/API/10-lang/10-array/10-indexOf.ts +1 -1
  10. package/docs/API/10-lang/10-array/10-is.ts +17 -3
  11. package/docs/API/10-lang/10-array/10-lastIndexOf.ts +1 -1
  12. package/docs/API/10-lang/10-chrono/10-addTime.ts +1 -1
  13. package/docs/API/10-lang/10-chrono/10-closestTo.ts +5 -8
  14. package/docs/API/10-lang/10-chrono/10-isDate.ts +15 -2
  15. package/docs/API/10-lang/10-chrono/10-isSerializedTheDate.ts +16 -1
  16. package/docs/API/10-lang/10-chrono/10-isSerializedTheTime.ts +16 -1
  17. package/docs/API/10-lang/10-chrono/10-isTime.ts +15 -2
  18. package/docs/API/10-lang/10-chrono/10-maxDate.ts +4 -8
  19. package/docs/API/10-lang/10-chrono/10-maxTime.ts +4 -8
  20. package/docs/API/10-lang/10-chrono/10-minDate.ts +4 -8
  21. package/docs/API/10-lang/10-chrono/10-minTime.ts +4 -8
  22. package/docs/API/10-lang/10-chrono/10-sortDates.ts +6 -8
  23. package/docs/API/10-lang/10-chrono/10-sortTimes.ts +6 -8
  24. package/docs/API/10-lang/10-chrono/10-subtractTime.ts +1 -1
  25. package/docs/API/10-lang/10-common/10-and.ts +6 -0
  26. package/docs/API/10-lang/10-common/10-createQueue.ts +4 -3
  27. package/docs/API/10-lang/10-common/10-createTransformer.ts +1 -1
  28. package/docs/API/10-lang/10-common/10-equal.ts +6 -0
  29. package/docs/API/10-lang/10-common/10-falsy.ts +19 -0
  30. package/docs/API/10-lang/10-common/10-instanceOf.ts +14 -3
  31. package/docs/API/10-lang/10-common/10-isType.ts +6 -0
  32. package/docs/API/10-lang/10-common/10-justExec.ts +3 -3
  33. package/docs/API/10-lang/10-common/10-or.ts +17 -3
  34. package/docs/API/10-lang/10-common/10-tap.ts +28 -0
  35. package/docs/API/10-lang/10-common/10-toJSON.ts +1 -1
  36. package/docs/API/10-lang/10-common/10-toNative.ts +1 -1
  37. package/docs/API/10-lang/10-common/10-toRegExp.ts +1 -1
  38. package/docs/API/10-lang/10-common/10-truthy.ts +19 -0
  39. package/docs/API/10-lang/10-common/10-whenNot.ts +44 -13
  40. package/docs/API/10-lang/10-common/index.llms.md +4 -0
  41. package/docs/API/10-lang/10-dataStructure/10-typeStructureIdentifier.ts +2 -2
  42. package/docs/API/10-lang/10-either/10-asyncGroup.ts +1 -1
  43. package/docs/API/10-lang/10-either/10-asyncSafeCallback.ts +4 -2
  44. package/docs/API/10-lang/10-either/10-extractErrorInLeft.ts +45 -0
  45. package/docs/API/10-lang/10-either/10-forwardAssertsSelection.ts +1 -1
  46. package/docs/API/10-lang/10-either/10-group.ts +1 -1
  47. package/docs/API/10-lang/10-either/10-hasInformation.ts +6 -0
  48. package/docs/API/10-lang/10-either/10-isLeft.ts +10 -1
  49. package/docs/API/10-lang/10-either/10-isRight.ts +10 -1
  50. package/docs/API/10-lang/10-either/10-isSelected.ts +13 -1
  51. package/docs/API/10-lang/10-either/10-keepAsRightSelection.ts +1 -1
  52. package/docs/API/10-lang/10-either/10-matchInformation.ts +7 -5
  53. package/docs/API/10-lang/10-either/10-matchInformationCombination.ts +61 -0
  54. package/docs/API/10-lang/10-either/10-matchInformationCombinationOtherwise.ts +62 -0
  55. package/docs/API/10-lang/10-either/10-matchInformationOtherwise.ts +7 -5
  56. package/docs/API/10-lang/10-either/10-rightAsyncPipe.ts +2 -1
  57. package/docs/API/10-lang/10-either/10-rightPipe.ts +1 -1
  58. package/docs/API/10-lang/10-either/10-safeCallback.ts +1 -1
  59. package/docs/API/10-lang/10-either/10-unwrapOr.ts +2 -2
  60. package/docs/API/10-lang/10-either/10-unwrapOtherwise.ts +2 -2
  61. package/docs/API/10-lang/10-either/10-whenHasInformation.ts +4 -3
  62. package/docs/API/10-lang/10-either/10-whenHasInformationOtherwise.ts +5 -5
  63. package/docs/API/10-lang/10-either/10-whenIsLeft.ts +2 -2
  64. package/docs/API/10-lang/10-either/10-whenIsLeftOtherwise.ts +5 -5
  65. package/docs/API/10-lang/10-either/10-whenIsRight.ts +2 -2
  66. package/docs/API/10-lang/10-either/10-whenIsRightOtherwise.ts +7 -7
  67. package/docs/API/10-lang/10-either/10-whenIsSelected.ts +5 -5
  68. package/docs/API/10-lang/10-either/10-whenIsSelectedOtherwise.ts +5 -5
  69. package/docs/API/10-lang/10-either/index.llms.md +12 -0
  70. package/docs/API/10-lang/10-generator/10-asyncConcat.ts +7 -10
  71. package/docs/API/10-lang/10-generator/10-asyncFlat.ts +6 -6
  72. package/docs/API/10-lang/10-generator/10-concat.ts +3 -3
  73. package/docs/API/10-lang/10-generator/10-flat.ts +2 -2
  74. package/docs/API/10-lang/10-generator/10-map.ts +1 -1
  75. package/docs/API/10-lang/10-generator/10-reduce.ts +1 -1
  76. package/docs/API/10-lang/10-number/10-betweenThan.ts +43 -0
  77. package/docs/API/10-lang/10-number/10-betweenThanOrEqual.ts +43 -0
  78. package/docs/API/10-lang/10-number/10-greaterThan.ts +35 -0
  79. package/docs/API/10-lang/10-number/10-greaterThanOrEqual.ts +35 -0
  80. package/docs/API/10-lang/10-number/10-isEven.ts +33 -0
  81. package/docs/API/10-lang/10-number/10-isInteger.ts +33 -0
  82. package/docs/API/10-lang/10-number/10-isMultipleOf.ts +35 -0
  83. package/docs/API/10-lang/10-number/10-isNegative.ts +33 -0
  84. package/docs/API/10-lang/10-number/10-isNotZero.ts +33 -0
  85. package/docs/API/10-lang/10-number/10-isOdd.ts +33 -0
  86. package/docs/API/10-lang/10-number/10-isPositive.ts +33 -0
  87. package/docs/API/10-lang/10-number/10-isSafe.ts +33 -0
  88. package/docs/API/10-lang/10-number/10-isStrictNegative.ts +34 -0
  89. package/docs/API/10-lang/10-number/10-isStrictPositive.ts +33 -0
  90. package/docs/API/10-lang/10-number/10-lessThan.ts +35 -0
  91. package/docs/API/10-lang/10-number/10-lessThanOrEqual.ts +35 -0
  92. package/docs/API/10-lang/10-number/10-max.ts +19 -0
  93. package/docs/API/10-lang/10-number/10-maxOf.ts +19 -0
  94. package/docs/API/10-lang/10-number/10-min.ts +19 -0
  95. package/docs/API/10-lang/10-number/10-minOf.ts +19 -0
  96. package/docs/API/10-lang/10-number/10-sort.ts +19 -0
  97. package/docs/API/10-lang/10-number/10-sum.ts +19 -0
  98. package/docs/API/10-lang/10-number/index.llms.md +92 -0
  99. package/docs/API/10-lang/10-number/index.md +3 -0
  100. package/docs/API/10-lang/10-object/10-assign.ts +41 -0
  101. package/docs/API/10-lang/10-object/10-countKeys.ts +15 -0
  102. package/docs/API/10-lang/10-object/10-deepDiscriminate.ts +63 -0
  103. package/docs/API/10-lang/10-object/10-deepOverride.ts +35 -0
  104. package/docs/API/10-lang/10-object/10-discriminate.ts +55 -0
  105. package/docs/API/10-lang/10-object/10-discriminateEntryKey.ts +43 -0
  106. package/docs/API/10-lang/10-object/10-discriminateEntryValue.ts +44 -0
  107. package/docs/API/10-lang/10-object/10-entries.ts +19 -0
  108. package/docs/API/10-lang/10-object/10-entry.ts +17 -0
  109. package/docs/API/10-lang/10-object/10-fromEntries.ts +23 -0
  110. package/docs/API/10-lang/10-object/10-getDeepProperty.ts +26 -0
  111. package/docs/API/10-lang/10-object/10-getProperty.ts +24 -0
  112. package/docs/API/10-lang/10-object/10-hasKeys.ts +43 -0
  113. package/docs/API/10-lang/10-object/10-isSimple.ts +38 -0
  114. package/docs/API/10-lang/10-object/10-keys.ts +19 -0
  115. package/docs/API/10-lang/10-object/10-omit.ts +39 -0
  116. package/docs/API/10-lang/10-object/10-override.ts +24 -0
  117. package/docs/API/10-lang/10-object/10-pick.ts +41 -0
  118. package/docs/API/10-lang/10-object/10-to.ts +40 -0
  119. package/docs/API/10-lang/10-object/10-transformProperties.ts +43 -0
  120. package/docs/API/10-lang/10-object/10-transformProperty.ts +39 -0
  121. package/docs/API/10-lang/10-object/10-values.ts +19 -0
  122. package/docs/API/10-lang/10-object/index.llms.md +92 -0
  123. package/docs/API/10-lang/10-object/index.md +3 -0
  124. package/docs/API/10-lang/10-path/10-computeRelative.ts +19 -0
  125. package/docs/API/10-lang/10-path/10-concatSegment.ts +28 -0
  126. package/docs/API/10-lang/10-path/10-create.ts +21 -0
  127. package/docs/API/10-lang/10-path/10-createAbsolute.ts +21 -0
  128. package/docs/API/10-lang/10-path/10-createAbsoluteOrThrow.ts +16 -0
  129. package/docs/API/10-lang/10-path/10-createMatcher.ts +50 -0
  130. package/docs/API/10-lang/10-path/10-createOrThrow.ts +16 -0
  131. package/docs/API/10-lang/10-path/10-createSegment.ts +26 -0
  132. package/docs/API/10-lang/10-path/10-createSegmentOrThrow.ts +16 -0
  133. package/docs/API/10-lang/10-path/10-declareAbsolutePath.ts +15 -0
  134. package/docs/API/10-lang/10-path/10-declarePath.ts +15 -0
  135. package/docs/API/10-lang/10-path/10-declareSegment.ts +15 -0
  136. package/docs/API/10-lang/10-path/10-getBaseName.ts +22 -0
  137. package/docs/API/10-lang/10-path/10-getExtensionName.ts +22 -0
  138. package/docs/API/10-lang/10-path/10-getParentFolderPath.ts +25 -0
  139. package/docs/API/10-lang/10-path/10-is.ts +46 -0
  140. package/docs/API/10-lang/10-path/10-isAbsolute.ts +46 -0
  141. package/docs/API/10-lang/10-path/10-isSegment.ts +42 -0
  142. package/docs/API/10-lang/10-path/10-normalize.ts +26 -0
  143. package/docs/API/10-lang/10-path/10-resolveFrom.ts +37 -0
  144. package/docs/API/10-lang/10-path/10-resolveRelative.ts +23 -0
  145. package/docs/API/10-lang/10-path/index.llms.md +88 -0
  146. package/docs/API/10-lang/10-path/index.md +3 -0
  147. package/docs/API/10-lang/10-pattern/10-exhaustive.ts +26 -0
  148. package/docs/API/10-lang/10-pattern/10-isMatch.ts +72 -0
  149. package/docs/API/10-lang/10-pattern/10-match.ts +133 -0
  150. package/docs/API/10-lang/10-pattern/10-matchWithEntity.ts +49 -0
  151. package/docs/API/10-lang/10-pattern/10-matchWithEntityOtherwise.ts +55 -0
  152. package/docs/API/10-lang/10-pattern/10-matchWithError.ts +45 -0
  153. package/docs/API/10-lang/10-pattern/10-matchWithErrorOtherwise.ts +48 -0
  154. package/docs/API/10-lang/10-pattern/10-matchWithFact.ts +49 -0
  155. package/docs/API/10-lang/10-pattern/10-matchWithFactOtherwise.ts +49 -0
  156. package/docs/API/10-lang/10-pattern/10-matchWithNumber.ts +33 -0
  157. package/docs/API/10-lang/10-pattern/10-matchWithNumberOtherwise.ts +37 -0
  158. package/docs/API/10-lang/10-pattern/10-matchWithString.ts +34 -0
  159. package/docs/API/10-lang/10-pattern/10-matchWithStringOtherwise.ts +35 -0
  160. package/docs/API/10-lang/10-pattern/10-matchWithTaggedObject.ts +43 -0
  161. package/docs/API/10-lang/10-pattern/10-matchWithTaggedObjectOtherwise.ts +49 -0
  162. package/docs/API/10-lang/10-pattern/10-otherwise.ts +28 -0
  163. package/docs/API/10-lang/10-pattern/10-union.ts +47 -0
  164. package/docs/API/10-lang/10-pattern/10-when.ts +46 -0
  165. package/docs/API/10-lang/10-pattern/10-whenNot.ts +123 -0
  166. package/docs/API/10-lang/10-pattern/index.llms.md +80 -0
  167. package/docs/API/10-lang/10-pattern/index.md +3 -0
  168. package/docs/API/10-lang/10-printer/10-bold.ts +12 -0
  169. package/docs/API/10-lang/10-printer/10-colorized.ts +18 -0
  170. package/docs/API/10-lang/10-printer/10-colorizedBold.ts +18 -0
  171. package/docs/API/10-lang/10-printer/10-primitives.md +19 -0
  172. package/docs/API/10-lang/10-printer/10-renderLine.ts +36 -0
  173. package/docs/API/10-lang/10-printer/10-renderParagraph.ts +37 -0
  174. package/docs/API/10-lang/10-printer/index.llms.md +29 -0
  175. package/docs/API/10-lang/10-printer/index.md +3 -0
  176. package/docs/API/10-lang/10-string/10-at.ts +18 -0
  177. package/docs/API/10-lang/10-string/10-capitalize.ts +18 -0
  178. package/docs/API/10-lang/10-string/10-charAt.ts +18 -0
  179. package/docs/API/10-lang/10-string/10-concat.ts +18 -0
  180. package/docs/API/10-lang/10-string/10-endsWith.ts +33 -0
  181. package/docs/API/10-lang/10-string/10-extract.ts +18 -0
  182. package/docs/API/10-lang/10-string/10-extractAll.ts +18 -0
  183. package/docs/API/10-lang/10-string/10-first.ts +17 -0
  184. package/docs/API/10-lang/10-string/10-includes.ts +33 -0
  185. package/docs/API/10-lang/10-string/10-indexOf.ts +17 -0
  186. package/docs/API/10-lang/10-string/10-isComposedOf.ts +33 -0
  187. package/docs/API/10-lang/10-string/10-isEmail.ts +56 -0
  188. package/docs/API/10-lang/10-string/10-isIn.ts +34 -0
  189. package/docs/API/10-lang/10-string/10-isKeyof.ts +37 -0
  190. package/docs/API/10-lang/10-string/10-isNotEmpty.ts +32 -0
  191. package/docs/API/10-lang/10-string/10-isNumber.ts +32 -0
  192. package/docs/API/10-lang/10-string/10-isTrimmed.ts +33 -0
  193. package/docs/API/10-lang/10-string/10-isUrl.ts +31 -0
  194. package/docs/API/10-lang/10-string/10-isUuid.ts +31 -0
  195. package/docs/API/10-lang/10-string/10-join.ts +18 -0
  196. package/docs/API/10-lang/10-string/10-last.ts +17 -0
  197. package/docs/API/10-lang/10-string/10-lastIndexOf.ts +17 -0
  198. package/docs/API/10-lang/10-string/10-length.ts +18 -0
  199. package/docs/API/10-lang/10-string/10-lengthEqual.ts +33 -0
  200. package/docs/API/10-lang/10-string/10-maxCharacters.ts +33 -0
  201. package/docs/API/10-lang/10-string/10-minCharacters.ts +33 -0
  202. package/docs/API/10-lang/10-string/10-normalize.ts +17 -0
  203. package/docs/API/10-lang/10-string/10-padEnd.ts +17 -0
  204. package/docs/API/10-lang/10-string/10-padStart.ts +17 -0
  205. package/docs/API/10-lang/10-string/10-pop.ts +17 -0
  206. package/docs/API/10-lang/10-string/10-prepend.ts +17 -0
  207. package/docs/API/10-lang/10-string/10-repeat.ts +17 -0
  208. package/docs/API/10-lang/10-string/10-replace.ts +18 -0
  209. package/docs/API/10-lang/10-string/10-replaceAll.ts +17 -0
  210. package/docs/API/10-lang/10-string/10-search.ts +17 -0
  211. package/docs/API/10-lang/10-string/10-shift.ts +17 -0
  212. package/docs/API/10-lang/10-string/10-slice.ts +17 -0
  213. package/docs/API/10-lang/10-string/10-sort.ts +19 -0
  214. package/docs/API/10-lang/10-string/10-sortCompare.ts +17 -0
  215. package/docs/API/10-lang/10-string/10-split.ts +34 -0
  216. package/docs/API/10-lang/10-string/10-startsWith.ts +33 -0
  217. package/docs/API/10-lang/10-string/10-stringify.ts +11 -0
  218. package/docs/API/10-lang/10-string/10-substring.ts +17 -0
  219. package/docs/API/10-lang/10-string/10-test.ts +17 -0
  220. package/docs/API/10-lang/10-string/10-to.ts +11 -0
  221. package/docs/API/10-lang/10-string/10-toLowerCase.ts +17 -0
  222. package/docs/API/10-lang/10-string/10-toUpperCase.ts +17 -0
  223. package/docs/API/10-lang/10-string/10-trim.ts +17 -0
  224. package/docs/API/10-lang/10-string/10-trimEnd.ts +17 -0
  225. package/docs/API/10-lang/10-string/10-trimStart.ts +17 -0
  226. package/docs/API/10-lang/10-string/10-uncapitalize.ts +17 -0
  227. package/docs/API/10-lang/10-string/index.llms.md +208 -0
  228. package/docs/API/10-lang/10-string/index.md +3 -0
  229. package/docs/API/10-lang/10-tuple/10-from.ts +50 -0
  230. package/docs/API/10-lang/10-tuple/10-map.ts +37 -0
  231. package/docs/API/10-lang/10-tuple/index.llms.md +12 -0
  232. package/docs/API/10-lang/10-tuple/index.md +3 -0
  233. package/docs/API/40-json-web-token/10-tokenHandler/10-createTokenHandler.ts +160 -0
  234. package/docs/API/40-json-web-token/10-tokenHandler/index.llms.md +8 -0
  235. package/docs/API/40-json-web-token/10-tokenHandler/index.md +3 -0
  236. package/docs/API/40-json-web-token/20-signer/10-createHS256.ts +24 -0
  237. package/docs/API/40-json-web-token/20-signer/10-createHS512.ts +24 -0
  238. package/docs/API/40-json-web-token/20-signer/10-createRS256.ts +28 -0
  239. package/docs/API/40-json-web-token/20-signer/10-createRS512.ts +28 -0
  240. package/docs/API/40-json-web-token/20-signer/10-factory.ts +29 -0
  241. package/docs/API/40-json-web-token/20-signer/index.llms.md +24 -0
  242. package/docs/API/40-json-web-token/20-signer/index.md +3 -0
  243. package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP.ts +26 -0
  244. package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP256.ts +26 -0
  245. package/docs/API/40-json-web-token/30-cipher/10-factory.ts +29 -0
  246. package/docs/API/40-json-web-token/30-cipher/index.llms.md +16 -0
  247. package/docs/API/40-json-web-token/30-cipher/index.md +3 -0
  248. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.decrypt.ts +17 -0
  249. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.encrypt.ts +11 -0
  250. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.generateInitializationVector.ts +9 -0
  251. package/docs/API/40-json-web-token/40-utils/10-HMAC.sign.ts +13 -0
  252. package/docs/API/40-json-web-token/40-utils/10-HMAC.verify.ts +11 -0
  253. package/docs/API/40-json-web-token/40-utils/10-RSA.sign.ts +14 -0
  254. package/docs/API/40-json-web-token/40-utils/10-RSA.verify.ts +13 -0
  255. package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.decrypt.ts +13 -0
  256. package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.encrypt.ts +10 -0
  257. package/docs/API/40-json-web-token/40-utils/10-decodeBase64.ts +9 -0
  258. package/docs/API/40-json-web-token/40-utils/10-decodeBase64Url.ts +9 -0
  259. package/docs/API/40-json-web-token/40-utils/10-decodeText.ts +9 -0
  260. package/docs/API/40-json-web-token/40-utils/10-encodeBase64.ts +9 -0
  261. package/docs/API/40-json-web-token/40-utils/10-encodeBase64Url.ts +9 -0
  262. package/docs/API/40-json-web-token/40-utils/10-encodeText.ts +9 -0
  263. package/docs/API/40-json-web-token/40-utils/10-isBase64Url.ts +11 -0
  264. package/docs/API/40-json-web-token/40-utils/10-jsonParse.ts +11 -0
  265. package/docs/API/40-json-web-token/40-utils/10-pemToBinary.ts +11 -0
  266. package/docs/API/40-json-web-token/40-utils/index.llms.md +76 -0
  267. package/docs/API/40-json-web-token/40-utils/index.md +3 -0
  268. package/docs/API/40-json-web-token/index.md +3 -0
  269. package/docs/API/50-form/10-vue/10-construction/10-createForm.ts +48 -0
  270. package/docs/API/50-form/10-vue/10-construction/10-createFormField.ts +66 -0
  271. package/docs/API/50-form/10-vue/10-construction/10-createGridTemplates.ts +39 -0
  272. package/docs/API/50-form/10-vue/10-construction/10-createInput.ts +46 -0
  273. package/docs/API/50-form/10-vue/10-construction/10-createTemplate.ts +36 -0
  274. package/docs/API/50-form/10-vue/10-construction/fixtures/AddressInput.vue +19 -0
  275. package/docs/API/50-form/10-vue/10-construction/index.llms.md +24 -0
  276. package/docs/API/50-form/10-vue/10-construction/index.md +3 -0
  277. package/docs/API/50-form/10-vue/20-layouts/10-useCheckLayout.ts +40 -0
  278. package/docs/API/50-form/10-vue/20-layouts/10-useDisabledLayout.ts +34 -0
  279. package/docs/API/50-form/10-vue/20-layouts/10-useMultiLayout.ts +32 -0
  280. package/docs/API/50-form/10-vue/20-layouts/10-useRepeatLayout.ts +34 -0
  281. package/docs/API/50-form/10-vue/20-layouts/10-useSectionLayout.ts +20 -0
  282. package/docs/API/50-form/10-vue/20-layouts/10-useSlotLayout.ts +37 -0
  283. package/docs/API/50-form/10-vue/20-layouts/10-useStepLayout.ts +31 -0
  284. package/docs/API/50-form/10-vue/20-layouts/10-useUnionLayout.ts +48 -0
  285. package/docs/API/50-form/10-vue/20-layouts/index.llms.md +36 -0
  286. package/docs/API/50-form/10-vue/20-layouts/index.md +3 -0
  287. package/docs/API/50-form/10-vue/30-designSystem/10-useCheckbox.ts +13 -0
  288. package/docs/API/50-form/10-vue/30-designSystem/10-useCheckboxPolicy.ts +18 -0
  289. package/docs/API/50-form/10-vue/30-designSystem/10-useDateInput.ts +20 -0
  290. package/docs/API/50-form/10-vue/30-designSystem/10-useDualRangeInput.ts +27 -0
  291. package/docs/API/50-form/10-vue/30-designSystem/10-useFileInput.ts +23 -0
  292. package/docs/API/50-form/10-vue/30-designSystem/10-useNumberInput.ts +18 -0
  293. package/docs/API/50-form/10-vue/30-designSystem/10-useRadioGroup.ts +31 -0
  294. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeDateInput.ts +23 -0
  295. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeInput.ts +18 -0
  296. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeTimeInput.ts +23 -0
  297. package/docs/API/50-form/10-vue/30-designSystem/10-useSelectInput.ts +31 -0
  298. package/docs/API/50-form/10-vue/30-designSystem/10-useTextInput.ts +14 -0
  299. package/docs/API/50-form/10-vue/30-designSystem/10-useTextareaInput.ts +14 -0
  300. package/docs/API/50-form/10-vue/30-designSystem/10-useTimeInput.ts +20 -0
  301. package/docs/API/50-form/10-vue/30-designSystem/20-components.md +11 -0
  302. package/docs/API/50-form/10-vue/30-designSystem/index.llms.md +65 -0
  303. package/docs/API/50-form/10-vue/30-designSystem/index.md +3 -0
  304. package/docs/API/50-form/10-vue/fixtures/templates.ts +20 -0
  305. package/docs/API/50-form/10-vue/index.md +3 -0
  306. package/docs/API/50-form/index.md +3 -0
  307. package/docs/API/60-playwright/10-construction/10-createComponent.ts +47 -0
  308. package/docs/API/60-playwright/10-construction/10-createComponentInteraction.ts +28 -0
  309. package/docs/API/60-playwright/10-construction/10-createPage.ts +34 -0
  310. package/docs/API/60-playwright/10-construction/10-createStepWrapper.ts +23 -0
  311. package/docs/API/60-playwright/10-construction/10-createWebsite.ts +57 -0
  312. package/docs/API/60-playwright/10-construction/10-initClient.ts +38 -0
  313. package/docs/API/60-playwright/10-construction/index.llms.md +28 -0
  314. package/docs/API/60-playwright/10-construction/index.md +3 -0
  315. package/docs/API/60-playwright/20-actions/10-check.ts +9 -0
  316. package/docs/API/60-playwright/20-actions/10-clear.ts +9 -0
  317. package/docs/API/60-playwright/20-actions/10-click.ts +9 -0
  318. package/docs/API/60-playwright/20-actions/10-dragTo.ts +10 -0
  319. package/docs/API/60-playwright/20-actions/10-extractContent.ts +10 -0
  320. package/docs/API/60-playwright/20-actions/10-fill.ts +9 -0
  321. package/docs/API/60-playwright/20-actions/10-focus.ts +9 -0
  322. package/docs/API/60-playwright/20-actions/10-forceClick.ts +10 -0
  323. package/docs/API/60-playwright/20-actions/10-hover.ts +9 -0
  324. package/docs/API/60-playwright/20-actions/10-press.ts +9 -0
  325. package/docs/API/60-playwright/20-actions/10-selectOption.ts +10 -0
  326. package/docs/API/60-playwright/20-actions/10-type.ts +10 -0
  327. package/docs/API/60-playwright/20-actions/10-uncheck.ts +9 -0
  328. package/docs/API/60-playwright/20-actions/10-withStep.ts +10 -0
  329. package/docs/API/60-playwright/20-actions/index.llms.md +60 -0
  330. package/docs/API/60-playwright/20-actions/index.md +3 -0
  331. package/docs/API/60-playwright/30-assertions/10-toBeBusy.ts +10 -0
  332. package/docs/API/60-playwright/30-assertions/10-toBeChecked.ts +9 -0
  333. package/docs/API/60-playwright/30-assertions/10-toBeDisabled.ts +9 -0
  334. package/docs/API/60-playwright/30-assertions/10-toBeEnabled.ts +9 -0
  335. package/docs/API/60-playwright/30-assertions/10-toBeHidden.ts +9 -0
  336. package/docs/API/60-playwright/30-assertions/10-toBeNotBusy.ts +10 -0
  337. package/docs/API/60-playwright/30-assertions/10-toBeVisible.ts +10 -0
  338. package/docs/API/60-playwright/30-assertions/10-toContainText.ts +9 -0
  339. package/docs/API/60-playwright/30-assertions/10-toHaveAttribute.ts +12 -0
  340. package/docs/API/60-playwright/30-assertions/10-toHaveClass.ts +9 -0
  341. package/docs/API/60-playwright/30-assertions/10-toHaveNoText.ts +10 -0
  342. package/docs/API/60-playwright/30-assertions/10-toHaveQuantity.ts +20 -0
  343. package/docs/API/60-playwright/30-assertions/10-toHaveText.ts +9 -0
  344. package/docs/API/60-playwright/30-assertions/10-toHaveValue.ts +9 -0
  345. package/docs/API/60-playwright/30-assertions/10-withStep.ts +10 -0
  346. package/docs/API/60-playwright/30-assertions/index.llms.md +64 -0
  347. package/docs/API/60-playwright/30-assertions/index.md +3 -0
  348. package/docs/API/60-playwright/fixtures/component.ts +44 -0
  349. package/docs/API/60-playwright/index.md +3 -0
  350. package/docs/API.llms.md +84 -0
  351. package/docs/concepts/01-fundamental/01-constraint/20-manipulation.ts +9 -6
  352. package/docs/concepts/01-fundamental/01-constraint/30-cast.ts +9 -5
  353. package/docs/concepts/01-fundamental/02-currying/01-use.ts +5 -0
  354. package/docs/concepts/01-fundamental/02-currying/10-built-in-function.ts +28 -16
  355. package/docs/concepts/01-fundamental/02-currying/20-inner-pipe.ts +11 -2
  356. package/docs/concepts/01-fundamental/02-currying/30-async-pipe.ts +11 -2
  357. package/docs/concepts/01-fundamental/03-either/10-discrimination.ts +23 -12
  358. package/docs/concepts/01-fundamental/03-either/20-exhaustive-handling.ts +27 -10
  359. package/docs/concepts/01-fundamental/03-either/30-composition.ts +18 -10
  360. package/docs/concepts/01-fundamental/03-either/40-result-adaptation.ts +10 -4
  361. package/docs/concepts/01-fundamental/03-either/50-external-results.ts +16 -3
  362. package/docs/concepts/01-fundamental/04-data-structure/10-structure.ts +110 -59
  363. package/docs/concepts/01-fundamental/04-data-structure/20-constraint.ts +20 -12
  364. package/docs/concepts/01-fundamental/04-data-structure/30-validation.ts +13 -9
  365. package/docs/concepts/01-fundamental/04-data-structure/40-codecs.ts +31 -20
  366. package/docs/concepts/01-fundamental/04-data-structure/50-recursive.ts +10 -1
  367. package/docs/concepts/01-fundamental/05-chrono/10-creation.ts +39 -13
  368. package/docs/concepts/01-fundamental/05-chrono/20-manipulation.ts +20 -4
  369. package/docs/concepts/01-fundamental/05-chrono/30-serialized.ts +22 -6
  370. package/docs/concepts/01-fundamental/05-chrono/40-timezone.ts +5 -1
  371. package/docs/concepts/01-fundamental/06-modeling/20-entity.ts +29 -42
  372. package/docs/concepts/01-fundamental/06-modeling/30-tagged-object.ts +46 -23
  373. package/docs/concepts/01-fundamental/06-modeling/40-entity-lifecycle.ts +30 -33
  374. package/docs/concepts/01-fundamental/07-discrimination/10-entity.ts +52 -20
  375. package/docs/concepts/01-fundamental/07-discrimination/20-fact.ts +54 -38
  376. package/docs/concepts/01-fundamental/07-discrimination/30-tagged-object.ts +52 -20
  377. package/docs/concepts/01-fundamental/07-discrimination/40-error.ts +26 -10
  378. package/docs/concepts/01-fundamental/07-discrimination/50-literal.ts +29 -10
  379. package/docs/concepts/01-fundamental/07-discrimination/60-shape.ts +10 -2
  380. package/docs/concepts/01-fundamental/07-discrimination/70-predicate.ts +18 -6
  381. package/docs/concepts/01-fundamental/08-kind/01-identity.md +7 -0
  382. package/docs/concepts/01-fundamental/08-kind/20-metadata.md +11 -0
  383. package/docs/concepts/01-fundamental/08-kind/30-transport.md +11 -0
  384. package/docs/concepts/01-fundamental/08-kind/index.md +3 -0
  385. package/docs/concepts/02-server/10-file/10-manipulation.ts +15 -3
  386. package/docs/concepts/02-server/10-file/20-path.ts +22 -6
  387. package/docs/concepts/02-server/20-http/10-init.ts +1 -9
  388. package/docs/concepts/02-server/20-http/20-route.ts +40 -32
  389. package/docs/concepts/02-server/20-http/30-routine.ts +12 -19
  390. package/docs/concepts/02-server/20-http/40-jwt.ts +49 -37
  391. package/docs/concepts/02-server/20-http/50-open-api.ts +44 -0
  392. package/docs/concepts/02-server/20-http/index.md +1 -1
  393. package/docs/concepts/02-server/30-environment/10-platform.ts +12 -3
  394. package/docs/concepts/02-server/30-environment/20-variable.ts +13 -7
  395. package/docs/concepts/03-client/10-http/10-init.ts +11 -23
  396. package/docs/concepts/03-client/10-http/20-request.ts +79 -69
  397. package/docs/concepts/03-client/10-http/30-hook.ts +23 -23
  398. package/docs/concepts/03-client/20-form/10-init.ts +18 -15
  399. package/docs/concepts/03-client/20-form/20-input.ts +13 -6
  400. package/docs/concepts/03-client/20-form/30-layout.ts +44 -49
  401. package/docs/concepts/03-client/20-form/40-template.ts +10 -5
  402. package/docs/concepts/03-client/20-form/50-integration.md +11 -0
  403. package/docs/concepts/03-client/20-form/examples/postModeration/ThePage.vue +32 -0
  404. package/docs/concepts/03-client/20-form/examples/postModeration/usePostModeration.ts +80 -0
  405. package/docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md +23 -20
  406. package/docs/concepts/05-type-driven-design/01-architecture/index.md +1 -1
  407. package/docs/concepts/05-type-driven-design/02-domains/10-entities.md +29 -37
  408. package/docs/concepts/05-type-driven-design/02-domains/20-aggregates.md +42 -26
  409. package/docs/concepts/05-type-driven-design/02-domains/30-repositories.md +20 -26
  410. package/docs/concepts/05-type-driven-design/02-domains/40-refinements.md +30 -0
  411. package/docs/concepts/05-type-driven-design/02-domains/index.md +1 -1
  412. package/docs/concepts/05-type-driven-design/03-applications/10-use-case.md +33 -40
  413. package/docs/concepts/05-type-driven-design/03-applications/20-ports.md +49 -0
  414. package/docs/concepts/05-type-driven-design/03-applications/index.md +1 -1
  415. package/docs/concepts/05-type-driven-design/04-infrastructure/10-implementation.md +27 -36
  416. package/docs/concepts/05-type-driven-design/04-infrastructure/index.md +1 -1
  417. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/index.ts +1 -0
  418. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/waitingListEntry.ts +17 -0
  419. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientGiveBackBook.ts +30 -12
  420. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientRentBook.ts +9 -8
  421. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/createBook.ts +7 -7
  422. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/index.ts +2 -0
  423. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/withdrawBook.ts +32 -0
  424. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientGiveBackBook.ts +72 -13
  425. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientRentBook.ts +37 -11
  426. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/createBook.ts +29 -17
  427. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/index.ts +1 -0
  428. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/withdrawBook.ts +37 -0
  429. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/create.ts +4 -5
  430. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/index.ts +2 -0
  431. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/rental.ts +9 -9
  432. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/reserve.ts +37 -0
  433. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/returnBook.ts +11 -9
  434. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/withdraw.ts +21 -0
  435. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/index.ts +42 -11
  436. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/giveBackBook.ts +11 -9
  437. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/rentBook.ts +10 -10
  438. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/index.ts +6 -29
  439. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/index.ts +1 -0
  440. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/cancel.ts +26 -0
  441. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/create.ts +33 -0
  442. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/index.ts +3 -0
  443. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/prepare.ts +23 -0
  444. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/index.ts +79 -0
  445. package/docs/concepts/05-type-driven-design/fixtures/business/domains/index.ts +1 -0
  446. package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/index.ts +1 -0
  447. package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/refineLinkBetweenClientAndBorrowedBook.ts +34 -0
  448. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/book.ts +1 -1
  449. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/index.ts +1 -0
  450. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/waitingListEntry.ts +19 -0
  451. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/clientRentBook.ts +3 -3
  452. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/bookExist.ts +2 -2
  453. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/clientExist.ts +2 -2
  454. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientGiveBackBook.ts +23 -14
  455. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientRentBook.ts +7 -12
  456. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/book.ts +1 -1
  457. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/index.ts +1 -0
  458. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/waitingListEntry.ts +17 -0
  459. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/useCases/index.ts +2 -1
  460. package/docs/concepts/05-type-driven-design/index.md +2 -2
  461. package/docs/concepts.llms.md +71 -25
  462. package/instructions/coding-conventions.md +2 -2
  463. package/package.json +17 -14
  464. package/skills/http-client/SKILL.md +1 -1
  465. package/skills/http-client/references/configuration.md +3 -1
  466. package/skills/http-client/references/examples/client-expectations.ts +11 -10
  467. package/skills/http-client/references/examples/client-streams.ts +2 -2
  468. package/skills/http-client/references/examples/external-client.ts +2 -2
  469. package/skills/http-client/references/responses.md +1 -1
  470. package/skills/http-server/SKILL.md +4 -9
  471. package/skills/http-server/references/examples/authentication.ts +2 -2
  472. package/skills/http-server/references/examples/inferred-client.ts +54 -0
  473. package/skills/http-server/references/examples/minimal-route.ts +2 -3
  474. package/skills/http-server/references/examples/protected-route.ts +4 -6
  475. package/skills/http-server/references/examples/rename-user-route.ts +4 -6
  476. package/skills/http-server/references/examples/user-checker.ts +2 -2
  477. package/skills/http-server/references/examples/user-route.ts +12 -5
  478. package/skills/http-server/references/initialization.md +1 -1
  479. package/skills/http-server/references/reusable-flows.md +3 -3
  480. package/skills/http-server/references/routes-and-floor.md +11 -3
  481. package/dist/bin/install/index.d.ts +0 -2
  482. package/docs/concepts/02-server/20-http/50-codegen.ts +0 -29
  483. package/skills/http-server/references/code-generation.md +0 -31
  484. package/skills/http-server/references/examples/generate-sdk.ts +0 -36
  485. /package/dist/bin/{install → installSkill}/skill.d.ts +0 -0
@@ -1,8 +1,8 @@
1
1
  ## Développement avec DuploJS
2
2
 
3
- - Réutiliser les fonctions DuploJS avant d’écrire un utilitaire ou d’utiliser une API native ou tierce équivalente.
3
+ - Avant d’écrire un utilitaire ou d’utiliser une API native ou tierce, rechercher la fonction adaptée à la manipulation souhaitée dans le [routeur API]({{packagePath}}/docs/API.llms.md). Suivre les liens vers le domaine puis la référence pertinente, et utiliser l’équivalent DuploJS dès qu’il existe.
4
4
  - Pour une recherche de concept ou un problème de composition, de typage ou d’erreur, consulter le [routeur des concepts]({{packagePath}}/docs/concepts.llms.md), puis uniquement les pages et exemples pertinents.
5
5
  - Appliquer les contrats et patterns documentés, notamment pour les contraintes et les résultats `Either`. Ne pas inventer d’API ni contourner le typage pour résoudre un doute.
6
6
  - Utiliser les skills DuploJS installés pour les procédures spécialisées liées à la tâche.
7
7
 
8
- Le chemin du routeur est relatif au dossier de ce fichier ; résoudre ensuite chaque lien depuis le document qui le contient.
8
+ Les chemins des routeurs sont relatifs au dossier de ce fichier ; résoudre ensuite chaque lien depuis le document qui le contient.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/agents-kit",
3
- "version": "0.1.0-beta.3",
3
+ "version": "0.1.0-beta.7",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "DuploJS",
@@ -32,19 +32,19 @@
32
32
  "./docs/API/*/index.llms.md": "./docs/API/*/index.llms.md"
33
33
  },
34
34
  "dependencies": {
35
- "@duplojs/lang": "0.1.0-beta.3",
36
- "@duplojs/server": "0.1.0-beta.3"
35
+ "@duplojs/lang": "0.1.0-beta.7",
36
+ "@duplojs/server": "0.1.0-beta.7"
37
37
  },
38
38
  "peerDependencies": {
39
- "@duplojs/code-config": "0.1.0-beta.3",
40
- "@duplojs/eslint": "0.1.0-beta.3",
41
- "@duplojs/form": "0.1.0-beta.3",
42
- "@duplojs/http": "0.1.0-beta.3",
43
- "@duplojs/json-web-token": "0.1.0-beta.3",
44
- "@duplojs/lang": "0.1.0-beta.3",
45
- "@duplojs/playwright": "0.1.0-beta.3",
46
- "@duplojs/server": "0.1.0-beta.3",
47
- "@duplojs/tools": "0.1.0-beta.3"
39
+ "@duplojs/code-config": "0.1.0-beta.7",
40
+ "@duplojs/eslint": "0.1.0-beta.7",
41
+ "@duplojs/form": "0.1.0-beta.7",
42
+ "@duplojs/http": "0.1.0-beta.7",
43
+ "@duplojs/json-web-token": "0.1.0-beta.7",
44
+ "@duplojs/lang": "0.1.0-beta.7",
45
+ "@duplojs/playwright": "0.1.0-beta.7",
46
+ "@duplojs/server": "0.1.0-beta.7",
47
+ "@duplojs/tools": "0.1.0-beta.7"
48
48
  },
49
49
  "peerDependenciesMeta": {
50
50
  "@duplojs/code-config": {
@@ -70,9 +70,12 @@
70
70
  }
71
71
  },
72
72
  "devDependencies": {
73
- "@duplojs/code-config": "0.1.0-beta.3",
73
+ "@duplojs/code-config": "0.1.0-beta.7",
74
+ "@duplojs/eslint": "0.1.0-beta.7",
74
75
  "@types/node": "24.13.3",
75
- "@types/web": "0.0.358"
76
+ "@types/web": "0.0.358",
77
+ "vue": "3.5.43",
78
+ "vue-tsc": "3.3.11"
76
79
  },
77
80
  "files": [
78
81
  "dist",
@@ -19,7 +19,7 @@ node --input-type=module -e 'import { fileURLToPath } from "node:url"; console.l
19
19
 
20
20
  ## Retrouver le contrat et configurer le client
21
21
 
22
- Importer `@duplojs/http/client` sous le namespace `DHttpClient`. `createHttpClient<Routes>` reçoit le contrat des méthodes, chemins, entrées et réponses de l'API. Ce contrat peut être généré, écrit à la main ou composé ; le client fonctionne aussi avec un serveur externe à DuploJS.
22
+ Importer les symboles nommés depuis `@duplojs/http/client`. `createHttpClient<Routes>` utilise le type des routes pour vérifier les requêtes et les réponses attendues. Le client peut appeler une API DuploJS ou un serveur externe.
23
23
 
24
24
  Retrouver les routes consommées et le client existant avant d'en créer un. Pour créer le client ou modifier son contrat et sa configuration, lire [Contrat et configuration](references/configuration.md). L'[exemple d'API externe](references/examples/external-client.ts) montre un contrat écrit à la main et la sélection par code.
25
25
 
@@ -1,6 +1,8 @@
1
1
  # Contrat et configuration du client
2
2
 
3
- Le client HTTP est utilisable partout où une application effectue une requête HTTP, que l'API soit développée avec DuploJS ou avec une autre technologie. `createHttpClient<Routes>` accepte un type compatible avec `ServerRoute` : chaque route décrit sa méthode, son chemin, ses entrées et l'union de ses réponses. Les types peuvent être écrits à la main, importés ou composés. La génération depuis un serveur DuploJS est une façon de produire ce contrat ; elle ne génère pas un client et n'est pas un prérequis à son utilisation. Pour configurer cette génération, utiliser le skill `duplojs-http-server` ou rechercher le partage des contrats HTTP dans `docs/concepts.llms.md` du package installé.
3
+ Le client HTTP est utilisable partout où une application effectue une requête HTTP, que l'API soit développée avec DuploJS ou avec une autre technologie. `createHttpClient<Routes>` accepte un type compatible avec `ServerRoute` : chaque route décrit sa méthode, son chemin, ses entrées et l'union de ses réponses. Les types peuvent être écrits à la main, importés ou composés.
4
+
5
+ Pour une API DuploJS, utiliser `RouteDeclarationToContract` depuis `@duplojs/http` avec le type d'une route (`typeof route`) ou une union de types de routes. Il reprend leurs entrées et leurs réponses, y compris les refus des étapes de vérification. Importer les routes avec `import type` pour éviter de charger les modules serveur dans le client. Voir `docs/concepts/03-client/10-http/10-init.ts` depuis le package installé.
4
6
 
5
7
  Décrire précisément les requêtes et les réponses connues, y compris les erreurs contractuelles. Éviter de perdre ces garanties avec un client non paramétré ou des assertions sur les résultats. Le typage décrit le contrat supposé de l'API ; il n'effectue pas de validation runtime du body. Utiliser une data structure lorsque cette validation est nécessaire.
6
8
 
@@ -3,24 +3,25 @@
3
3
  *
4
4
  * Les sélecteurs imposent un choix pour chaque cas du contrat de la requête.
5
5
  */
6
- import * as DHttpClient from "@duplojs/http/client";
6
+ import { createHttpClient } from "@duplojs/http/client";
7
7
  import * as DEither from "@duplojs/lang/either";
8
8
  import type * as DCommon from "@duplojs/lang/common";
9
9
 
10
10
  interface Routes {
11
- method: "GET";
12
- path: "/profile";
13
- responses: {
14
- code: "200";
15
- information: "profile.found";
16
- body: { name: string };
11
+ readonly method: "GET";
12
+ readonly path: "/profile";
13
+ readonly responses: {
14
+ readonly code: "200";
15
+ readonly information: "profile.found";
16
+ readonly body: { name: string };
17
17
  } | {
18
- code: "401";
19
- information: "auth.required";
18
+ readonly code: "401";
19
+ readonly information: "auth.required";
20
+ readonly body: undefined;
20
21
  };
21
22
  }
22
23
 
23
- const client = DHttpClient.createHttpClient<Routes>({
24
+ const client = createHttpClient<Routes>({
24
25
  baseUrl: "https://duplo-api.example.com",
25
26
  // Le mode Predicted reste actif pour cette API DuploJS.
26
27
  });
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * La sélection de la réponse précède la lecture progressive du flux.
5
5
  */
6
- import * as DHttpClient from "@duplojs/http/client";
6
+ import { createHttpClient } from "@duplojs/http/client";
7
7
  import * as DEither from "@duplojs/lang/either";
8
8
  import type * as DCommon from "@duplojs/lang/common";
9
9
 
@@ -28,7 +28,7 @@ type Routes = {
28
28
  };
29
29
  };
30
30
 
31
- const client = DHttpClient.createHttpClient<Routes>({
31
+ const client = createHttpClient<Routes>({
32
32
  baseUrl: "https://duplo-api.example.com",
33
33
  });
34
34
 
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Le contrat est écrit à la main ; les réponses n'ont aucun header DuploJS.
5
5
  */
6
- import * as DHttpClient from "@duplojs/http/client";
6
+ import { createHttpClient } from "@duplojs/http/client";
7
7
  import * as DEither from "@duplojs/lang/either";
8
8
  import type * as DCommon from "@duplojs/lang/common";
9
9
 
@@ -30,7 +30,7 @@ interface ExternalRoutes {
30
30
  };
31
31
  }
32
32
 
33
- export const externalClient = DHttpClient.createHttpClient<ExternalRoutes>({
33
+ export const externalClient = createHttpClient<ExternalRoutes>({
34
34
  baseUrl: "https://api.example.com",
35
35
  // L'API ne fournit pas le marqueur de réponses prévues.
36
36
  disabledPredictedMode: true,
@@ -21,7 +21,7 @@ La famille `ExpectedResponse` sans sélecteur (`whenExpectedResponse`, `iWantExp
21
21
 
22
22
  Une réponse **prévue** appartient aux réponses contractuelles de l'API. Elle peut être un succès ou une erreur métier, par exemple un `404` déclaré. Une réponse **voulue** est celle que le consommateur décide d'accepter à cet endroit du programme. Une réponse prévue peut donc être rejetée par un sélecteur.
23
23
 
24
- DuploJS marque ses réponses contractuelles : les réponses `PredictedResponse` et leurs équivalents SSE et stream conduisent le serveur à ajouter le header `predicted`. Cette classe marque la réponse ; elle n'ajoute pas de traitement métier. Une erreur de parsing du body ou une erreur interne hors contrat peut produire une réponse imprévue. Son code ou son information peut coïncider avec celui d'une réponse déclarée, sans garantir le même body.
24
+ Le serveur DuploJS ajoute le header `predicted` aux `PredictedResponse` et à leurs équivalents SSE et stream. Ce marqueur permet au client de reconnaître les réponses prévues par l'API. Une erreur de parsing du body ou une erreur interne peut produire une réponse imprévue. Son code ou son information peut coïncider avec celui d'une réponse prévue, sans garantir le même body.
25
25
 
26
26
  Par défaut, `disabledPredictedMode` vaut `false`. Le client vérifie la **présence** du header indiqué par `predictedHeaderKey` (`predicted` par défaut). Sans ce header, les hooks ciblés par information, code ou famille ne s'exécutent pas et les attentes et sélecteurs renvoient `Left<"unexpect-response", ...>`, même si le code ou l'information correspond. Cela évite d'utiliser sous un type contractuel le contenu d'une autre réponse. Les hooks généraux de réponse et le hook dédié aux réponses imprévues restent disponibles.
27
27
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: duplojs-http-server
3
- description: "Créer ou modifier des routes et un serveur HTTP DuploJS : Hub, entrées validées, réponses contractuelles, traitements réutilisables et génération des contrats partagés."
3
+ description: "Créer ou modifier une API HTTP DuploJS : routes, validation des requêtes, vérifications réutilisables et configuration du serveur."
4
4
  ---
5
5
 
6
6
  # Serveur HTTP DuploJS
@@ -25,8 +25,7 @@ Une route enchaîne des étapes qui enrichissent un contexte typé, le **floor**
25
25
 
26
26
  1. Déclarer les entrées avec `.extract` et les data structures du contrat. L'extraction les valide avant de poursuivre.
27
27
  2. Préparer les préconditions et traiter les refus dans les étapes précédant le handler. Un `.cut` convient à une adaptation propre au scénario courant ; reprendre les traitements réutilisables existants lorsqu'ils portent la même responsabilité.
28
- 3. Déclarer chaque réponse avec un `ResponseContract` : statut, `information` discriminante et schéma du body éventuel.
29
- 4. Terminer le chemin de réussite avec `.handler` et son outil `response`.
28
+ 3. Terminer avec `.handler`. Son callback retourne la réponse HTTP avec l'outil `response` disponible dans son second argument.
30
29
 
31
30
  Pour créer une route ou modifier ses extractions et étapes, lire [Routes et floor](references/routes-and-floor.md). La [route minimale](references/examples/minimal-route.ts) montre validation et réponse sans dépendance applicative ; la [route de modification](references/examples/rename-user-route.ts) adapte un résultat applicatif en amont du handler.
32
31
 
@@ -34,7 +33,7 @@ Pour créer une route ou modifier ses extractions et étapes, lire [Routes et fl
34
33
 
35
34
  La route est un point d'entrée d'infrastructure : elle adapte les données validées aux capacités de l'application, appelle les traitements prévus et traduit leurs résultats vers HTTP. Elle peut établir une précondition avec une qualification du domaine. L'orchestration métier et les transitions restent dans leurs couches ; ne pas les réimplémenter dans les steps.
36
35
 
37
- Traiter les résultats attendus avec les outils `Either` et les réponses contractuelles. Les fonctions réutilisables conservent leurs échecs typés ; une réponse HTTP relève du flux HTTP qui les consomme.
36
+ Traduire les résultats attendus en réponses HTTP avec les outils `Either`. Les fonctions réutilisables conservent leurs échecs typés ; la route choisit la réponse à envoyer au client.
38
37
 
39
38
  Si la tâche raccorde un domaine existant ou modifie une responsabilité métier, appliquer le skill `duplojs-modeling` lorsqu'il est installé, ou lire `docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md`.
40
39
 
@@ -57,10 +56,6 @@ Au démarrage, valider la configuration avec `DSCommon.environmentVariableOrThro
57
56
 
58
57
  Si la tâche touche le démarrage ou l'enregistrement des routes, lire [Initialisation et enregistrement](references/initialization.md) et l'[exemple minimal](references/examples/initialize.ts). Avec `routeStore.getAll()`, importer d'abord les modules de routes : le store collecte les déclarations finalisées par `.handler`, sans découvrir ni importer leurs fichiers.
59
58
 
60
- ## Partager les contrats et les schémas
61
-
62
- Lorsque la tâche partage des types de routes ou des schémas, lire [Génération et consommation des contrats](references/code-generation.md) et l'[exemple de génération](references/examples/generate-sdk.ts). `codeGeneratorPlugin` produit ces ressources à partir des contrats du serveur ; il ne crée pas d'instance de client. Sa configuration seule ne lance pas la génération : celle-ci dépend du cycle de vie du Hub. Pour consommer l'API, utiliser le skill `duplojs-http-client` ou les concepts du client HTTP.
63
-
64
59
  ## Vérifier le flux exposé
65
60
 
66
- Exécuter le typage et les vérifications du projet. Vérifier que la route est effectivement enregistrée, qu'une entrée invalide est refusée et que chaque issue concernée produit le statut, l'information et le body déclarés. Vérifier aussi qu'un refus arrête les étapes dépendantes. Si la tâche touche la génération, exécuter celle-ci en `BUILD` puis vérifier les fichiers produits et leur utilisation depuis le consommateur.
61
+ Exécuter le typage et les vérifications du projet. Vérifier que la route est effectivement enregistrée, qu'une entrée invalide est refusée et que chaque issue concernée produit le statut, l'information et le body attendus. Vérifier aussi qu'un refus arrête les étapes dépendantes.
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Le preflight exporte une fonction qui crée des routes avec authentification.
5
5
  */
6
- import { ResponseContract, useCheckerBuilder, usePreflightBuilder, useProcessBuilder } from "@duplojs/http";
6
+ import { useCheckerBuilder, usePreflightBuilder, useProcessBuilder } from "@duplojs/http";
7
7
  import * as DDataStructure from "@duplojs/lang/dataStructure";
8
8
  import * as DEither from "@duplojs/lang/either";
9
9
  import { type User } from "./contracts";
@@ -31,7 +31,7 @@ export const authenticationProcess = useProcessBuilder()
31
31
  .check(tokenChecker, {
32
32
  input: ({ authorization }) => authorization,
33
33
  result: "token.valid",
34
- otherwise: ResponseContract.unauthorized("authentication.invalid"),
34
+ otherwise: ({ response }) => response.unauthorized("authentication.invalid"),
35
35
  indexing: "user",
36
36
  })
37
37
  // authorization reste interne au process ; seul user est exposé.
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @title Partager les types d'une route avec un client HTTP.
3
+ *
4
+ * Créer un client dont les requêtes et les réponses suivent la définition des routes serveur.
5
+ */
6
+ import { type RouteDeclarationToContract } from "@duplojs/http";
7
+ import { createHttpClient } from "@duplojs/http/client";
8
+ import type * as DCommon from "@duplojs/lang/common";
9
+ import { type renameUserRoute } from "./rename-user-route";
10
+ import { type RenameUserBody, type User } from "./contracts";
11
+
12
+ // Ces imports de type n'exécutent pas les modules du serveur.
13
+ type Routes = RouteDeclarationToContract<typeof renameUserRoute>;
14
+
15
+ type _CheckResponses = DCommon.ExpectType<
16
+ Routes["responses"],
17
+ | {
18
+ readonly code: "422";
19
+ readonly information: "extract-error";
20
+ readonly body: string;
21
+ }
22
+ | {
23
+ readonly code: "404";
24
+ readonly information: "user.notFound";
25
+ readonly body: undefined;
26
+ }
27
+ | {
28
+ readonly code: "409";
29
+ readonly information: "user.renameDenied";
30
+ readonly body: undefined;
31
+ }
32
+ | {
33
+ readonly code: "200";
34
+ readonly information: "user.renamed";
35
+ readonly body: User;
36
+ },
37
+ "strict"
38
+ >;
39
+
40
+ const client = createHttpClient<Routes>({
41
+ baseUrl: "https://duplo-api.example.com",
42
+ });
43
+
44
+ export function renameUserRemotely(userId: User["id"], body: RenameUserBody) {
45
+ return client.patch("/users/{userId}", {
46
+ params: { userId },
47
+ body,
48
+ }).toEitherByInformation({
49
+ "extract-error": false,
50
+ "user.notFound": false,
51
+ "user.renameDenied": false,
52
+ "user.renamed": true,
53
+ });
54
+ }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Cette route autonome sert au démarrage minimal du serveur.
5
5
  */
6
- import { ResponseContract, useRouteBuilder } from "@duplojs/http";
6
+ import { useRouteBuilder } from "@duplojs/http";
7
7
  import * as DDataStructure from "@duplojs/lang/dataStructure";
8
8
 
9
9
  export const helloRoute = useRouteBuilder("GET", "/hello")
@@ -13,6 +13,5 @@ export const helloRoute = useRouteBuilder("GET", "/hello")
13
13
  },
14
14
  })
15
15
  .handler(
16
- ResponseContract.ok("hello.received", DDataStructure.string()),
17
- ({ name }, { response }) => response("hello.received", name),
16
+ ({ name }, { response }) => response.ok("hello.received", name),
18
17
  );
@@ -3,14 +3,13 @@
3
3
  *
4
4
  * Comparer son application commune par preflight et son exécution locale.
5
5
  */
6
- import { ResponseContract, useRouteBuilder } from "@duplojs/http";
6
+ import { useRouteBuilder } from "@duplojs/http";
7
7
  import type * as DCommon from "@duplojs/lang/common";
8
8
  import { authenticationProcess, useAuthenticatedRouteBuilder } from "./authentication";
9
- import { userStructure, type User } from "./contracts";
9
+ import { type User } from "./contracts";
10
10
 
11
11
  export const profileRoute = useAuthenticatedRouteBuilder("GET", "/profile")
12
12
  .handler(
13
- ResponseContract.ok("profile.read", userStructure),
14
13
  (floor, { response }) => {
15
14
  type _CheckFloor = DCommon.ExpectType<
16
15
  typeof floor,
@@ -18,7 +17,7 @@ export const profileRoute = useAuthenticatedRouteBuilder("GET", "/profile")
18
17
  "strict"
19
18
  >;
20
19
 
21
- return response("profile.read", floor.user);
20
+ return response.ok("profile.read", floor.user);
22
21
  },
23
22
  );
24
23
 
@@ -26,6 +25,5 @@ export const profileRoute = useAuthenticatedRouteBuilder("GET", "/profile")
26
25
  export const explicitAuthenticationRoute = useRouteBuilder("GET", "/session")
27
26
  .exec(authenticationProcess, { imports: ["user"] })
28
27
  .handler(
29
- ResponseContract.ok("session.read", userStructure),
30
- ({ user }, { response }) => response("session.read", user),
28
+ ({ user }, { response }) => response.ok("session.read", user),
31
29
  );
@@ -3,11 +3,11 @@
3
3
  *
4
4
  * Un preset résout la ressource ; un cut traite l'issue propre à la modification.
5
5
  */
6
- import { ResponseContract, useRouteBuilder } from "@duplojs/http";
6
+ import { useRouteBuilder } from "@duplojs/http";
7
7
  import * as DDataStructure from "@duplojs/lang/dataStructure";
8
8
  import * as DEither from "@duplojs/lang/either";
9
9
  import type * as DCommon from "@duplojs/lang/common";
10
- import { renameUserBody, userStructure, type RenameUserBody, type User } from "./contracts";
10
+ import { renameUserBody, type RenameUserBody, type User } from "./contracts";
11
11
  import { iWantUserExist } from "./user-checker";
12
12
 
13
13
  // Use case résolu dans l'infrastructure ; il porte la règle de modification.
@@ -25,18 +25,16 @@ export const renameUserRoute = useRouteBuilder("PATCH", "/users/{userId}")
25
25
  })
26
26
  .presetCheck(iWantUserExist.indexing("user"), ({ userId }) => userId)
27
27
  .cut(
28
- ResponseContract.conflict("user.renameDenied"),
29
28
  async({ user, body }, { response, output }) => {
30
29
  const result = await renameUser(user, body);
31
30
 
32
31
  return DEither.matchInformation(result, {
33
32
  "user-renamed": (updatedUser) => output({ updatedUser }),
34
- "rename-denied": () => response("user.renameDenied"),
33
+ "rename-denied": () => response.conflict("user.renameDenied"),
35
34
  });
36
35
  },
37
36
  )
38
37
  .handler(
39
- ResponseContract.ok("user.renamed", userStructure),
40
38
  (floor, { response }) => {
41
39
  type _CheckFloor = DCommon.ExpectType<
42
40
  typeof floor,
@@ -49,6 +47,6 @@ export const renameUserRoute = useRouteBuilder("PATCH", "/users/{userId}")
49
47
  "strict"
50
48
  >;
51
49
 
52
- return response("user.renamed", floor.updatedUser);
50
+ return response.ok("user.renamed", floor.updatedUser);
53
51
  },
54
52
  );
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Un preset fixe le résultat attendu et la réponse d'absence du checker.
5
5
  */
6
- import { createPresetChecker, ResponseContract, useCheckerBuilder } from "@duplojs/http";
6
+ import { createPresetChecker, useCheckerBuilder } from "@duplojs/http";
7
7
  import * as DEither from "@duplojs/lang/either";
8
8
  import { type User } from "./contracts";
9
9
 
@@ -22,5 +22,5 @@ export const userExist = useCheckerBuilder()
22
22
 
23
23
  export const iWantUserExist = createPresetChecker(userExist, {
24
24
  result: "user.found",
25
- otherwise: ResponseContract.notFound("user.notFound"),
25
+ otherwise: ({ response }) => response.notFound("user.notFound"),
26
26
  });
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * L'extraction et l'indexation du résultat enrichissent le floor du handler.
5
5
  */
6
- import { ResponseContract, useRouteBuilder } from "@duplojs/http";
6
+ import { useRouteBuilder } from "@duplojs/http";
7
7
  import * as DDataStructure from "@duplojs/lang/dataStructure";
8
8
  import type * as DCommon from "@duplojs/lang/common";
9
- import { userStructure, type User } from "./contracts";
9
+ import { type User } from "./contracts";
10
10
  import { userExist } from "./user-checker";
11
11
 
12
12
  export const userRoute = useRouteBuilder("GET", "/users/{userId}")
@@ -18,11 +18,18 @@ export const userRoute = useRouteBuilder("GET", "/users/{userId}")
18
18
  .check(userExist, {
19
19
  input: ({ userId }) => userId,
20
20
  result: "user.found",
21
- otherwise: ResponseContract.notFound("user.notFound"),
21
+ otherwise: ({ response, result }) => {
22
+ type _CheckRejectedResult = DCommon.ExpectType<
23
+ typeof result.information,
24
+ "user.notFound",
25
+ "strict"
26
+ >;
27
+
28
+ return response.notFound("user.notFound");
29
+ },
22
30
  indexing: "user",
23
31
  })
24
32
  .handler(
25
- ResponseContract.ok("user.read", userStructure),
26
33
  (floor, { response }) => {
27
34
  type _CheckFloor = DCommon.ExpectType<
28
35
  typeof floor,
@@ -33,6 +40,6 @@ export const userRoute = useRouteBuilder("GET", "/users/{userId}")
33
40
  "strict"
34
41
  >;
35
42
 
36
- return response("user.read", floor.user);
43
+ return response.ok("user.read", floor.user);
37
44
  },
38
45
  );
@@ -28,6 +28,6 @@ Le store est global : lorsqu'une application contient plusieurs Hubs qui doivent
28
28
 
29
29
  ## Ajouter un plugin
30
30
 
31
- Brancher le plugin sur le Hub avant d'appeler le connecteur. Les paramètres et les effets relèvent du plugin choisi ; les rechercher depuis `docs/concepts.llms.md`. L'[exemple de génération](examples/generate-sdk.ts) montre `.plug(...)` et un plugin déclenché par le cycle de vie.
31
+ Brancher le plugin sur le Hub avant d'appeler le connecteur. Les paramètres et les effets relèvent du plugin choisi ; les rechercher depuis `docs/concepts.llms.md`.
32
32
 
33
33
  Pour approfondir, rechercher l'initialisation HTTP dans le routeur conceptuel du package AgentKit.
@@ -8,14 +8,14 @@ Voir [le checker de recherche d'utilisateur](examples/user-checker.ts). Sa capac
8
8
 
9
9
  - `input` : calcul de l'argument depuis le floor courant ;
10
10
  - `result` : information du résultat permettant de continuer ;
11
- - `otherwise` : contrat de réponse si le résultat attendu n'est pas obtenu ;
11
+ - `otherwise` : callback retournant la réponse si le résultat attendu n'est pas obtenu ; il reçoit `response`, le `floor` courant et le `result` excluant les issues sélectionnées ;
12
12
  - `indexing` : clé sous laquelle ajouter la valeur retenue au floor, si elle doit être réutilisée.
13
13
 
14
- L'[exemple de lecture](examples/user-route.ts) interprète ainsi un checker pour une route. Le résultat sélectionné est garanti aux étapes suivantes ; l'autre résultat termine le flux avec la réponse déclarée.
14
+ L'[exemple de lecture](examples/user-route.ts) interprète ainsi un checker pour une route. Le résultat sélectionné est garanti aux étapes suivantes ; l'autre résultat termine le flux avec la réponse retournée par `otherwise`.
15
15
 
16
16
  ## Preset : réutiliser l'interprétation HTTP
17
17
 
18
- Quand une opération attend toujours le même résultat et produit la même réponse sinon, nommer cette politique avec `createPresetChecker`. Le checker reste réutilisable avec d'autres interprétations ; le preset fixe son usage récurrent.
18
+ Quand une opération attend toujours le même résultat et produit la même réponse sinon, nommer cette politique avec `createPresetChecker`. Le checker reste réutilisable avec d'autres interprétations ; le preset fixe son usage récurrent. Son callback `otherwise` reçoit `response` et le `result` non retenu, sans floor appelant.
19
19
 
20
20
  Appliquer ensuite `.presetCheck(...)`, fournir l'input depuis le floor et choisir une indexation locale avec `.indexing(...)`. L'[exemple de modification](examples/rename-user-route.ts) réutilise le preset défini dans [le module du checker](examples/user-checker.ts).
21
21
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Commencer avec le builder de la famille de routes concernée. Pour une route sans préfixe commun, utiliser `useRouteBuilder`. `.extract(...)` décrit les sources attendues avec les data structures et leurs contraintes. Réutiliser les structures partagées du projet lorsqu'elles portent le même contrat.
6
6
 
7
- L'extraction vérifie la donnée avant de poursuivre. Une entrée invalide produit la réponse d'extraction prévue par la configuration ; ne pas ajouter de parsing manuel ou de variante `OrThrow` dans les étapes suivantes.
7
+ L'extraction vérifie la donnée avant de poursuivre. Une entrée invalide appelle le callback d'échec du Hub, qui retourne par défaut `422 / extract-error` avec l'erreur en body. Pour adapter ce refus à une étape, passer un callback en second argument de `.extract` : il reçoit `response`, le `floor` courant et `dataStructureError`. Ne pas ajouter de parsing manuel ou de variante `OrThrow` dans les étapes suivantes.
8
8
 
9
9
  Le placement dans le floor dépend de la forme déclarée :
10
10
 
@@ -23,7 +23,7 @@ Ne pas accéder manuellement à la requête brute pour récupérer une valeur qu
23
23
 
24
24
  Utiliser `cut` pour une opération spécifique au flux courant : qualification métier nécessaire à ce scénario, appel applicatif avec adaptation de ses résultats ou préparation particulière.
25
25
 
26
- Déclarer les réponses possibles dans le premier argument. Dans le callback, retourner `response(...)` pour terminer ou `output(...)` pour transmettre les données et continuer. Ne pas retourner une valeur brute en espérant enrichir le floor.
26
+ Le callback de `.cut` reçoit le floor et les outils `response` et `output`. Retourner une réponse, par exemple `response.conflict(information)`, pour arrêter la route, ou `output(...)` pour enrichir le floor et poursuivre. Ne pas retourner une valeur brute en espérant enrichir le floor.
27
27
 
28
28
  L'[exemple de modification](examples/rename-user-route.ts) adapte un résultat applicatif : l'échec attendu devient une réponse de conflit ; la réussite fournit la donnée à la suite. Les règles de modification restent dans le traitement applicatif. Si la même vérification et son interprétation se répètent, utiliser un checker et son preset comme décrit dans [les flux réutilisables](reusable-flows.md).
29
29
 
@@ -31,8 +31,16 @@ L'[exemple de modification](examples/rename-user-route.ts) adapte un résultat a
31
31
 
32
32
  Le handler termine la route et retourne la réponse positive lorsque les étapes précédentes ont réussi. Préparer les préconditions et traiter les échecs attendus en amont. Il peut appeler le traitement applicatif à cet endroit si ses préconditions garantissent le résultat attendu.
33
33
 
34
- Un `ResponseContract` associe le statut HTTP, une `information` précise et le schéma du body éventuel. L'information distingue les issues de l'API, y compris celles qui ont le même statut. Retourner la réponse avec l'outil `response` fourni au callback et respecter le contrat déclaré.
34
+ Le callback de `.handler` reçoit le floor et l'outil `response`. Retourner `response.ok(information, body)` pour envoyer le résultat, ou `response.noContent(information)` pour une réussite sans body. Choisir l'information pour identifier le résultat de l'opération : elle distingue les issues de l'API, y compris lorsqu'elles partagent le même statut HTTP.
35
+
36
+ Le type de chaque réponse est déduit de son statut, de son information et de son body. Les helpers ne valident ni ne filtrent le body au runtime ; préparer les données à exposer avant de les leur transmettre. Le handler dispose de tous les helpers de réponse. Dans les `cut` et les callbacks `otherwise`, seuls les helpers de refus sont disponibles : `4xx` et `internalServerError`.
35
37
 
36
38
  Ne pas transformer le handler en orchestrateur métier. Dans une application organisée en couches, consommer les use cases résolus et les qualifications prévues par le domaine. Pour comprendre ces responsabilités, rechercher les frontières du Type-Driven Design et les fixtures d'infrastructure dans `docs/concepts.llms.md`.
37
39
 
38
40
  Pour une représentation de body particulière, un flux ou un autre besoin HTTP, rechercher le mécanisme adapté dans le routeur conceptuel avant de modifier la réception ou l'envoi natifs.
41
+
42
+ ## Partager les types avec un client
43
+
44
+ Pour créer un client à partir des routes du serveur, utiliser `RouteDeclarationToContract<typeof route>`. Ce type reprend les entrées et toutes les réponses de la route, y compris les refus des extractions et des vérifications exécutées dans les processus ou le preflight. Une union de types de routes permet de couvrir plusieurs endpoints. L'[exemple de client](examples/inferred-client.ts) montre comment partager ces types et sélectionner la réponse attendue, sans charger les modules serveur au runtime.
45
+
46
+ Pour générer une documentation OpenAPI, consulter `docs/concepts/02-server/20-http/50-open-api.ts` depuis le package installé. Cette ressource explique comment fournir les schémas de réponse au générateur.
@@ -1,2 +0,0 @@
1
- import * as DSCommand from "@duplojs/server/command";
2
- export declare const installCommand: DSCommand.Command<"install">;
@@ -1,29 +0,0 @@
1
- /**
2
- * @title Comment partager des ressources
3
- *
4
- * Génération du typage des routes et des `DataStructure` pour partager un contrat statique.
5
- */
6
- import { createHub, routeStore } from "@duplojs/http";
7
- import { codeGeneratorPlugin } from "@duplojs/http/codeGenerator";
8
- import * as DCommon from "@duplojs/lang/common";
9
-
10
- const hub = createHub({ environment: "BUILD" })
11
- .register(routeStore.getAll())
12
- .plug(
13
- codeGeneratorPlugin({
14
- // Génère le typage des routes.
15
- outputFile: DCommon.infer("types.d.ts"),
16
-
17
- // Génère les `DataStructure` utilisées par les routes.
18
- generateStructure: {
19
- outputFolder: DCommon.infer("dataStructures"),
20
- },
21
- }),
22
- );
23
-
24
- // La génération produit des fichiers autonomes à distribuer aux consommateurs.
25
- // Les `DataStructure` peuvent être générées depuis les routes ou sélectionnées explicitement.
26
-
27
- // `codeGeneratorPlugin` exécute sa génération sur le hook `beforeStartServer`.
28
- // Le `Hub` doit donc disposer d'un connecteur HTTP.
29
- // En environnement `BUILD`, le cycle s'exécute sans démarrer le serveur HTTP.
@@ -1,31 +0,0 @@
1
- # Générer et consommer les contrats
2
-
3
- ## Une source de vérité dans les routes
4
-
5
- Le plugin `codeGeneratorPlugin`, importé depuis `@duplojs/http/codeGenerator`, produit le contrat TypeScript des routes enregistrées sur le Hub. Les entrées et les réponses déclarées dans les étapes alimentent ce contrat ; maintenir aussi les contrats des échecs prévus.
6
-
7
- `outputFile` choisit le fichier de types généré. `generateStructure.outputFolder` active aussi la génération de data structures réutilisables au runtime. Voir [la génération pour un SDK](examples/generate-sdk.ts).
8
-
9
- Les types permettent de construire un client déjà informé des méthodes, chemins, paramètres et réponses. Les structures permettent de partager les mêmes schémas de validation avec un consommateur, par exemple dans un SDK utilisé par une autre application.
10
-
11
- ## Identifier les structures à partager
12
-
13
- Donner un identifiant stable aux structures exportables avec `.addIdentifier(...)`, qui retourne une copie nommée. Cette méthode est ajoutée par l'extension `@duplojs/tools/toTypescript` : importer explicitement cette extension dans le module qui appelle la méthode. Les [contrats ordinaires](examples/contracts.ts) restent utilisables sans cette extension ; le [point d'entrée de génération](examples/generate-sdk.ts) crée leurs copies nommées pour le SDK.
14
-
15
- L'exemple fournit ces copies avec `generateStructure.structures` et active `generateStructure.disabledFromRoute` pour limiter la génération à cette sélection. Pour une découverte depuis les routes, conserver cette option désactivée et employer les structures identifiées dans les contrats des routes ; le générateur parcourt aussi leurs sous-structures. Ne pas supposer qu'un schéma anonyme produira un export nommé. Vérifier les capacités de génération des structures et contraintes personnalisées dans la documentation des outils.
16
-
17
- Réserver le dossier de sortie aux fichiers générés : le plugin remplace ce dossier pendant la génération. Garder les sources écrites à la main ailleurs.
18
-
19
- ## Déclencher la génération
20
-
21
- Importer les modules de routes, enregistrer les routes et brancher le plugin avant de démarrer le cycle avec le connecteur. Le plugin travaille sur le hook `beforeStartServer`, dans les environnements `DEV` et `BUILD` ; créer le Hub et le plugin sans appeler le connecteur ne suffit pas.
22
-
23
- Pour un script de génération, utiliser `BUILD`. L'[exemple Node](examples/generate-sdk.ts) appelle `createHttpServer` dans ce mode : le cycle et la génération s'exécutent sans ouvrir l'écoute HTTP. Le Hub doit contenir des routes pour que le plugin produise les fichiers attendus.
24
-
25
- Les routes de cet exemple déclarent certaines capacités avec `declare function` : elles démontrent leurs contrats sans fournir d'implémentation applicative. La génération n'exécute pas leurs handlers. Pour servir ces routes, raccorder les capacités réelles ; pour démarrer un exemple autonome, utiliser [l'initialisation minimale](examples/initialize.ts).
26
-
27
- ## Distribuer et utiliser le résultat
28
-
29
- Publier les types et structures générés dans le package consommateur ou le SDK selon son organisation. Importer le type généré `Routes` pour paramétrer `createHttpClient` depuis `@duplojs/http/client`, et importer les structures générées lorsque le consommateur doit valider des données. Garder ces ressources issues de la génération, sans recopier à la main les contrats du serveur.
30
-
31
- Pour le raccordement concret du client, ses sélecteurs et les API sans contrats générés, utiliser le skill `duplojs-http-client` ou rechercher le client HTTP dans `docs/concepts.llms.md` du package installé. Pour les options de génération, rechercher le partage des contrats HTTP et les outils de transformation des data structures dans `docs/concepts.llms.md`.
@@ -1,36 +0,0 @@
1
- /**
2
- * @title Générer les contrats et les schémas d'un SDK.
3
- *
4
- * Déclencher le cycle du Hub en BUILD pour générer sans écoute HTTP.
5
- */
6
- import "@duplojs/tools/toTypescript";
7
- import "./user-route";
8
- import "./rename-user-route";
9
- import { createHub, routeStore } from "@duplojs/http";
10
- import { createHttpServer } from "@duplojs/http/node";
11
- import { codeGeneratorPlugin } from "@duplojs/http/codeGenerator";
12
- import * as DPath from "@duplojs/lang/path";
13
- import { renameUserBody, userStructure } from "./contracts";
14
-
15
- // Les dossiers parents de sortie sont préparés par le projet.
16
- const hub = createHub({ environment: "BUILD" })
17
- .register(routeStore.getAll())
18
- .plug(codeGeneratorPlugin({
19
- outputFile: DPath.declarePath("sdk/routes.d.ts"),
20
- generateStructure: {
21
- // Ce dossier contient exclusivement les sources générées.
22
- outputFolder: DPath.declarePath("sdk/dataStructures"),
23
- // L'extension est chargée dans ce module, avant ces appels.
24
- // Les copies nommées ne modifient pas les schémas des routes.
25
- structures: [
26
- userStructure.addIdentifier("User"),
27
- renameUserBody.addIdentifier("RenameUserBody"),
28
- ],
29
- disabledFromRoute: true,
30
- },
31
- }));
32
-
33
- await createHttpServer(hub, {
34
- host: "localhost",
35
- port: 1506,
36
- });
File without changes