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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +11 -11
  2. package/dist/bin/index.mjs +2 -2
  3. package/dist/bin/installSkill/index.d.ts +2 -0
  4. package/dist/bin/{install → installSkill}/index.mjs +3 -3
  5. package/dist/bin/{install → installSkill}/skill.mjs +1 -1
  6. package/dist/bin/setup/instructions.d.ts +1 -1
  7. package/docs/API/10-lang/10-array/10-at.ts +4 -4
  8. package/docs/API/10-lang/10-array/10-coalescing.ts +3 -2
  9. package/docs/API/10-lang/10-array/10-indexOf.ts +1 -1
  10. package/docs/API/10-lang/10-array/10-is.ts +17 -3
  11. package/docs/API/10-lang/10-array/10-lastIndexOf.ts +1 -1
  12. package/docs/API/10-lang/10-chrono/10-addTime.ts +1 -1
  13. package/docs/API/10-lang/10-chrono/10-closestTo.ts +5 -8
  14. package/docs/API/10-lang/10-chrono/10-isDate.ts +15 -2
  15. package/docs/API/10-lang/10-chrono/10-isSerializedTheDate.ts +16 -1
  16. package/docs/API/10-lang/10-chrono/10-isSerializedTheTime.ts +16 -1
  17. package/docs/API/10-lang/10-chrono/10-isTime.ts +15 -2
  18. package/docs/API/10-lang/10-chrono/10-maxDate.ts +4 -8
  19. package/docs/API/10-lang/10-chrono/10-maxTime.ts +4 -8
  20. package/docs/API/10-lang/10-chrono/10-minDate.ts +4 -8
  21. package/docs/API/10-lang/10-chrono/10-minTime.ts +4 -8
  22. package/docs/API/10-lang/10-chrono/10-sortDates.ts +6 -8
  23. package/docs/API/10-lang/10-chrono/10-sortTimes.ts +6 -8
  24. package/docs/API/10-lang/10-chrono/10-subtractTime.ts +1 -1
  25. package/docs/API/10-lang/10-common/10-and.ts +6 -0
  26. package/docs/API/10-lang/10-common/10-createQueue.ts +4 -3
  27. package/docs/API/10-lang/10-common/10-createTransformer.ts +1 -1
  28. package/docs/API/10-lang/10-common/10-equal.ts +6 -0
  29. package/docs/API/10-lang/10-common/10-falsy.ts +19 -0
  30. package/docs/API/10-lang/10-common/10-instanceOf.ts +14 -3
  31. package/docs/API/10-lang/10-common/10-isType.ts +6 -0
  32. package/docs/API/10-lang/10-common/10-justExec.ts +3 -3
  33. package/docs/API/10-lang/10-common/10-or.ts +17 -3
  34. package/docs/API/10-lang/10-common/10-tap.ts +28 -0
  35. package/docs/API/10-lang/10-common/10-toJSON.ts +1 -1
  36. package/docs/API/10-lang/10-common/10-toNative.ts +1 -1
  37. package/docs/API/10-lang/10-common/10-toRegExp.ts +1 -1
  38. package/docs/API/10-lang/10-common/10-truthy.ts +19 -0
  39. package/docs/API/10-lang/10-common/10-whenNot.ts +44 -13
  40. package/docs/API/10-lang/10-common/index.llms.md +4 -0
  41. package/docs/API/10-lang/10-dataStructure/10-typeStructureIdentifier.ts +2 -2
  42. package/docs/API/10-lang/10-either/10-asyncGroup.ts +1 -1
  43. package/docs/API/10-lang/10-either/10-asyncSafeCallback.ts +4 -2
  44. package/docs/API/10-lang/10-either/10-extractErrorInLeft.ts +45 -0
  45. package/docs/API/10-lang/10-either/10-forwardAssertsSelection.ts +1 -1
  46. package/docs/API/10-lang/10-either/10-group.ts +1 -1
  47. package/docs/API/10-lang/10-either/10-hasInformation.ts +6 -0
  48. package/docs/API/10-lang/10-either/10-isLeft.ts +10 -1
  49. package/docs/API/10-lang/10-either/10-isRight.ts +10 -1
  50. package/docs/API/10-lang/10-either/10-isSelected.ts +13 -1
  51. package/docs/API/10-lang/10-either/10-keepAsRightSelection.ts +1 -1
  52. package/docs/API/10-lang/10-either/10-matchInformation.ts +7 -5
  53. package/docs/API/10-lang/10-either/10-matchInformationCombination.ts +61 -0
  54. package/docs/API/10-lang/10-either/10-matchInformationCombinationOtherwise.ts +62 -0
  55. package/docs/API/10-lang/10-either/10-matchInformationOtherwise.ts +7 -5
  56. package/docs/API/10-lang/10-either/10-rightAsyncPipe.ts +2 -1
  57. package/docs/API/10-lang/10-either/10-rightPipe.ts +1 -1
  58. package/docs/API/10-lang/10-either/10-safeCallback.ts +1 -1
  59. package/docs/API/10-lang/10-either/10-unwrapOr.ts +2 -2
  60. package/docs/API/10-lang/10-either/10-unwrapOtherwise.ts +2 -2
  61. package/docs/API/10-lang/10-either/10-whenHasInformation.ts +4 -3
  62. package/docs/API/10-lang/10-either/10-whenHasInformationOtherwise.ts +5 -5
  63. package/docs/API/10-lang/10-either/10-whenIsLeft.ts +2 -2
  64. package/docs/API/10-lang/10-either/10-whenIsLeftOtherwise.ts +5 -5
  65. package/docs/API/10-lang/10-either/10-whenIsRight.ts +2 -2
  66. package/docs/API/10-lang/10-either/10-whenIsRightOtherwise.ts +7 -7
  67. package/docs/API/10-lang/10-either/10-whenIsSelected.ts +5 -5
  68. package/docs/API/10-lang/10-either/10-whenIsSelectedOtherwise.ts +5 -5
  69. package/docs/API/10-lang/10-either/index.llms.md +12 -0
  70. package/docs/API/10-lang/10-generator/10-asyncConcat.ts +7 -10
  71. package/docs/API/10-lang/10-generator/10-asyncFlat.ts +6 -6
  72. package/docs/API/10-lang/10-generator/10-concat.ts +3 -3
  73. package/docs/API/10-lang/10-generator/10-flat.ts +2 -2
  74. package/docs/API/10-lang/10-generator/10-map.ts +1 -1
  75. package/docs/API/10-lang/10-generator/10-reduce.ts +1 -1
  76. package/docs/API/10-lang/10-number/10-betweenThan.ts +43 -0
  77. package/docs/API/10-lang/10-number/10-betweenThanOrEqual.ts +43 -0
  78. package/docs/API/10-lang/10-number/10-greaterThan.ts +35 -0
  79. package/docs/API/10-lang/10-number/10-greaterThanOrEqual.ts +35 -0
  80. package/docs/API/10-lang/10-number/10-isEven.ts +33 -0
  81. package/docs/API/10-lang/10-number/10-isInteger.ts +33 -0
  82. package/docs/API/10-lang/10-number/10-isMultipleOf.ts +35 -0
  83. package/docs/API/10-lang/10-number/10-isNegative.ts +33 -0
  84. package/docs/API/10-lang/10-number/10-isNotZero.ts +33 -0
  85. package/docs/API/10-lang/10-number/10-isOdd.ts +33 -0
  86. package/docs/API/10-lang/10-number/10-isPositive.ts +33 -0
  87. package/docs/API/10-lang/10-number/10-isSafe.ts +33 -0
  88. package/docs/API/10-lang/10-number/10-isStrictNegative.ts +34 -0
  89. package/docs/API/10-lang/10-number/10-isStrictPositive.ts +33 -0
  90. package/docs/API/10-lang/10-number/10-lessThan.ts +35 -0
  91. package/docs/API/10-lang/10-number/10-lessThanOrEqual.ts +35 -0
  92. package/docs/API/10-lang/10-number/10-max.ts +19 -0
  93. package/docs/API/10-lang/10-number/10-maxOf.ts +19 -0
  94. package/docs/API/10-lang/10-number/10-min.ts +19 -0
  95. package/docs/API/10-lang/10-number/10-minOf.ts +19 -0
  96. package/docs/API/10-lang/10-number/10-sort.ts +19 -0
  97. package/docs/API/10-lang/10-number/10-sum.ts +19 -0
  98. package/docs/API/10-lang/10-number/index.llms.md +92 -0
  99. package/docs/API/10-lang/10-number/index.md +3 -0
  100. package/docs/API/10-lang/10-object/10-assign.ts +41 -0
  101. package/docs/API/10-lang/10-object/10-countKeys.ts +15 -0
  102. package/docs/API/10-lang/10-object/10-deepDiscriminate.ts +63 -0
  103. package/docs/API/10-lang/10-object/10-deepOverride.ts +35 -0
  104. package/docs/API/10-lang/10-object/10-discriminate.ts +55 -0
  105. package/docs/API/10-lang/10-object/10-discriminateEntryKey.ts +43 -0
  106. package/docs/API/10-lang/10-object/10-discriminateEntryValue.ts +44 -0
  107. package/docs/API/10-lang/10-object/10-entries.ts +19 -0
  108. package/docs/API/10-lang/10-object/10-entry.ts +17 -0
  109. package/docs/API/10-lang/10-object/10-fromEntries.ts +23 -0
  110. package/docs/API/10-lang/10-object/10-getDeepProperty.ts +26 -0
  111. package/docs/API/10-lang/10-object/10-getProperty.ts +24 -0
  112. package/docs/API/10-lang/10-object/10-hasKeys.ts +43 -0
  113. package/docs/API/10-lang/10-object/10-isSimple.ts +38 -0
  114. package/docs/API/10-lang/10-object/10-keys.ts +19 -0
  115. package/docs/API/10-lang/10-object/10-omit.ts +39 -0
  116. package/docs/API/10-lang/10-object/10-override.ts +24 -0
  117. package/docs/API/10-lang/10-object/10-pick.ts +41 -0
  118. package/docs/API/10-lang/10-object/10-to.ts +40 -0
  119. package/docs/API/10-lang/10-object/10-transformProperties.ts +43 -0
  120. package/docs/API/10-lang/10-object/10-transformProperty.ts +39 -0
  121. package/docs/API/10-lang/10-object/10-values.ts +19 -0
  122. package/docs/API/10-lang/10-object/index.llms.md +92 -0
  123. package/docs/API/10-lang/10-object/index.md +3 -0
  124. package/docs/API/10-lang/10-path/10-computeRelative.ts +19 -0
  125. package/docs/API/10-lang/10-path/10-concatSegment.ts +28 -0
  126. package/docs/API/10-lang/10-path/10-create.ts +21 -0
  127. package/docs/API/10-lang/10-path/10-createAbsolute.ts +21 -0
  128. package/docs/API/10-lang/10-path/10-createAbsoluteOrThrow.ts +16 -0
  129. package/docs/API/10-lang/10-path/10-createMatcher.ts +50 -0
  130. package/docs/API/10-lang/10-path/10-createOrThrow.ts +16 -0
  131. package/docs/API/10-lang/10-path/10-createSegment.ts +26 -0
  132. package/docs/API/10-lang/10-path/10-createSegmentOrThrow.ts +16 -0
  133. package/docs/API/10-lang/10-path/10-declareAbsolutePath.ts +15 -0
  134. package/docs/API/10-lang/10-path/10-declarePath.ts +15 -0
  135. package/docs/API/10-lang/10-path/10-declareSegment.ts +15 -0
  136. package/docs/API/10-lang/10-path/10-getBaseName.ts +22 -0
  137. package/docs/API/10-lang/10-path/10-getExtensionName.ts +22 -0
  138. package/docs/API/10-lang/10-path/10-getParentFolderPath.ts +25 -0
  139. package/docs/API/10-lang/10-path/10-is.ts +46 -0
  140. package/docs/API/10-lang/10-path/10-isAbsolute.ts +46 -0
  141. package/docs/API/10-lang/10-path/10-isSegment.ts +42 -0
  142. package/docs/API/10-lang/10-path/10-normalize.ts +26 -0
  143. package/docs/API/10-lang/10-path/10-resolveFrom.ts +37 -0
  144. package/docs/API/10-lang/10-path/10-resolveRelative.ts +23 -0
  145. package/docs/API/10-lang/10-path/index.llms.md +88 -0
  146. package/docs/API/10-lang/10-path/index.md +3 -0
  147. package/docs/API/10-lang/10-pattern/10-exhaustive.ts +26 -0
  148. package/docs/API/10-lang/10-pattern/10-isMatch.ts +72 -0
  149. package/docs/API/10-lang/10-pattern/10-match.ts +133 -0
  150. package/docs/API/10-lang/10-pattern/10-matchWithEntity.ts +49 -0
  151. package/docs/API/10-lang/10-pattern/10-matchWithEntityOtherwise.ts +55 -0
  152. package/docs/API/10-lang/10-pattern/10-matchWithError.ts +45 -0
  153. package/docs/API/10-lang/10-pattern/10-matchWithErrorOtherwise.ts +48 -0
  154. package/docs/API/10-lang/10-pattern/10-matchWithFact.ts +49 -0
  155. package/docs/API/10-lang/10-pattern/10-matchWithFactOtherwise.ts +49 -0
  156. package/docs/API/10-lang/10-pattern/10-matchWithNumber.ts +33 -0
  157. package/docs/API/10-lang/10-pattern/10-matchWithNumberOtherwise.ts +37 -0
  158. package/docs/API/10-lang/10-pattern/10-matchWithString.ts +34 -0
  159. package/docs/API/10-lang/10-pattern/10-matchWithStringOtherwise.ts +35 -0
  160. package/docs/API/10-lang/10-pattern/10-matchWithTaggedObject.ts +43 -0
  161. package/docs/API/10-lang/10-pattern/10-matchWithTaggedObjectOtherwise.ts +49 -0
  162. package/docs/API/10-lang/10-pattern/10-otherwise.ts +28 -0
  163. package/docs/API/10-lang/10-pattern/10-union.ts +47 -0
  164. package/docs/API/10-lang/10-pattern/10-when.ts +46 -0
  165. package/docs/API/10-lang/10-pattern/10-whenNot.ts +123 -0
  166. package/docs/API/10-lang/10-pattern/index.llms.md +80 -0
  167. package/docs/API/10-lang/10-pattern/index.md +3 -0
  168. package/docs/API/10-lang/10-printer/10-bold.ts +12 -0
  169. package/docs/API/10-lang/10-printer/10-colorized.ts +18 -0
  170. package/docs/API/10-lang/10-printer/10-colorizedBold.ts +18 -0
  171. package/docs/API/10-lang/10-printer/10-indent.ts +20 -0
  172. package/docs/API/10-lang/10-printer/10-primitives.md +11 -0
  173. package/docs/API/10-lang/10-printer/10-render.ts +29 -0
  174. package/docs/API/10-lang/10-printer/10-renderLine.ts +12 -0
  175. package/docs/API/10-lang/10-printer/10-renderParagraph.ts +16 -0
  176. package/docs/API/10-lang/10-printer/index.llms.md +37 -0
  177. package/docs/API/10-lang/10-printer/index.md +3 -0
  178. package/docs/API/10-lang/10-string/10-at.ts +18 -0
  179. package/docs/API/10-lang/10-string/10-capitalize.ts +18 -0
  180. package/docs/API/10-lang/10-string/10-charAt.ts +18 -0
  181. package/docs/API/10-lang/10-string/10-concat.ts +18 -0
  182. package/docs/API/10-lang/10-string/10-endsWith.ts +33 -0
  183. package/docs/API/10-lang/10-string/10-extract.ts +18 -0
  184. package/docs/API/10-lang/10-string/10-extractAll.ts +18 -0
  185. package/docs/API/10-lang/10-string/10-first.ts +17 -0
  186. package/docs/API/10-lang/10-string/10-includes.ts +33 -0
  187. package/docs/API/10-lang/10-string/10-indexOf.ts +17 -0
  188. package/docs/API/10-lang/10-string/10-isComposedOf.ts +33 -0
  189. package/docs/API/10-lang/10-string/10-isEmail.ts +56 -0
  190. package/docs/API/10-lang/10-string/10-isIn.ts +34 -0
  191. package/docs/API/10-lang/10-string/10-isKeyof.ts +37 -0
  192. package/docs/API/10-lang/10-string/10-isNotEmpty.ts +32 -0
  193. package/docs/API/10-lang/10-string/10-isNumber.ts +32 -0
  194. package/docs/API/10-lang/10-string/10-isTrimmed.ts +33 -0
  195. package/docs/API/10-lang/10-string/10-isUrl.ts +31 -0
  196. package/docs/API/10-lang/10-string/10-isUuid.ts +31 -0
  197. package/docs/API/10-lang/10-string/10-join.ts +18 -0
  198. package/docs/API/10-lang/10-string/10-last.ts +17 -0
  199. package/docs/API/10-lang/10-string/10-lastIndexOf.ts +17 -0
  200. package/docs/API/10-lang/10-string/10-length.ts +18 -0
  201. package/docs/API/10-lang/10-string/10-lengthEqual.ts +33 -0
  202. package/docs/API/10-lang/10-string/10-maxCharacters.ts +33 -0
  203. package/docs/API/10-lang/10-string/10-minCharacters.ts +33 -0
  204. package/docs/API/10-lang/10-string/10-normalize.ts +17 -0
  205. package/docs/API/10-lang/10-string/10-padEnd.ts +17 -0
  206. package/docs/API/10-lang/10-string/10-padStart.ts +17 -0
  207. package/docs/API/10-lang/10-string/10-pop.ts +17 -0
  208. package/docs/API/10-lang/10-string/10-prepend.ts +17 -0
  209. package/docs/API/10-lang/10-string/10-repeat.ts +17 -0
  210. package/docs/API/10-lang/10-string/10-replace.ts +18 -0
  211. package/docs/API/10-lang/10-string/10-replaceAll.ts +17 -0
  212. package/docs/API/10-lang/10-string/10-search.ts +17 -0
  213. package/docs/API/10-lang/10-string/10-shift.ts +17 -0
  214. package/docs/API/10-lang/10-string/10-slice.ts +17 -0
  215. package/docs/API/10-lang/10-string/10-sort.ts +19 -0
  216. package/docs/API/10-lang/10-string/10-sortCompare.ts +17 -0
  217. package/docs/API/10-lang/10-string/10-split.ts +34 -0
  218. package/docs/API/10-lang/10-string/10-startsWith.ts +33 -0
  219. package/docs/API/10-lang/10-string/10-stringify.ts +11 -0
  220. package/docs/API/10-lang/10-string/10-substring.ts +17 -0
  221. package/docs/API/10-lang/10-string/10-test.ts +17 -0
  222. package/docs/API/10-lang/10-string/10-to.ts +11 -0
  223. package/docs/API/10-lang/10-string/10-toLowerCase.ts +17 -0
  224. package/docs/API/10-lang/10-string/10-toUpperCase.ts +17 -0
  225. package/docs/API/10-lang/10-string/10-trim.ts +17 -0
  226. package/docs/API/10-lang/10-string/10-trimEnd.ts +17 -0
  227. package/docs/API/10-lang/10-string/10-trimStart.ts +17 -0
  228. package/docs/API/10-lang/10-string/10-uncapitalize.ts +17 -0
  229. package/docs/API/10-lang/10-string/index.llms.md +208 -0
  230. package/docs/API/10-lang/10-string/index.md +3 -0
  231. package/docs/API/10-lang/10-tuple/10-from.ts +50 -0
  232. package/docs/API/10-lang/10-tuple/10-map.ts +37 -0
  233. package/docs/API/10-lang/10-tuple/index.llms.md +12 -0
  234. package/docs/API/10-lang/10-tuple/index.md +3 -0
  235. package/docs/API/40-json-web-token/10-tokenHandler/10-createTokenHandler.ts +160 -0
  236. package/docs/API/40-json-web-token/10-tokenHandler/index.llms.md +8 -0
  237. package/docs/API/40-json-web-token/10-tokenHandler/index.md +3 -0
  238. package/docs/API/40-json-web-token/20-signer/10-createHS256.ts +24 -0
  239. package/docs/API/40-json-web-token/20-signer/10-createHS512.ts +24 -0
  240. package/docs/API/40-json-web-token/20-signer/10-createRS256.ts +28 -0
  241. package/docs/API/40-json-web-token/20-signer/10-createRS512.ts +28 -0
  242. package/docs/API/40-json-web-token/20-signer/10-factory.ts +29 -0
  243. package/docs/API/40-json-web-token/20-signer/index.llms.md +24 -0
  244. package/docs/API/40-json-web-token/20-signer/index.md +3 -0
  245. package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP.ts +26 -0
  246. package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP256.ts +26 -0
  247. package/docs/API/40-json-web-token/30-cipher/10-factory.ts +29 -0
  248. package/docs/API/40-json-web-token/30-cipher/index.llms.md +16 -0
  249. package/docs/API/40-json-web-token/30-cipher/index.md +3 -0
  250. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.decrypt.ts +17 -0
  251. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.encrypt.ts +11 -0
  252. package/docs/API/40-json-web-token/40-utils/10-AES_GCM.generateInitializationVector.ts +9 -0
  253. package/docs/API/40-json-web-token/40-utils/10-HMAC.sign.ts +13 -0
  254. package/docs/API/40-json-web-token/40-utils/10-HMAC.verify.ts +11 -0
  255. package/docs/API/40-json-web-token/40-utils/10-RSA.sign.ts +14 -0
  256. package/docs/API/40-json-web-token/40-utils/10-RSA.verify.ts +13 -0
  257. package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.decrypt.ts +13 -0
  258. package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.encrypt.ts +10 -0
  259. package/docs/API/40-json-web-token/40-utils/10-decodeBase64.ts +9 -0
  260. package/docs/API/40-json-web-token/40-utils/10-decodeBase64Url.ts +9 -0
  261. package/docs/API/40-json-web-token/40-utils/10-decodeText.ts +9 -0
  262. package/docs/API/40-json-web-token/40-utils/10-encodeBase64.ts +9 -0
  263. package/docs/API/40-json-web-token/40-utils/10-encodeBase64Url.ts +9 -0
  264. package/docs/API/40-json-web-token/40-utils/10-encodeText.ts +9 -0
  265. package/docs/API/40-json-web-token/40-utils/10-isBase64Url.ts +11 -0
  266. package/docs/API/40-json-web-token/40-utils/10-jsonParse.ts +11 -0
  267. package/docs/API/40-json-web-token/40-utils/10-pemToBinary.ts +11 -0
  268. package/docs/API/40-json-web-token/40-utils/index.llms.md +76 -0
  269. package/docs/API/40-json-web-token/40-utils/index.md +3 -0
  270. package/docs/API/40-json-web-token/index.md +3 -0
  271. package/docs/API/50-form/10-vue/10-construction/10-createForm.ts +48 -0
  272. package/docs/API/50-form/10-vue/10-construction/10-createFormField.ts +66 -0
  273. package/docs/API/50-form/10-vue/10-construction/10-createGridTemplates.ts +39 -0
  274. package/docs/API/50-form/10-vue/10-construction/10-createInput.ts +46 -0
  275. package/docs/API/50-form/10-vue/10-construction/10-createTemplate.ts +36 -0
  276. package/docs/API/50-form/10-vue/10-construction/fixtures/AddressInput.vue +19 -0
  277. package/docs/API/50-form/10-vue/10-construction/index.llms.md +24 -0
  278. package/docs/API/50-form/10-vue/10-construction/index.md +3 -0
  279. package/docs/API/50-form/10-vue/20-layouts/10-useCheckLayout.ts +40 -0
  280. package/docs/API/50-form/10-vue/20-layouts/10-useDisabledLayout.ts +34 -0
  281. package/docs/API/50-form/10-vue/20-layouts/10-useMultiLayout.ts +32 -0
  282. package/docs/API/50-form/10-vue/20-layouts/10-useRepeatLayout.ts +34 -0
  283. package/docs/API/50-form/10-vue/20-layouts/10-useSectionLayout.ts +20 -0
  284. package/docs/API/50-form/10-vue/20-layouts/10-useSlotLayout.ts +37 -0
  285. package/docs/API/50-form/10-vue/20-layouts/10-useStepLayout.ts +31 -0
  286. package/docs/API/50-form/10-vue/20-layouts/10-useUnionLayout.ts +48 -0
  287. package/docs/API/50-form/10-vue/20-layouts/index.llms.md +36 -0
  288. package/docs/API/50-form/10-vue/20-layouts/index.md +3 -0
  289. package/docs/API/50-form/10-vue/30-designSystem/10-useCheckbox.ts +13 -0
  290. package/docs/API/50-form/10-vue/30-designSystem/10-useCheckboxPolicy.ts +18 -0
  291. package/docs/API/50-form/10-vue/30-designSystem/10-useDateInput.ts +20 -0
  292. package/docs/API/50-form/10-vue/30-designSystem/10-useDualRangeInput.ts +27 -0
  293. package/docs/API/50-form/10-vue/30-designSystem/10-useFileInput.ts +23 -0
  294. package/docs/API/50-form/10-vue/30-designSystem/10-useNumberInput.ts +18 -0
  295. package/docs/API/50-form/10-vue/30-designSystem/10-useRadioGroup.ts +31 -0
  296. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeDateInput.ts +23 -0
  297. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeInput.ts +18 -0
  298. package/docs/API/50-form/10-vue/30-designSystem/10-useRangeTimeInput.ts +23 -0
  299. package/docs/API/50-form/10-vue/30-designSystem/10-useSelectInput.ts +31 -0
  300. package/docs/API/50-form/10-vue/30-designSystem/10-useTextInput.ts +14 -0
  301. package/docs/API/50-form/10-vue/30-designSystem/10-useTextareaInput.ts +14 -0
  302. package/docs/API/50-form/10-vue/30-designSystem/10-useTimeInput.ts +20 -0
  303. package/docs/API/50-form/10-vue/30-designSystem/20-components.md +11 -0
  304. package/docs/API/50-form/10-vue/30-designSystem/index.llms.md +65 -0
  305. package/docs/API/50-form/10-vue/30-designSystem/index.md +3 -0
  306. package/docs/API/50-form/10-vue/fixtures/templates.ts +20 -0
  307. package/docs/API/50-form/10-vue/index.md +3 -0
  308. package/docs/API/50-form/index.md +3 -0
  309. package/docs/API/60-playwright/10-construction/10-createComponent.ts +47 -0
  310. package/docs/API/60-playwright/10-construction/10-createComponentInteraction.ts +28 -0
  311. package/docs/API/60-playwright/10-construction/10-createPage.ts +34 -0
  312. package/docs/API/60-playwright/10-construction/10-createStepWrapper.ts +23 -0
  313. package/docs/API/60-playwright/10-construction/10-createWebsite.ts +57 -0
  314. package/docs/API/60-playwright/10-construction/10-initClient.ts +38 -0
  315. package/docs/API/60-playwright/10-construction/index.llms.md +28 -0
  316. package/docs/API/60-playwright/10-construction/index.md +3 -0
  317. package/docs/API/60-playwright/20-actions/10-check.ts +9 -0
  318. package/docs/API/60-playwright/20-actions/10-clear.ts +9 -0
  319. package/docs/API/60-playwright/20-actions/10-click.ts +9 -0
  320. package/docs/API/60-playwright/20-actions/10-dragTo.ts +10 -0
  321. package/docs/API/60-playwright/20-actions/10-extractContent.ts +10 -0
  322. package/docs/API/60-playwright/20-actions/10-fill.ts +9 -0
  323. package/docs/API/60-playwright/20-actions/10-focus.ts +9 -0
  324. package/docs/API/60-playwright/20-actions/10-forceClick.ts +10 -0
  325. package/docs/API/60-playwright/20-actions/10-hover.ts +9 -0
  326. package/docs/API/60-playwright/20-actions/10-press.ts +9 -0
  327. package/docs/API/60-playwright/20-actions/10-selectOption.ts +10 -0
  328. package/docs/API/60-playwright/20-actions/10-type.ts +10 -0
  329. package/docs/API/60-playwright/20-actions/10-uncheck.ts +9 -0
  330. package/docs/API/60-playwright/20-actions/10-withStep.ts +10 -0
  331. package/docs/API/60-playwright/20-actions/index.llms.md +60 -0
  332. package/docs/API/60-playwright/20-actions/index.md +3 -0
  333. package/docs/API/60-playwright/30-assertions/10-toBeBusy.ts +10 -0
  334. package/docs/API/60-playwright/30-assertions/10-toBeChecked.ts +9 -0
  335. package/docs/API/60-playwright/30-assertions/10-toBeDisabled.ts +9 -0
  336. package/docs/API/60-playwright/30-assertions/10-toBeEnabled.ts +9 -0
  337. package/docs/API/60-playwright/30-assertions/10-toBeHidden.ts +9 -0
  338. package/docs/API/60-playwright/30-assertions/10-toBeNotBusy.ts +10 -0
  339. package/docs/API/60-playwright/30-assertions/10-toBeVisible.ts +10 -0
  340. package/docs/API/60-playwright/30-assertions/10-toContainText.ts +9 -0
  341. package/docs/API/60-playwright/30-assertions/10-toHaveAttribute.ts +12 -0
  342. package/docs/API/60-playwright/30-assertions/10-toHaveClass.ts +9 -0
  343. package/docs/API/60-playwright/30-assertions/10-toHaveNoText.ts +10 -0
  344. package/docs/API/60-playwright/30-assertions/10-toHaveQuantity.ts +20 -0
  345. package/docs/API/60-playwright/30-assertions/10-toHaveText.ts +9 -0
  346. package/docs/API/60-playwright/30-assertions/10-toHaveValue.ts +9 -0
  347. package/docs/API/60-playwright/30-assertions/10-withStep.ts +10 -0
  348. package/docs/API/60-playwright/30-assertions/index.llms.md +64 -0
  349. package/docs/API/60-playwright/30-assertions/index.md +3 -0
  350. package/docs/API/60-playwright/fixtures/component.ts +44 -0
  351. package/docs/API/60-playwright/index.md +3 -0
  352. package/docs/API.llms.md +84 -0
  353. package/docs/concepts/01-fundamental/01-constraint/20-manipulation.ts +9 -6
  354. package/docs/concepts/01-fundamental/01-constraint/30-cast.ts +9 -5
  355. package/docs/concepts/01-fundamental/02-currying/01-use.ts +5 -0
  356. package/docs/concepts/01-fundamental/02-currying/10-built-in-function.ts +28 -16
  357. package/docs/concepts/01-fundamental/02-currying/20-inner-pipe.ts +11 -2
  358. package/docs/concepts/01-fundamental/02-currying/30-async-pipe.ts +11 -2
  359. package/docs/concepts/01-fundamental/03-either/10-discrimination.ts +23 -12
  360. package/docs/concepts/01-fundamental/03-either/20-exhaustive-handling.ts +27 -10
  361. package/docs/concepts/01-fundamental/03-either/30-composition.ts +18 -10
  362. package/docs/concepts/01-fundamental/03-either/40-result-adaptation.ts +10 -4
  363. package/docs/concepts/01-fundamental/03-either/50-external-results.ts +16 -3
  364. package/docs/concepts/01-fundamental/04-data-structure/10-structure.ts +110 -59
  365. package/docs/concepts/01-fundamental/04-data-structure/20-constraint.ts +20 -12
  366. package/docs/concepts/01-fundamental/04-data-structure/30-validation.ts +13 -9
  367. package/docs/concepts/01-fundamental/04-data-structure/40-codecs.ts +31 -20
  368. package/docs/concepts/01-fundamental/04-data-structure/50-recursive.ts +10 -1
  369. package/docs/concepts/01-fundamental/05-chrono/10-creation.ts +39 -13
  370. package/docs/concepts/01-fundamental/05-chrono/20-manipulation.ts +20 -4
  371. package/docs/concepts/01-fundamental/05-chrono/30-serialized.ts +22 -6
  372. package/docs/concepts/01-fundamental/05-chrono/40-timezone.ts +5 -1
  373. package/docs/concepts/01-fundamental/06-modeling/20-entity.ts +29 -42
  374. package/docs/concepts/01-fundamental/06-modeling/30-tagged-object.ts +46 -23
  375. package/docs/concepts/01-fundamental/06-modeling/40-entity-lifecycle.ts +30 -33
  376. package/docs/concepts/01-fundamental/07-discrimination/10-entity.ts +52 -20
  377. package/docs/concepts/01-fundamental/07-discrimination/20-fact.ts +54 -38
  378. package/docs/concepts/01-fundamental/07-discrimination/30-tagged-object.ts +52 -20
  379. package/docs/concepts/01-fundamental/07-discrimination/40-error.ts +26 -10
  380. package/docs/concepts/01-fundamental/07-discrimination/50-literal.ts +29 -10
  381. package/docs/concepts/01-fundamental/07-discrimination/60-shape.ts +10 -2
  382. package/docs/concepts/01-fundamental/07-discrimination/70-predicate.ts +18 -6
  383. package/docs/concepts/01-fundamental/08-kind/01-identity.md +7 -0
  384. package/docs/concepts/01-fundamental/08-kind/20-metadata.md +11 -0
  385. package/docs/concepts/01-fundamental/08-kind/30-transport.md +11 -0
  386. package/docs/concepts/01-fundamental/08-kind/index.md +3 -0
  387. package/docs/concepts/02-server/10-file/10-manipulation.ts +15 -3
  388. package/docs/concepts/02-server/10-file/20-path.ts +22 -6
  389. package/docs/concepts/02-server/20-http/10-init.ts +1 -9
  390. package/docs/concepts/02-server/20-http/20-route.ts +40 -32
  391. package/docs/concepts/02-server/20-http/30-routine.ts +12 -19
  392. package/docs/concepts/02-server/20-http/40-jwt.ts +49 -37
  393. package/docs/concepts/02-server/20-http/50-open-api.ts +44 -0
  394. package/docs/concepts/02-server/20-http/index.md +1 -1
  395. package/docs/concepts/02-server/30-environment/10-platform.ts +12 -3
  396. package/docs/concepts/02-server/30-environment/20-variable.ts +13 -7
  397. package/docs/concepts/03-client/10-http/10-init.ts +11 -23
  398. package/docs/concepts/03-client/10-http/20-request.ts +79 -69
  399. package/docs/concepts/03-client/10-http/30-hook.ts +23 -23
  400. package/docs/concepts/03-client/20-form/10-init.ts +18 -15
  401. package/docs/concepts/03-client/20-form/20-input.ts +13 -6
  402. package/docs/concepts/03-client/20-form/30-layout.ts +44 -49
  403. package/docs/concepts/03-client/20-form/40-template.ts +10 -5
  404. package/docs/concepts/03-client/20-form/50-integration.md +11 -0
  405. package/docs/concepts/03-client/20-form/examples/postModeration/ThePage.vue +32 -0
  406. package/docs/concepts/03-client/20-form/examples/postModeration/usePostModeration.ts +80 -0
  407. package/docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md +23 -20
  408. package/docs/concepts/05-type-driven-design/01-architecture/index.md +1 -1
  409. package/docs/concepts/05-type-driven-design/02-domains/10-entities.md +29 -37
  410. package/docs/concepts/05-type-driven-design/02-domains/20-aggregates.md +42 -26
  411. package/docs/concepts/05-type-driven-design/02-domains/30-repositories.md +20 -26
  412. package/docs/concepts/05-type-driven-design/02-domains/40-refinements.md +30 -0
  413. package/docs/concepts/05-type-driven-design/02-domains/index.md +1 -1
  414. package/docs/concepts/05-type-driven-design/03-applications/10-use-case.md +33 -40
  415. package/docs/concepts/05-type-driven-design/03-applications/20-ports.md +49 -0
  416. package/docs/concepts/05-type-driven-design/03-applications/index.md +1 -1
  417. package/docs/concepts/05-type-driven-design/04-infrastructure/10-implementation.md +27 -36
  418. package/docs/concepts/05-type-driven-design/04-infrastructure/index.md +1 -1
  419. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/index.ts +1 -0
  420. package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/waitingListEntry.ts +17 -0
  421. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientGiveBackBook.ts +30 -12
  422. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientRentBook.ts +9 -8
  423. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/createBook.ts +7 -7
  424. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/index.ts +2 -0
  425. package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/withdrawBook.ts +32 -0
  426. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientGiveBackBook.ts +72 -13
  427. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientRentBook.ts +37 -11
  428. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/createBook.ts +29 -17
  429. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/index.ts +1 -0
  430. package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/withdrawBook.ts +37 -0
  431. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/create.ts +4 -5
  432. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/index.ts +2 -0
  433. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/rental.ts +9 -9
  434. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/reserve.ts +37 -0
  435. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/returnBook.ts +11 -9
  436. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/withdraw.ts +21 -0
  437. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/index.ts +42 -11
  438. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/giveBackBook.ts +11 -9
  439. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/rentBook.ts +10 -10
  440. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/index.ts +6 -29
  441. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/index.ts +1 -0
  442. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/cancel.ts +26 -0
  443. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/create.ts +33 -0
  444. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/index.ts +3 -0
  445. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/prepare.ts +23 -0
  446. package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/index.ts +79 -0
  447. package/docs/concepts/05-type-driven-design/fixtures/business/domains/index.ts +1 -0
  448. package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/index.ts +1 -0
  449. package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/refineLinkBetweenClientAndBorrowedBook.ts +34 -0
  450. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/book.ts +1 -1
  451. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/index.ts +1 -0
  452. package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/waitingListEntry.ts +19 -0
  453. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/clientRentBook.ts +3 -3
  454. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/bookExist.ts +2 -2
  455. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/clientExist.ts +2 -2
  456. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientGiveBackBook.ts +23 -14
  457. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientRentBook.ts +7 -12
  458. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/book.ts +1 -1
  459. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/index.ts +1 -0
  460. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/waitingListEntry.ts +17 -0
  461. package/docs/concepts/05-type-driven-design/fixtures/infrastructure/useCases/index.ts +2 -1
  462. package/docs/concepts/05-type-driven-design/index.md +2 -2
  463. package/docs/concepts.llms.md +71 -25
  464. package/instructions/coding-conventions.md +2 -2
  465. package/package.json +17 -14
  466. package/skills/http-client/SKILL.md +1 -1
  467. package/skills/http-client/references/configuration.md +3 -1
  468. package/skills/http-client/references/examples/client-expectations.ts +11 -10
  469. package/skills/http-client/references/examples/client-streams.ts +2 -2
  470. package/skills/http-client/references/examples/external-client.ts +2 -2
  471. package/skills/http-client/references/responses.md +1 -1
  472. package/skills/http-server/SKILL.md +4 -9
  473. package/skills/http-server/references/examples/authentication.ts +2 -2
  474. package/skills/http-server/references/examples/inferred-client.ts +54 -0
  475. package/skills/http-server/references/examples/minimal-route.ts +2 -3
  476. package/skills/http-server/references/examples/protected-route.ts +4 -6
  477. package/skills/http-server/references/examples/rename-user-route.ts +4 -6
  478. package/skills/http-server/references/examples/user-checker.ts +2 -2
  479. package/skills/http-server/references/examples/user-route.ts +12 -5
  480. package/skills/http-server/references/initialization.md +1 -1
  481. package/skills/http-server/references/reusable-flows.md +3 -3
  482. package/skills/http-server/references/routes-and-floor.md +11 -3
  483. package/dist/bin/install/index.d.ts +0 -2
  484. package/docs/concepts/02-server/20-http/50-codegen.ts +0 -29
  485. package/skills/http-server/references/code-generation.md +0 -31
  486. package/skills/http-server/references/examples/generate-sdk.ts +0 -36
  487. /package/dist/bin/{install → installSkill}/skill.d.ts +0 -0
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Déclaration d'une politique unique pour créer et vérifier une famille de tokens.
5
5
  */
