@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
@@ -23,34 +23,50 @@ declare const error: OperationError;
23
23
  // impose donc de compléter le matcher.
24
24
  // Chaque callback reçoit l'erreur précise, avec ses propriétés et sa cause typées.
25
25
 
26
- // string | Error
27
26
  const matchedError = DPattern.matchWithError(
28
27
  error,
29
28
  {
30
- // InvalidInputError ; cause est undefined.
31
- "invalid-input": (invalidInput) => invalidInput.message,
29
+ "invalid-input": (invalidInput) => {
30
+ type _CheckInvalidInput = DCommon.ExpectType<typeof invalidInput, InvalidInputError, "strict">;
31
+ return invalidInput.message;
32
+ },
32
33
 
33
- // UnavailableServiceError ; cause est Error.
34
- "unavailable-service": (unavailableService) => unavailableService.cause,
34
+ "unavailable-service": (unavailableService) => {
35
+ type _CheckUnavailableService = DCommon.ExpectType<typeof unavailableService, UnavailableServiceError, "strict">;
36
+ return unavailableService.cause;
37
+ },
35
38
  },
36
39
  );
40
+ type _CheckMatchedErrorLine27 = DCommon.ExpectType<
41
+ typeof matchedError,
42
+ string | Error,
43
+ "strict"
44
+ >;
37
45
 
38
46
  // matchWithErrorOtherwise sélectionne explicitement une partie des identifiants.
39
47
  // Le callback otherwise reçoit uniquement les erreurs non prises en charge.
40
48
  // Les deux fonctions existent en forme directe et curried, utilisable dans un pipe.
41
49
 
42
- // string | Error
43
50
  const matchedErrorOtherwise = DCommon.pipe(
44
51
  error,
45
52
  DPattern.matchWithErrorOtherwise(
46
53
  {
47
- // InvalidInputError
48
- "invalid-input": (invalidInput) => invalidInput.message,
54
+ "invalid-input": (invalidInput) => {
55
+ type _CheckInvalidInput = DCommon.ExpectType<typeof invalidInput, InvalidInputError, "strict">;
56
+ return invalidInput.message;
57
+ },
58
+ },
59
+ (unavailableService) => {
60
+ type _CheckUnavailableService = DCommon.ExpectType<typeof unavailableService, UnavailableServiceError, "strict">;
61
+ return unavailableService.cause;
49
62
  },
50
- // UnavailableServiceError
51
- (unavailableService) => unavailableService.cause,
52
63
  ),
53
64
  );
65
+ type _CheckMatchedErrorOtherwiseLine43 = DCommon.ExpectType<
66
+ typeof matchedErrorOtherwise,
67
+ string | Error,
68
+ "strict"
69
+ >;
54
70
 
55
71
  // Ces matchers attendent des DuploJSError dont les identifiants sont des types
56
72
  // littéraux connus. Conserver l'union précise : Error natif et DuploJSError
@@ -16,24 +16,24 @@ declare const status: "pending" | "ready" | "failed";
16
16
  // Chaque valeur possible doit posséder un handler et chaque callback reçoit
17
17
  // précisément le literal correspondant.
18
18
 
19
- // "wait" | "run" | "error"
20
19
  const matchedStatus = DPattern.matchWithString(
21
20
  status,
22
21
  {
23
- // "pending"
24
22
  pending: () => "wait" as const,
25
23
 
26
- // "ready"
27
24
  ready: () => "run" as const,
28
25
 
29
- // "failed"
30
26
  failed: () => "error" as const,
31
27
  },
32
28
  );
29
+ type _CheckMatchedStatusLine20 = DCommon.ExpectType<
30
+ typeof matchedStatus,
31
+ "wait" | "run" | "error",
32
+ "strict"
33
+ >;
33
34
 
34
35
  // La forme curried peut être utilisée directement dans un pipe.
35
36
 