6
+ import type * as DCommon from "@duplojs/lang/common";
6
7
  import { Cipher, createTokenHandler, Signer } from "@duplojs/json-web-token";
7
8
  import * as DChrono from "@duplojs/lang/chrono";
8
9
  import * as DDataStructure from "@duplojs/lang/dataStructure";
@@ -32,9 +33,6 @@ const tokenHandler = createTokenHandler({
32
33
  });
33
34
 
34
35
  // À la création, les structures du handler typent et valident header/payload.
35
- // | Right<"token-created", string>
36
- // | Left<"header-encode-error", Error>
37
- // | Left<"payload-encode-error", Error>;
38
36
  const createdTokenResult = await tokenHandler.create(
39
37
  {
40
38
  userId: "42",
@@ -46,50 +44,64 @@ const createdTokenResult = await tokenHandler.create(
46
44
  },
47
45
  },
48
46
  );
47
+ type _CheckCreatedTokenResult = DCommon.ExpectType<
48
+ typeof createdTokenResult,
49
+ DEither.Right<"token-created", string> | DEither.Left<"header-encode-error", DDataStructure.Error> | DEither.Left<"payload-encode-error", DDataStructure.Error>,
50
+ "strict"
51
+ >;
49
52
 
50
53
  if (DEither.isRight(createdTokenResult)) {
51
- // string
52
54
  const token = DEither.unwrapRight(createdTokenResult);
55
+ type _CheckToken = DCommon.ExpectType<typeof token, string, "strict">;
53
56
  }
54
57
 
55
58
  // `verify` applique la même politique et restitue header/payload typés.
56
- // | Left<"token-format", unknown>
57
- // | Left<"header-json-error", unknown>
58
- // | Left<"header-decode-error", Error>
59
- // | Left<"payload-json-error", unknown>
60
- // | Left<"payload-decode-error", Error>
61
- // | Left<"signature-invalid", unknown>
62
- // | Left<"issue-invalid", unknown>
63
- // | Left<"subject-invalid", unknown>
64
- // | Left<"audience-invalid", unknown>
65
- // | Left<"expired", unknown>
66
- // | Right<
67
- // "token-verified",
68
- // {
69
- // readonly header: {
70
- // readonly typ: "JWT";
71
- // readonly alg: "HS256";
72
- // readonly kid?: string | undefined;
73
- // };
74
- // readonly payload: {
75
- // readonly iss: string;
76
- // readonly sub: undefined;
77
- // readonly aud: string;
78
- // readonly exp: number;
79
- // readonly iat: number;
80
- // readonly userId: string;
81
- // readonly role: "admin";
82
- // };
83
- // }
84
- // >;
85
59
  const verifiedTokenResult = await tokenHandler.verify("receive-token");
60
+ type _CheckVerifiedTokenResult = DCommon.ExpectType<typeof verifiedTokenResult,
61
+ DEither.Left<"token-format", unknown> | DEither.Left<"header-json-error", unknown> | DEither.Left<"header-decode-error", DDataStructure.Error> | DEither.Left<"payload-json-error", unknown> | DEither.Left<"payload-decode-error", DDataStructure.Error> | DEither.Left<"signature-invalid", unknown> | DEither.Left<"issue-invalid", unknown> | DEither.Left<"subject-invalid", unknown> | DEither.Left<"audience-invalid", unknown> | DEither.Left<"expired", unknown> | DEither.Right<"token-verified", {
62
+ readonly header: {
63
+ readonly typ: "JWT";
64
+ readonly alg: "HS256";
65
+ readonly kid?: string | undefined;
66
+ };
67
+ readonly payload: {
68
+ readonly iss: string;
69
+ readonly sub: undefined;
70
+ readonly aud: string;
71
+ readonly exp: number;
72
+ readonly iat: number;
73
+ readonly userId: string;
74
+ readonly role: "admin";
75
+ };
76
+ }>,
77
+ "strict"
78
+ >;
86
79
 