36
- // "wait" | "run" | "error"
37
37
  const matchedStatusInPipe = DCommon.pipe(
38
38
  status,
39
39
  DPattern.matchWithString({
@@ -42,26 +42,36 @@ const matchedStatusInPipe = DCommon.pipe(
42
42
  failed: () => "error" as const,
43
43
  }),
44
44
  );
45
+ type _CheckMatchedStatusInPipeLine37 = DCommon.ExpectType<
46
+ typeof matchedStatusInPipe,
47
+ "wait" | "run" | "error",
48
+ "strict"
49
+ >;
45
50
 
46
51
  // La variante `otherwise` permet de ne sélectionner qu'une partie de l'union.
47
52
  //
48
53
  // Le callback `otherwise` reçoit précisément les literals non traités.
49
54
 
50
- // "run" | "not-ready"
51
55
  const matchedStatusOtherwise = DPattern.matchWithStringOtherwise(
52
56
  status,
53
57
  {
54
58
  ready: () => "run" as const,
55
59
  },
56
- // "pending" | "failed"
57
- () => "not-ready" as const,
60
+ (otherStatus) => {
61
+ type _CheckOtherwiseStatus = DCommon.ExpectType<typeof otherStatus, "pending" | "failed", "strict">;
62
+ return "not-ready" as const;
63
+ },
58
64
  );
65
+ type _CheckMatchedStatusOtherwiseLine51 = DCommon.ExpectType<
66
+ typeof matchedStatusOtherwise,
67
+ "run" | "not-ready",
68
+ "strict"
69
+ >;
59
70
 
60
71
  declare const code: 200 | 404 | 500;
61
72
 
62
73
  // `matchWithNumber` applique le même principe aux unions de number literals.
63
74
 
64
- // "success" | "not-found" | "error"
65
75
  const matchedCode = DPattern.matchWithNumber(
66
76
  code,
67
77
  {
@@ -70,10 +80,14 @@ const matchedCode = DPattern.matchWithNumber(
70
80
  500: () => "error" as const,
71
81
  },
72
82
  );
83
+ type _CheckMatchedCodeLine65 = DCommon.ExpectType<
84
+ typeof matchedCode,
85
+ "success" | "not-found" | "error",
86
+ "strict"
87
+ >;
73
88
 
74
89
  // `matchWithNumberOtherwise` permet également une sélection partielle.
75
90
 
76
- // "success" | "error"
77
91
  const matchedCodeOtherwise = DPattern.matchWithNumberOtherwise(
78
92
  code,
79
93
  {
@@ -82,6 +96,11 @@ const matchedCodeOtherwise = DPattern.matchWithNumberOtherwise(
82
96
  // 404 | 500
83
97
  () => "error" as const,
84
98
  );
99
+ type _CheckMatchedCodeOtherwiseLine77 = DCommon.ExpectType<
100
+ typeof matchedCodeOtherwise,
101
+ "success" | "error",
102
+ "strict"
103
+ >;
85
104
 
86
105
  // Un matcher exhaustif doit couvrir chaque valeur possible et refuse les clés étrangères à l’union.
87
106
  // Ajouter une valeur au contrat impose de réviser les branches, contrairement à une sélection partielle.
@@ -49,7 +49,6 @@ declare const externalProduct: ExternalProduct;
49
49
  // La dernière branche peut donc devenir exhaustive même sans discriminant
50
50
  // explicite sur la donnée.
51
51
 
52
- // string
53
52
  const productLabel = DPattern.match(externalProduct)
54
53
  .with(
55
54
  {
@@ -85,6 +84,11 @@ const productLabel = DPattern.match(externalProduct)
85
84
  (product) => `unavailable:${product.unavailable.reason}`,
86
85
  )
87
86
  .exhaustive();
87
+ type _CheckProductLabelLine53 = DCommon.ExpectType<
88
+ typeof productLabel,
89
+ string,
90
+ "strict"
91
+ >;
88
92
 
89
93
  // Les patterns peuvent être profondément imbriqués.
90
94
  //
@@ -102,7 +106,6 @@ const productLabel = DPattern.match(externalProduct)
102
106
  // Chaque étape travaille donc uniquement avec les valeurs qui n'ont pas encore
103
107
  // été traitées.
104
108
 
105
- // string
106
109
  const productLabelInPipe = DCommon.pipe(
107
110
  externalProduct,
108
111
  DPattern.match(
@@ -137,6 +140,11 @@ const productLabelInPipe = DCommon.pipe(
137
140
  ),
138
141
  DPattern.exhaustive,
139
142
  );
143
+ type _CheckProductLabelInPipeLine106 = DCommon.ExpectType<
144
+ typeof productLabelInPipe,
145
+ `merchant:${string}` | `second-hand:${number}` | "unavailable:deleted" | "unavailable:out-of-stock",
146
+ "strict"
147
+ >;
140
148
 
141
149
  // Une sélection partielle peut se terminer par otherwise plutôt que par exhaustive.
142
150
  // Le callback de repli reçoit précisément les formes qui restent à traiter.
@@ -17,7 +17,6 @@ import * as DString from "@duplojs/lang/string";
17
17
 
18
18
  declare const externalValue: string | number | null;
19
19
 
20
- // string | number | "empty"
21
20
  const normalizedValue = DCommon.pipe(
22
21
  externalValue,
23
22
  DPattern.when(
@@ -37,6 +36,11 @@ const normalizedValue = DCommon.pipe(
37
36
  ),
38
37
  DPattern.exhaustive,
39
38
  );
39
+ type _CheckNormalizedValueLine21 = DCommon.ExpectType<
40
+ typeof normalizedValue,
41
+ (string & DString.Trimmed) | number | "empty",
42
+ "strict"
43
+ >;
40
44
 
41
45
  // `whenNot` applique le predicate de manière inverse.
42
46
  //
@@ -50,21 +54,29 @@ const normalizedValue = DCommon.pipe(
50
54
 
51
55
  declare const framework: "duplojs" | "other";
52
56
 
53
- // "known" | "unknown"
54
57
  const frameworkResult = DCommon.pipe(
55
58
  framework,
56
59
  DPattern.whenNot(
57
60
  DCommon.equal("other"),
58
- // "duplojs"
59
- () => "known" as const,
61
+ (value) => {
62
+ type _CheckKnownFramework = DCommon.ExpectType<typeof value, "duplojs", "strict">;
63
+ return "known" as const;
64
+ },
60
65
  ),
61
66
  DPattern.when(
62
67
  DCommon.equal("other"),
63
- // "other"
64
- () => "unknown" as const,
68
+ (value) => {
69
+ type _CheckUnknownFramework = DCommon.ExpectType<typeof value, "other", "strict">;
70
+ return "unknown" as const;
71
+ },
65
72
  ),
66
73
  DPattern.exhaustive,
67
74
  );
75
+ type _CheckFrameworkResultLine54 = DCommon.ExpectType<
76
+ typeof frameworkResult,
77
+ "known" | "unknown",
78
+ "strict"
79
+ >;
68
80
 
69
81
  // `match`, `when` et `whenNot` sont donc principalement utiles lorsque
70
82
  // la discrimination doit être déduite de la donnée elle-même.
@@ -0,0 +1,7 @@
1
+ ### Identité des objets avec les kinds
2
+
3
+ De nombreux objets DuploJS portent des kinds pour être reconnus et distingués malgré le typage structurel de TypeScript.
4
+
5
+ Ces clés textuelles au runtime, représentées sous un symbole dans les types, portent identité et métadonnées. Leur reconnaissance survit au transport si la sérialisation les préserve.
6
+
7
+ Les kinds servent surtout à construire les outils ; utiliser DuploJS ne demande généralement pas de les manipuler directement.
@@ -0,0 +1,11 @@
1
+ ### Métadonnées internes des kinds
2
+
3
+ Un petit store attaché à l'objet, exploitable dans les types ou au runtime selon son contrat.
4
+
5
+ ---
6
+
7
+ Un objet peut porter plusieurs kinds. Dans un `Right`, ils contiennent notamment le statut, l'information contextuelle et la valeur. Un kind peut aussi n'être qu'un marqueur, avec une valeur `null`.
8
+
9
+ Certaines informations associées au kind servent uniquement au typage et ne reflètent pas nécessairement la valeur stockée. Consulter le contrat du domaine avant de les exploiter au runtime. Contrairement aux kinds, les [contraintes de typage](../01-constraint/index.md) n'ajoutent aucune propriété à la valeur.
10
+
11
+ Ces métadonnées sont internes, mais restent observables dans l'objet JavaScript. Le `has` d'un gestionnaire vérifie seulement la présence de sa clé ; la validation du contenu relève des [DataStructure](../04-data-structure/index.md).
@@ -0,0 +1,11 @@
1
+ ### Transport de l'identité entre programmes
2
+
3
+ Reconnaître une donnée après désérialisation sans dépendre du constructeur de son runtime d'origine.
4
+
5
+ ---
6
+
7
+ Les clés runtime des kinds dépendent de leur nom et de leur namespace. Un autre programme connaissant cette convention peut donc reconnaître la donnée, sans partager le gestionnaire en mémoire qui l'a créée.
8
+
9
+ Une sérialisation JSON conserve ces clés textuelles énumérables et leurs valeurs compatibles. Un objet taggé peut ainsi rester reconnaissable après transport entre deux serveurs. À l'inverse, JSON ne rétablit pas le prototype permettant la reconnaissance habituelle d'une instance de classe par `instanceof`.
10
+
11
+ Le transport doit préserver les marqueurs nécessaires : une propriété valant `undefined` est omise et une fonction n'est pas transportée. La présence d'un kind ne valide pas les données reçues ; utiliser le contrat de validation du domaine à la frontière externe.
@@ -0,0 +1,3 @@
1
+ ## Kind
2
+
3
+ Identité et métadonnées internes des objets de l'écosystème, reconnaissables au typage et au runtime.
@@ -16,14 +16,26 @@ const textResourcePath: string & DPath.Path = DCommon.cast("/path/to/text/resour
16
16
  const readTextResourceResult = await DSFile.readTextFile(textResourcePath);
17
17
 
18
18
  if (DEither.isRight(readTextResourceResult)) {
19
- // DEither.Right<"file-system-read-text-file", string>
19
+ type _CheckReadTextRight = DCommon.ExpectType<
20
+ typeof readTextResourceResult,
21
+ DEither.Right<"file-system-read-text-file", string>,
22
+ "strict"
23
+ >;
20
24
  void readTextResourceResult;
21
25
 
22
- // string
23
26
  const textResource = DEither.unwrapRight(readTextResourceResult);
27
+ type _CheckTextResourceLine23 = DCommon.ExpectType<
28
+ typeof textResource,
29
+ string,
30
+ "strict"
31
+ >;
24
32
  } else {
25
33
  // Le Left porte l'échec de l'opération ; sa valeur porte l'erreur précise.
26
- // DEither.Left<"file-system-read-text-file-error", DSFile.ReadTextFileErrors>
34
+ type _CheckReadTextLeft = DCommon.ExpectType<
35
+ typeof readTextResourceResult,
36
+ DEither.Left<"file-system-read-text-file-error", DSFile.ReadTextFileErrors>,
37
+ "strict"
38
+ >;
27
39
  const error = DEither.unwrapLeft(readTextResourceResult);
28
40
 
29
41
  type _CheckError = DCommon.ExpectType<typeof error, DSFile.ReadTextFileErrors, "strict">;
@@ -18,22 +18,33 @@ declare const unsafePath: string;
18
18
  const pathResult = DPath.create(unsafePath);
19
19
 
20
20
  if (DEither.isRight(pathResult)) {
21
- // string & DPath.Path
22
21
  const path = DEither.unwrapRight(pathResult);
22
+ type _CheckPathLine22 = DCommon.ExpectType<
23
+ typeof path,
24
+ string & DPath.Path,
25
+ "strict"
26
+ >;
23
27
  }
24
28
 
25
29
  // Les helpers extraient des parties contraintes sans retravailler la string.
26
- // (string & DPath.Segment) | null
27
30
  const fileName = DPath.getBaseName(imagePath);
31
+ type _CheckFileName = DCommon.ExpectType<typeof fileName, (string & DPath.Segment & DPath.Path) | null, "strict">;
28
32
 
29
- // (string & DPath.Segment) | null
30
33
  const extensionName = DPath.getExtensionName(imagePath);
34
+ type _CheckExtensionNameLine30 = DCommon.ExpectType<
35
+ typeof extensionName,
36
+ (string & DPath.Segment & DPath.Path) | null,
37
+ "strict"
38
+ >;
31
39
 
32
- // (string & DPath.Path) | null
33
40
  const parentFolderPath = DPath.getParentFolderPath(imagePath);
41
+ type _CheckParentFolderPathLine33 = DCommon.ExpectType<
42
+ typeof parentFolderPath,
43
+ (string & DPath.Path) | null,
44
+ "strict"
45
+ >;
34
46
 
35
47
  // Les fonctions de résolution assemblent des `Path` et `Segment` validés.
36
- // (string & DPath.Absolute) | null
37
48
  const resolvedPath = DPath.resolveFrom(
38
49
  rootPath,
39
50
  [
@@ -44,9 +55,13 @@ const resolvedPath = DPath.resolveFrom(
44
55
  stayInOrigin: true,
45
56
  },
46
57
  );
58
+ type _CheckResolvedPath = DCommon.ExpectType<
59
+ typeof resolvedPath,
60
+ (string & DPath.Path & DPath.Absolute) | null,
61
+ "strict"
62
+ >;
47
63
 
48
64
  // Résolution sans origine protectrice.
49
- // string & DPath.Path & DPath.Absolute
50
65
  const relativePath = DPath.resolveRelative(
51
66
  [
52
67
  rootPath,
@@ -54,3 +69,4 @@ const relativePath = DPath.resolveRelative(
54
69
  DCommon.infer("logo1.png"),
55
70
  ],
56
71
  );
72
+ type _CheckRelativePath = DCommon.ExpectType<typeof relativePath, string & DPath.Path & DPath.Absolute, "strict">;
@@ -1,19 +1,11 @@
1
1
  /**
2
2
  * @title Créer une application HTTP
3
3
  *
4
- * Configuration d'un `Hub`, plugins et enregistrement des routes d'une application HTTP.
4
+ * Configuration d'un `Hub` et enregistrement des routes d'une application HTTP.
5
5
  */
6
6
  import { createHub, routeStore } from "@duplojs/http";
7
- import { codeGeneratorPlugin } from "@duplojs/http/codeGenerator";
8
- import * as DCommon from "@duplojs/lang/common";
9
7
 
10
8
  export const hub = createHub({ environment: "DEV" })
11
- .plug(
12
- // Les plugins ajoutent des capacités au `Hub`.
13
- codeGeneratorPlugin({
14
- outputFile: DCommon.infer("types.d.ts"),
15
- }),
16
- )
17
9
  // Les modules de routes doivent être chargés avant l'enregistrement du store.
18
10
  .register(
19
11
  routeStore.getAll(),
@@ -1,9 +1,10 @@
1
1
  /**
2
2
  * @title Créer une route HTTP
3
3
  *
4
- * Construction du flux d’une route : entrées validées, contexte de traitement et réponses contextualisées.
4
+ * Définir les entrées d'une route, préparer les données du traitement et produire sa réponse HTTP.
5
5
  */
6
- import { ResponseContract, useRouteBuilder, controlBodyAsFormData } from "@duplojs/http";
6
+ import { useRouteBuilder, controlBodyAsFormData, type RouteDeclarationToContract } from "@duplojs/http";
7
+ import type * as DCommon from "@duplojs/lang/common";
7
8
  import * as DDataStructure from "@duplojs/lang/dataStructure";
8
9
  import * as DSDataStructure from "@duplojs/server/dataStructure";
9
10
 
@@ -22,7 +23,7 @@ declare function getUsers(params: {
22
23
 
23
24
  // Une route est une suite de steps exécutées dans l'ordre.
24
25
  // Elles partagent leurs données via le `floor`; `handler` clôture la route.
25
- useRouteBuilder("GET", "/users")
26
+ export const usersRoute = useRouteBuilder("GET", "/users")
26
27
  .extract({
27
28
  query: {
28
29
  page: DDataStructure.number([
@@ -37,30 +38,37 @@ useRouteBuilder("GET", "/users")
37
38
  },
38
39
  })
39
40
  .handler(
40
- ResponseContract.ok("users.findMany", DDataStructure.array(userStructure)),
41
41
  async({ page, quantityPerPage }, { response }) => {
42
42
  const users = await getUsers({
43
43
  page,
44
44
  quantityPerPage,
45
45
  });
46
46
 
47
- return response("users.findMany", users);
47
+ return response.ok("users.findMany", users);
48
48
  },
49
49
  );
50
50
 
51
- // Un `ResponseContract` associe un statut HTTP, un body éventuel et une
52
- // `information` littérale.
53
- //
54
- // L'information contextualise la réponse et sert de discriminant principal.
55
- // Le statut HTTP garde son rôle de convention protocolaire, mais c'est
56
- // l'information qui identifie finement le résultat du flux, y compris lorsqu'une
57
- // réponse n'a pas besoin de body.
58
- ResponseContract.ok("superResponse", DDataStructure.string());
59
- ResponseContract.created("user.created", userStructure);
60
- ResponseContract.noContent("user.deleted");
61
- ResponseContract.conflict("email.alreadyUse");
62
- ResponseContract.notFound("user.notfound");
63
- ResponseContract.notFound("product.notfound");
51
+ // `response.ok` construit une réponse 200 avec une information et un body.
52
+ // L'information identifie le résultat de l'opération, même lorsque plusieurs
53
+ // réponses partagent le même statut HTTP.
54
+ // Le type de la route reprend les réponses retournées par ses étapes :
55
+ // ici le résultat du handler et le refus d'extraction par défaut.
56
+ export type UsersRouteContract = RouteDeclarationToContract<typeof usersRoute>;
57
+
58
+ type _CheckResponses = DCommon.ExpectType<
59
+ UsersRouteContract["responses"],
60
+ | {
61
+ readonly code: "200";
62
+ readonly information: "users.findMany";
63
+ readonly body: User[];
64
+ }
65
+ | {
66
+ readonly code: "422";
67
+ readonly information: "extract-error";
68
+ readonly body: string;
69
+ },
70
+ "strict"
71
+ >;
64
72
 
65
73
  // `extract` valide les entrées de requête avant de les ajouter au `floor`.
66
74
  // Il peut cibler params, query, headers et body.
@@ -83,7 +91,6 @@ useRouteBuilder("POST", "/users/{userId}")
83
91
  }),
84
92
  })
85
93
  .handler(
86
- ResponseContract.noContent("user.received"),
87
94
  (
88
95
  {
89
96
  userId,
@@ -99,26 +106,29 @@ useRouteBuilder("POST", "/users/{userId}")
99
106
  void body.username;
100
107
  void body.age;
101
108
 
102
- return response("user.received");
109
+ return response.noContent("user.received");
103
110
  },
104
111
  );
105
112
 
106
113
  // Si une source utilise directement une `DataStructure`, elle garde son nom :
107
114
  // le body sera disponible dans `floor.body`.
108
115
  useRouteBuilder("POST", "/profile")
109
- .extract({
110
- body: DDataStructure.object({
111
- name: DDataStructure.string(),
112
- age: DDataStructure.number(),
113
- }),
114
- })
116
+ .extract(
117
+ {
118
+ body: DDataStructure.object({
119
+ name: DDataStructure.string(),
120
+ age: DDataStructure.number(),
121
+ }),
122
+ },
123
+ // Cette réponse locale remplace le refus d'extraction du Hub pour cette étape.
124
+ ({ response }) => response.badRequest("profile.invalid"),
125
+ )
115
126
  .handler(
116
- ResponseContract.noContent("profile.updated"),
117
127
  ({ body }, { response }) => {
118
128
  void body.name;
119
129
  void body.age;
120
130
 
121
- return response("profile.updated");
131
+ return response.noContent("profile.updated");
122
132
  },
123
133
  );
124
134
 
@@ -132,12 +142,11 @@ useRouteBuilder("GET", "/search")
132
142
  },
133
143
  })
134
144
  .handler(
135
- ResponseContract.noContent("search.done"),
136
145
  ({ page, search }, { response }) => {
137
146
  void page;
138
147
  void search;
139
148
 
140
- return response("search.done");
149
+ return response.noContent("search.done");
141
150
  },
142
151
  );
143
152
 
@@ -163,12 +172,11 @@ useRouteBuilder(
163
172
  },
164
173
  })
165
174
  .handler(
166
- ResponseContract.noContent("documents.received"),
167
175
  ({ title, userId, files }, { response }) => {
168
176
  void title;
169
177
  void userId;
170
178
  void files;
171
179
 
172
- return response("documents.received");
180
+ return response.noContent("documents.received");
173
181
  },
174
182
  );
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Vérifications dans les flux HTTP, réutilisation des traitements et adaptation de leurs résultats au contexte.
5
5
  */
6
- import { ResponseContract, createPresetChecker, useCheckerBuilder, usePreflightBuilder, useProcessBuilder, useRouteBuilder } from "@duplojs/http";
6
+ import { createPresetChecker, useCheckerBuilder, usePreflightBuilder, useProcessBuilder, useRouteBuilder } from "@duplojs/http";
7
7
  import * as DEither from "@duplojs/lang/either";
8
8
  import * as DCommon from "@duplojs/lang/common";
9
9
  import * as DDataStructure from "@duplojs/lang/dataStructure";
@@ -59,23 +59,21 @@ useRouteBuilder("POST", "/users/{userId}/confirm-email")
59
59
  {
60
60
  input: ({ userId }) => userId,
61
61
  result: "user.find",
62
- otherwise: ResponseContract.notFound("user.notfound"),
62
+ otherwise: ({ response }) => response.notFound("user.notfound"),
63
63
  indexing: "user",
64
64
  },
65
65
  )
66
66
  .cut(
67
- ResponseContract.conflict("user.emailConfirmation.mismatch"),
68
67
  ({ user, email }, { response, output }) => {
69
68
  if (user.email !== email) {
70
- return response("user.emailConfirmation.mismatch");
69
+ return response.conflict("user.emailConfirmation.mismatch");
71
70
  }
72
71
 
73
72
  return output({ confirmedUser: user });
74
73
  },
75
74
  )
76
75
  .handler(
77
- ResponseContract.ok("user.emailConfirmed", userStructure),
78
- ({ confirmedUser }, { response }) => response("user.emailConfirmed", confirmedUser),
76
+ ({ confirmedUser }, { response }) => response.ok("user.emailConfirmed", confirmedUser),
79
77
  );
80
78
 
81
79
  // `check` interprète un checker pour un flux donné : input, résultat attendu,
@@ -91,13 +89,12 @@ useRouteBuilder("GET", "/users/{userId}")
91
89
  {
92
90
  input: ({ userId }) => userId,
93
91
  result: "user.find",
94
- otherwise: ResponseContract.notFound("user.notfound"),
92
+ otherwise: ({ response }) => response.notFound("user.notfound"),
95
93
  indexing: "user",
96
94
  },
97
95
  )
98
96
  .handler(
99
- ResponseContract.ok("user.find", userStructure),
100
- ({ user }, { response }) => response("user.find", user),
97
+ ({ user }, { response }) => response.ok("user.find", user),
101
98
  );
102
99
 
103
100
  // Un preset nomme une interprétation récurrente du checker.
@@ -107,7 +104,7 @@ export const iWantUserExist = createPresetChecker(
107
104
  userExist,
108
105
  {
109
106
  result: "user.find",
110
- otherwise: ResponseContract.notFound("user.notfound"),
107
+ otherwise: ({ response }) => response.notFound("user.notfound"),
111
108
  },
112
109
  );
113
110
 
@@ -123,8 +120,7 @@ useRouteBuilder("GET", "/users/{userId}")
123
120
  ({ userId }) => userId,
124
121
  )
125
122
  .handler(
126
- ResponseContract.ok("user.find", userStructure),
127
- ({ user }, { response }) => response("user.find", user),
123
+ ({ user }, { response }) => response.ok("user.find", user),
128
124
  );
129
125
 
130
126
  // Un `process` réutilise une séquence complète de steps.
@@ -136,7 +132,6 @@ export const authenticationProcess = useProcessBuilder()
136
132
  },
137
133
  })
138
134
  .cut(
139
- ResponseContract.unauthorized("token.invalid"),
140
135
  ({ authorization }, { response, output }) => DCommon.pipe(
141
136
  authorization,
142
137
  checkToken,
@@ -144,7 +139,7 @@ export const authenticationProcess = useProcessBuilder()
144
139
  (user) => output({
145
140
  authenticatedUserId: user.id,
146
141
  }),
147
- () => response("token.invalid"),
142
+ () => response.unauthorized("token.invalid"),
148
143
  ),
149
144
  ),
150
145
  )
@@ -153,7 +148,7 @@ export const authenticationProcess = useProcessBuilder()
153
148
  {
154
149
  input: DObject.getProperty("authenticatedUserId"),
155
150
  result: "user.find",
156
- otherwise: ResponseContract.notFound("token.user.notfound"),
151
+ otherwise: ({ response }) => response.notFound("token.user.notfound"),
157
152
  indexing: "user",
158
153
  },
159
154
  )
@@ -168,8 +163,7 @@ useRouteBuilder("GET", "/some-action")
168
163
  },
169
164
  )
170
165
  .handler(
171
- ResponseContract.ok("some-information.send", userStructure),
172
- ({ user }, { response }) => response(
166
+ ({ user }, { response }) => response.ok(
173
167
  "some-information.send",
174
168
  user,
175
169
  ),
@@ -187,8 +181,7 @@ export const useAuthenticatedRouteBuilder = usePreflightBuilder()
187
181
 
188
182
  useAuthenticatedRouteBuilder("GET", "/some-action")
189
183
  .handler(
190
- ResponseContract.ok("some-information.send", userStructure),
191
- ({ user }, { response }) => response(
184
+ ({ user }, { response }) => response.ok(
192
185
  "some-information.send",
193
186
  user,
194
187
  ),