87
80
  if (DEither.isRight(verifiedTokenResult)) {
88
- const { payload, header } = DEither.unwrapRight(verifiedTokenResult);
81
+ const verifiedToken = DEither.unwrapRight(verifiedTokenResult);
82
+ type _CheckVerifiedToken = DCommon.ExpectType<typeof verifiedToken, {
83
+ readonly header: {
84
+ readonly typ: "JWT";
85
+ readonly alg: "HS256";
86
+ readonly kid?: string | undefined;
87
+ };
88
+ readonly payload: {
89
+ readonly iss: string;
90
+ readonly sub: undefined;
91
+ readonly aud: string;
92
+ readonly exp: number;
93
+ readonly iat: number;
94
+ readonly userId: string;
95
+ readonly role: "admin";
96
+ };
97
+ }, "strict">;
89
98
 
90
- const userId = payload.userId;
91
- const role = payload.role;
92
- const kid = header.kid;
99
+ const userId = verifiedToken.payload.userId;
100
+ const role = verifiedToken.payload.role;
101
+ const kid = verifiedToken.header.kid;
102
+ type _CheckUserId = DCommon.ExpectType<typeof userId, string, "strict">;
103
+ type _CheckRole = DCommon.ExpectType<typeof role, "admin", "strict">;
104
+ type _CheckKid = DCommon.ExpectType<typeof kid, string | undefined, "strict">;
93
105
  }
94
106
 
95
107
  // Avec une factory de `Signer` ou `Cipher`, la configuration est fournie
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @title Générer la documentation OpenAPI d'une API HTTP.
3
+ *
4
+ * Décrire les réponses des routes et exposer leur documentation.
5
+ */
6
+ import { createHub, useRouteBuilder } from "@duplojs/http";
7
+ import { OpenApiEndpointContractMetadata, openApiGeneratorPlugin } from "@duplojs/http/openApiGenerator";
8
+ import * as DDataStructure from "@duplojs/lang/dataStructure";
9
+
10
+ // Le plugin reprend les entrées déclarées dans les extractions. Décrire les
11
+ // réponses à documenter avec `OpenApiEndpointContractMetadata` sur les étapes
12
+ // concernées. Ces métadonnées servent à la documentation ; elles ne valident
13
+ // pas les réponses envoyées par la route.
14
+ const helloRoute = useRouteBuilder("GET", "/hello")
15
+ .extract(
16
+ {
17
+ query: { name: DDataStructure.string() },
18
+ },
19
+ ({ response }) => response.badRequest("hello.invalid"),
20
+ OpenApiEndpointContractMetadata({
21
+ code: "400",
22
+ information: "hello.invalid",
23
+ }),
24
+ )
25
+ .handler(
26
+ ({ name }, { response }) => response.ok("hello.received", { name }),
27
+ OpenApiEndpointContractMetadata({
28
+ code: "200",
29
+ information: "hello.received",
30
+ body: DDataStructure.object({ name: DDataStructure.string() }),
31
+ }),
32
+ );
33
+
34
+ // Le plugin collecte les entrées des extractions et les métadonnées de sortie
35
+ // des routes, de leurs étapes et de leurs processus, y compris le preflight.
36
+ // Sans métadonnées de sortie, une réponse de handler n'est pas documentée.
37
+ // Une extraction sans métadonnée locale documente par défaut 422 / extract-error.
38
+ // Si le refus par défaut du Hub change, adapter aussi `defaultExtractMetadata`
39
+ // dans les options du plugin ; un refus local se décrit comme ci-dessus.
40
+ export const documentedHub = createHub({ environment: "DEV" })
41
+ .register(helloRoute)
42
+ .plug(openApiGeneratorPlugin({ routePath: "/swagger" }));
43
+
44
+ // Le connecteur déclenche la génération en environnement DEV ou BUILD.
@@ -1,3 +1,3 @@
1
1
  ## HTTP
2
2
 
3
- Interfaces HTTP côté serveur : réception et validation des requêtes, orchestration des traitements et contrats de réponse typés partageables avec les clients.
3
+ Développement d’API HTTP avec DuploJS, de la définition des routes au démarrage du serveur.
@@ -5,6 +5,7 @@
5
5
  * applicatif indépendant du runtime.
6
6
  */
7
7
  import * as DCommon from "@duplojs/lang/common";
8
+ import type * as DEither from "@duplojs/lang/either";
8
9
  import type * as DPath from "@duplojs/lang/path";
9
10
  import * as DSCommon from "@duplojs/server/common";
10
11
  import * as DSFile from "@duplojs/server/file";
@@ -14,14 +15,22 @@ import { createHttpServer } from "@duplojs/http/node";
14
15
  // Les capacités proches entre runtimes sont exposées par une même API.
15
16
  const resourcePath: string & DPath.Path = DCommon.cast("/resources/config.json");
16
17
 
17
- // DEither.Right<file-system-write-json-file, void> | DEither.Left<...> | ...
18
18
  const writeJsonResult = await DSFile.writeJsonFile(resourcePath, { version: 1.0 });
19
+ type _CheckWriteJsonResult = DCommon.ExpectType<typeof writeJsonResult, DSFile.WriteJsonFileResult, "strict">;
19
20
 
20
- // DEither.Error<unknown> | DEither.Success<string & DPath.Absolute>
21
21
  const currentWorkingDirectoryResult = DSCommon.getCurrentWorkDirectory();
22
+ type _CheckCurrentWorkingDirectoryResultLine21 = DCommon.ExpectType<
23
+ typeof currentWorkingDirectoryResult,
24
+ DEither.Error<unknown> | DEither.Success<string & DPath.Absolute>,
25
+ "strict"
26
+ >;
22
27
 
23
- // string[]
24
28
  const processArguments = DSCommon.getProcessArguments();
29
+ type _CheckProcessArgumentsLine24 = DCommon.ExpectType<
30
+ typeof processArguments,
31
+ string[],
32
+ "strict"
33
+ >;
25
34
 
26
35
  const hub = createHub({
27
36
  environment: "DEV",
@@ -7,6 +7,8 @@
7
7
  import * as DSCommon from "@duplojs/server/common";
8
8
  import * as DDataStructure from "@duplojs/lang/dataStructure";
9
9
  import * as DCommon from "@duplojs/lang/common";
10
+ import type * as DNumber from "@duplojs/lang/number";
11
+ import type * as DString from "@duplojs/lang/string";
10
12
 
11
13
  // `environmentVariableOrThrow` est adaptée au démarrage d'une application :
12
14
  // une configuration invalide interrompt directement l'initialisation.
@@ -32,10 +34,14 @@ const envs = await DSCommon.environmentVariableOrThrow(
32
34
  justRead: true,
33
35
  },
34
36
  );
35
- // {
36
- // readonly host: "0.0.0.0" | "127.0.0.1" | "localhost";
37
- // readonly name: string;
38
- // readonly port: number & Positive;
39
- // readonly ENVIRONMENT: "DEV" | "PROD";
40
- // readonly DATABASE_URL: string & Url;
41
- // }
37
+ type _CheckEnvs = DCommon.ExpectType<
38
+ typeof envs,
39
+ {
40
+ readonly host: "0.0.0.0" | "127.0.0.1" | "localhost";
41
+ readonly name: string;
42
+ readonly port: number & DNumber.Positive;
43
+ readonly ENVIRONMENT: "DEV" | "PROD";
44
+ readonly DATABASE_URL: string & DString.Url;
45
+ },
46
+ "strict"
47
+ >;
@@ -1,29 +1,16 @@
1
1
  /**
2
2
  * @title Initialiser un client HTTP
3
3
  *
4
- * Création d'un client à partir du contrat statique des routes, configuration
5
- * globale et conservation du typage des requêtes et réponses exposées par le
6
- * serveur.
4
+ * Configuration d'un client HTTP typé et des paramètres communs aux requêtes.
7
5
  */
8
6
  import { createHttpClient } from "@duplojs/http/client";
7
+ import { type RouteDeclarationToContract } from "@duplojs/http";
8
+ import * as DCommon from "@duplojs/lang/common";
9
+ import { type usersRoute } from "../../02-server/20-http/20-route";
9
10
 
10
- // Exemple réduit du contrat produit par `codeGeneratorPlugin`.
11
- export interface Routes {
12
- method: "GET";
13
- path: "/hello-world";
14
- query: {
15
- name: string;
16
- };
17
- responses: {
18
- code: "422";
19
- information: "extract-error";
20
- body?: undefined;
21
- } | {
22
- code: "200";
23
- information: "helloWorld.send";
24
- body: string;
25
- };
26
- }
11
+ // L'import de type ne charge pas les déclarations de routes au runtime.
12
+ // Les réponses incluent les retours du handler et les refus des étapes.
13
+ export type Routes = RouteDeclarationToContract<typeof usersRoute>;
27
14
 
28
15
  // `baseUrl` suffit pour créer un client.
29
16
  // Les autres options configurent le comportement global.
@@ -42,14 +29,15 @@ client.addDefaultHeader(
42
29
  // Le contrat limite les paths, paramètres et réponses disponibles.
43
30
  const response = await client
44
31
  .get(
45
- "/hello-world",
32
+ "/users",
46
33
  {
47
34
  query: {
48
- name: "William",
35
+ page: DCommon.cast(1),
36
+ quantityPerPage: DCommon.cast(5),
49
37
  },
50
38
  },
51
39
  )
52
- .iWantInformationOrThrow("helloWorld.send");
40
+ .iWantInformationOrThrow("users.findMany");
53
41
 
54
42
  void response.body;
55
43
  void response.code;
@@ -9,74 +9,74 @@ import * as DCommon from "@duplojs/lang/common";
9
9
  import * as DEither from "@duplojs/lang/either";
10
10
 
11
11
  export type Routes = {
12
- method: "POST";
13
- path: "/users";
14
- body: {
15
- username: string;
16
- age: number;
12
+ readonly method: "POST";
13
+ readonly path: "/users";
14
+ readonly body: {
15
+ readonly username: string;
16
+ readonly age: number;
17
17
  };
18
- responses: {
19
- code: "422";
20
- information: "extract-error";
21
- body?: undefined;
18
+ readonly responses: {
19
+ readonly code: "422";
20
+ readonly information: "extract-error";
21
+ readonly body: Error;
22
22
  } | {
23
- code: "204";
24
- information: "user.created";
25
- body?: undefined;
23
+ readonly code: "204";
24
+ readonly information: "user.created";
25
+ readonly body: undefined;
26
26
  };
27
27
  } | {
28
- method: "POST";
29
- path: "/users/{userId}/posts";
30
- params: {
31
- userId: number;
28
+ readonly method: "POST";
29
+ readonly path: "/users/{userId}/posts";
30
+ readonly params: {
31
+ readonly userId: number;
32
32
  };
33
- body: {
34
- title: string;
35
- content: string;
33
+ readonly body: {
34
+ readonly title: string;
35
+ readonly content: string;
36
36
  };
37
- responses: {
38
- code: "422";
39
- information: "extract-error";
40
- body?: undefined;
37
+ readonly responses: {
38
+ readonly code: "422";
39
+ readonly information: "extract-error";
40
+ readonly body: Error;
41
41
  } | {
42
- code: "204";
43
- information: "post.created";
44
- body?: undefined;
42
+ readonly code: "204";
43
+ readonly information: "post.created";
44
+ readonly body: undefined;
45
45
  };
46
46
  } | {
47
- method: "POST";
48
- path: "/documents";
49
- body: DCommon.TheFormData<{
50
- bool: boolean;
51
- myFile: readonly File[] & DArray.LengthEqual<1>;
52
- name: string;
47
+ readonly method: "POST";
48
+ readonly path: "/documents";
49
+ readonly body: DCommon.TheFormData<{
50
+ readonly bool: boolean;
51
+ readonly myFile: readonly File[] & DArray.LengthEqual<1>;
52
+ readonly name: string;
53
53
  }>;
54
- responses: {
55
- code: "422";
56
- information: "extract-error";
57
- body?: undefined;
54
+ readonly responses: {
55
+ readonly code: "422";
56
+ readonly information: "extract-error";
57
+ readonly body: Error;
58
58
  } | {
59
- code: "204";
60
- information: "file.receive";
61
- body?: undefined;
59
+ readonly code: "204";
60
+ readonly information: "file.receive";
61
+ readonly body: undefined;
62
62
  };
63
63
  } | {
64
- method: "GET";
65
- path: "/posts";
66
- query: {
67
- page: number;
64
+ readonly method: "GET";
65
+ readonly path: "/posts";
66
+ readonly query: {
67
+ readonly page: number;
68
68
  };
69
- responses: {
70
- code: "422";
71
- information: "extract-error";
72
- body?: undefined;
69
+ readonly responses: {
70
+ readonly code: "422";
71
+ readonly information: "extract-error";
72
+ readonly body: Error;
73
73
  } | {
74
- code: "200";
75
- information: "post.findMany";
76
- body: {
77
- title: string;
78
- content: string;
79
- authorId: number;
74
+ readonly code: "200";
75
+ readonly information: "post.findMany";
76
+ readonly body: readonly {
77
+ readonly title: string;
78
+ readonly content: string;
79
+ readonly authorId: number;
80
80
  }[];
81
81
  };
82
82
  };
@@ -138,18 +138,22 @@ await client
138
138
  .whenInformation(
139
139
  "post.findMany",
140
140
  ({ body }) => {
141
- // body: {
142
- // title: string;
143
- // content: string;
144
- // authorId: number;
145
- // }[]
141
+ type _CheckPostBody = DCommon.ExpectType<
142
+ typeof body,
143
+ readonly {
144
+ readonly title: string;
145
+ readonly content: string;
146
+ readonly authorId: number;
147
+ }[],
148
+ "strict"
149
+ >;
146
150
  void body;
147
151
  },
148
152
  )
149
153
  .whenCode(
150
154
  "422",
151
155
  ({ information }) => {
152
- // information: "extract-error"
156
+ type _CheckErrorInformation = DCommon.ExpectType<typeof information, "extract-error", "strict">;
153
157
  void information;
154
158
  },
155
159
  );
@@ -173,8 +177,7 @@ const maybeCreatedPost = await client
173
177
 
174
178
  if (DEither.isRight(maybeCreatedPost)) {
175
179
  const response = DEither.unwrapRight(maybeCreatedPost);
176
-
177
- // information: "post.created"
180
+ type _CheckCreatedInformation = DCommon.ExpectType<typeof response.information, "post.created", "strict">;
178
181
  void response.information;
179
182
  }
180
183
 
@@ -193,6 +196,11 @@ const createdPostResponse = await client
193
196
  },
194
197
  )
195
198
  .iWantInformationOrThrow("post.created");
199
+ type _CheckCreatedPostInformation = DCommon.ExpectType<
200
+ typeof createdPostResponse.information,
201
+ "post.created",
202
+ "strict"
203
+ >;
196
204
 
197
205
  // `expected` regroupe les succès `2xx` et erreurs client `4xx`.
198
206
  const maybeExpectedResponse = await client
@@ -208,8 +216,11 @@ const maybeExpectedResponse = await client
208
216
 
209
217
  if (DEither.isRight(maybeExpectedResponse)) {
210
218
  const response = DEither.unwrapRight(maybeExpectedResponse);
211
-
212
- // information: "post.findMany" | "extract-error"
219
+ type _CheckExpectedInformation = DCommon.ExpectType<
220
+ typeof response.information,
221
+ "post.findMany" | "extract-error",
222
+ "strict"
223
+ >;
213
224
  void response.information;
214
225
  }
215
226
 
@@ -230,12 +241,11 @@ const maybePosts = await client
230
241
 
231
242
  if (DEither.isRight(maybePosts)) {
232
243
  const response = DEither.unwrapRight(maybePosts);
233
-
234
- // body: {
235
- // title: string;
236
- // content: string;
237
- // authorId: number;
238
- // }[]
244
+ type _CheckPostsBody = DCommon.ExpectType<typeof response.body, readonly {
245
+ readonly title: string;
246
+ readonly content: string;
247
+ readonly authorId: number;
248
+ }[], "strict">;
239
249
  void response.body;
240
250
  }
241
251
 
@@ -6,35 +6,35 @@
6
6
  import { createHttpClient } from "@duplojs/http/client";
7
7
 
8
8
  export type Routes = {
9
- method: "GET";
10
- path: "/profile";
11
- responses: {
12
- code: "401";
13
- information: "auth.required";
14
- body?: undefined;
9
+ readonly method: "GET";
10
+ readonly path: "/profile";
11
+ readonly responses: {
12
+ readonly code: "401";
13
+ readonly information: "auth.required";
14
+ readonly body: undefined;
15
15
  } | {
16
- code: "200";
17
- information: "profile.found";
18
- body: {
19
- name: string;
20
- email: string;
16
+ readonly code: "200";
17
+ readonly information: "profile.found";
18
+ readonly body: {
19
+ readonly name: string;
20
+ readonly email: string;
21
21
  };
22
22
  };
23
23
  } | {
24
- method: "POST";
25
- path: "/users";
26
- body: {
27
- username: string;
28
- age: number;
24
+ readonly method: "POST";
25
+ readonly path: "/users";
26
+ readonly body: {
27
+ readonly username: string;
28
+ readonly age: number;
29
29
  };
30
- responses: {
31
- code: "422";
32
- information: "extract-error";
33
- body?: undefined;
30
+ readonly responses: {
31
+ readonly code: "422";
32
+ readonly information: "extract-error";
33
+ readonly body: Error;
34
34
  } | {
35
- code: "204";
36
- information: "user.created";
37
- body?: undefined;
35
+ readonly code: "204";
36
+ readonly information: "user.created";
37
+ readonly body: undefined;
38
38
  };
39
39
  };
40
40
 
@@ -3,10 +3,13 @@
3
3
  *
4
4
  * Initialisation et cycle de vie d’un formulaire Vue typé.
5
5
  */
6
- import { createForm, useCheckLayout, useMultiLayout } from "@duplojs/form/vue";
6
+ import { createForm, useCheckLayout, useMultiLayout, type DetailsError } from "@duplojs/form/vue";
7
7
  import { templateFormAddButton, templateFormNextButton, templateFormPreviousButton, templateFormRemoveButton, templateFormResetButton, templateFormSelect, useNumberInput, useTextInput } from "@duplojs/form/vueDesignSystem";
8
8
  import { createGridTemplates } from "@duplojs/form/vueGrid";
9
9
  import * as DDataStructure from "@duplojs/lang/dataStructure";
10
+ import type * as DCommon from "@duplojs/lang/common";
11
+ import type * as DEither from "@duplojs/lang/either";
12
+ import type * as DString from "@duplojs/lang/string";
10
13
 
11
14
  // `createForm` fixe le système de rendu utilisé par cette famille de formulaires.
12
15
  // `repeat`, `step` et `union` demandent des composants dédiés pour ajouter,
@@ -64,20 +67,24 @@ const { check, component: TheForm, currentValue, dispose, reset } = useForm(
64
67
  );
65
68
 
66
69
  // Valeur brute synchronisée avec l'état Vue du formulaire.
67
- // Ref<{
68
- // name: string;
69
- // email: string;
70
- // age: number;
71
- // }>
70
+ type _CheckCurrentValue = DCommon.ExpectType<
71
+ typeof currentValue.value,
72
+ {
73
+ name: string;
74
+ email: string;
75
+ age: number;
76
+ },
77
+ "strict"
78
+ >;
72
79
  void currentValue;
73
80
 
74
81
  // `check` applique les validations déclarées et type la valeur validée.
75
- // DEither.Error<DetailsError> | DEither.Success<{
76
- // name: string;
77
- // email: string & Email;
78
- // age: number;
79
- // }>
80
82
  const checkedValue = await check();
83
+ type _CheckValue = DCommon.ExpectType<typeof checkedValue, DEither.Error<DetailsError> | DEither.Success<{
84
+ name: string;
85
+ email: string & DString.Email;
86
+ age: number;
87
+ }>, "strict">;
81
88
 
82
89
  void checkedValue;
83
90
 
@@ -89,7 +96,3 @@ dispose();
89
96
 
90
97
  // `component` est le composant Vue à monter ; le submit reste applicatif.
91
98
  void TheForm;
92
-
93
- // <TheForm @submit="() => console.log(check())">
94
- // <PrimaryButton type="submit" label="Submit" />
95
- // </TheForm>
@@ -3,10 +3,13 @@
3
3
  *
4
4
  * Création, intégration et validation des champs de saisie d’un formulaire Vue.
5
5
  */
6
- import { createForm, createInput, useMultiLayout } from "@duplojs/form/vue";
6
+ import { createForm, createInput, type DetailsError, useMultiLayout } from "@duplojs/form/vue";
7
7
  import { TextInput, templateFormAddButton, templateFormNextButton, templateFormPreviousButton, templateFormRemoveButton, templateFormResetButton, templateFormSelect, useNumberInput, useTextInput } from "@duplojs/form/vueDesignSystem";
8
8
  import { createGridTemplates } from "@duplojs/form/vueGrid";
9
9
  import * as DDataStructure from "@duplojs/lang/dataStructure";
10
+ import type * as DCommon from "@duplojs/lang/common";
11
+ import type * as DEither from "@duplojs/lang/either";
12
+ import type * as DString from "@duplojs/lang/string";
10
13
 
11
14
  const gridTemplates = createGridTemplates({
12
15
  repeat: {
@@ -50,10 +53,10 @@ const { component: TheForm, currentValue } = useForm(
50
53
  }),
51
54
  );
52
55
 
53
- // Ref<{
54
- // name: string;
55
- // age: number;
56
- // }>
56
+ type _CheckCurrentValue = DCommon.ExpectType<typeof currentValue.value, {
57
+ name: string;
58
+ age: number;
59
+ }, "strict">;
57
60
  void currentValue;
58
61
  void TheForm;
59
62
 
@@ -90,7 +93,11 @@ const { check } = useForm(
90
93
 
91
94
  // Lors du `check`, la librairie appelle d'abord le `check` exposé par le
92
95
  // composant s'il existe, puis applique la `dataStructure` de l'input.
93
- // DEither.Error<DetailsError> | DEither.Success<string & Email>
94
96
  const checkedEmail = await check();
97
+ type _CheckCheckedEmail = DCommon.ExpectType<
98
+ typeof checkedEmail,
99
+ DEither.Error<DetailsError> | DEither.Success<string & DString.Email>,
100
+ "strict"
101
+ >;
95
102
 
96
103
  void checkedEmail;