@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.
- package/README.md +11 -11
- package/dist/bin/index.mjs +2 -2
- package/dist/bin/installSkill/index.d.ts +2 -0
- package/dist/bin/{install → installSkill}/index.mjs +3 -3
- package/dist/bin/{install → installSkill}/skill.mjs +1 -1
- package/dist/bin/setup/instructions.d.ts +1 -1
- package/docs/API/10-lang/10-array/10-at.ts +4 -4
- package/docs/API/10-lang/10-array/10-coalescing.ts +3 -2
- package/docs/API/10-lang/10-array/10-indexOf.ts +1 -1
- package/docs/API/10-lang/10-array/10-is.ts +17 -3
- package/docs/API/10-lang/10-array/10-lastIndexOf.ts +1 -1
- package/docs/API/10-lang/10-chrono/10-addTime.ts +1 -1
- package/docs/API/10-lang/10-chrono/10-closestTo.ts +5 -8
- package/docs/API/10-lang/10-chrono/10-isDate.ts +15 -2
- package/docs/API/10-lang/10-chrono/10-isSerializedTheDate.ts +16 -1
- package/docs/API/10-lang/10-chrono/10-isSerializedTheTime.ts +16 -1
- package/docs/API/10-lang/10-chrono/10-isTime.ts +15 -2
- package/docs/API/10-lang/10-chrono/10-maxDate.ts +4 -8
- package/docs/API/10-lang/10-chrono/10-maxTime.ts +4 -8
- package/docs/API/10-lang/10-chrono/10-minDate.ts +4 -8
- package/docs/API/10-lang/10-chrono/10-minTime.ts +4 -8
- package/docs/API/10-lang/10-chrono/10-sortDates.ts +6 -8
- package/docs/API/10-lang/10-chrono/10-sortTimes.ts +6 -8
- package/docs/API/10-lang/10-chrono/10-subtractTime.ts +1 -1
- package/docs/API/10-lang/10-common/10-and.ts +6 -0
- package/docs/API/10-lang/10-common/10-createQueue.ts +4 -3
- package/docs/API/10-lang/10-common/10-createTransformer.ts +1 -1
- package/docs/API/10-lang/10-common/10-equal.ts +6 -0
- package/docs/API/10-lang/10-common/10-falsy.ts +19 -0
- package/docs/API/10-lang/10-common/10-instanceOf.ts +14 -3
- package/docs/API/10-lang/10-common/10-isType.ts +6 -0
- package/docs/API/10-lang/10-common/10-justExec.ts +3 -3
- package/docs/API/10-lang/10-common/10-or.ts +17 -3
- package/docs/API/10-lang/10-common/10-tap.ts +28 -0
- package/docs/API/10-lang/10-common/10-toJSON.ts +1 -1
- package/docs/API/10-lang/10-common/10-toNative.ts +1 -1
- package/docs/API/10-lang/10-common/10-toRegExp.ts +1 -1
- package/docs/API/10-lang/10-common/10-truthy.ts +19 -0
- package/docs/API/10-lang/10-common/10-whenNot.ts +44 -13
- package/docs/API/10-lang/10-common/index.llms.md +4 -0
- package/docs/API/10-lang/10-dataStructure/10-typeStructureIdentifier.ts +2 -2
- package/docs/API/10-lang/10-either/10-asyncGroup.ts +1 -1
- package/docs/API/10-lang/10-either/10-asyncSafeCallback.ts +4 -2
- package/docs/API/10-lang/10-either/10-extractErrorInLeft.ts +45 -0
- package/docs/API/10-lang/10-either/10-forwardAssertsSelection.ts +1 -1
- package/docs/API/10-lang/10-either/10-group.ts +1 -1
- package/docs/API/10-lang/10-either/10-hasInformation.ts +6 -0
- package/docs/API/10-lang/10-either/10-isLeft.ts +10 -1
- package/docs/API/10-lang/10-either/10-isRight.ts +10 -1
- package/docs/API/10-lang/10-either/10-isSelected.ts +13 -1
- package/docs/API/10-lang/10-either/10-keepAsRightSelection.ts +1 -1
- package/docs/API/10-lang/10-either/10-matchInformation.ts +7 -5
- package/docs/API/10-lang/10-either/10-matchInformationCombination.ts +61 -0
- package/docs/API/10-lang/10-either/10-matchInformationCombinationOtherwise.ts +62 -0
- package/docs/API/10-lang/10-either/10-matchInformationOtherwise.ts +7 -5
- package/docs/API/10-lang/10-either/10-rightAsyncPipe.ts +2 -1
- package/docs/API/10-lang/10-either/10-rightPipe.ts +1 -1
- package/docs/API/10-lang/10-either/10-safeCallback.ts +1 -1
- package/docs/API/10-lang/10-either/10-unwrapOr.ts +2 -2
- package/docs/API/10-lang/10-either/10-unwrapOtherwise.ts +2 -2
- package/docs/API/10-lang/10-either/10-whenHasInformation.ts +4 -3
- package/docs/API/10-lang/10-either/10-whenHasInformationOtherwise.ts +5 -5
- package/docs/API/10-lang/10-either/10-whenIsLeft.ts +2 -2
- package/docs/API/10-lang/10-either/10-whenIsLeftOtherwise.ts +5 -5
- package/docs/API/10-lang/10-either/10-whenIsRight.ts +2 -2
- package/docs/API/10-lang/10-either/10-whenIsRightOtherwise.ts +7 -7
- package/docs/API/10-lang/10-either/10-whenIsSelected.ts +5 -5
- package/docs/API/10-lang/10-either/10-whenIsSelectedOtherwise.ts +5 -5
- package/docs/API/10-lang/10-either/index.llms.md +12 -0
- package/docs/API/10-lang/10-generator/10-asyncConcat.ts +7 -10
- package/docs/API/10-lang/10-generator/10-asyncFlat.ts +6 -6
- package/docs/API/10-lang/10-generator/10-concat.ts +3 -3
- package/docs/API/10-lang/10-generator/10-flat.ts +2 -2
- package/docs/API/10-lang/10-generator/10-map.ts +1 -1
- package/docs/API/10-lang/10-generator/10-reduce.ts +1 -1
- package/docs/API/10-lang/10-number/10-betweenThan.ts +43 -0
- package/docs/API/10-lang/10-number/10-betweenThanOrEqual.ts +43 -0
- package/docs/API/10-lang/10-number/10-greaterThan.ts +35 -0
- package/docs/API/10-lang/10-number/10-greaterThanOrEqual.ts +35 -0
- package/docs/API/10-lang/10-number/10-isEven.ts +33 -0
- package/docs/API/10-lang/10-number/10-isInteger.ts +33 -0
- package/docs/API/10-lang/10-number/10-isMultipleOf.ts +35 -0
- package/docs/API/10-lang/10-number/10-isNegative.ts +33 -0
- package/docs/API/10-lang/10-number/10-isNotZero.ts +33 -0
- package/docs/API/10-lang/10-number/10-isOdd.ts +33 -0
- package/docs/API/10-lang/10-number/10-isPositive.ts +33 -0
- package/docs/API/10-lang/10-number/10-isSafe.ts +33 -0
- package/docs/API/10-lang/10-number/10-isStrictNegative.ts +34 -0
- package/docs/API/10-lang/10-number/10-isStrictPositive.ts +33 -0
- package/docs/API/10-lang/10-number/10-lessThan.ts +35 -0
- package/docs/API/10-lang/10-number/10-lessThanOrEqual.ts +35 -0
- package/docs/API/10-lang/10-number/10-max.ts +19 -0
- package/docs/API/10-lang/10-number/10-maxOf.ts +19 -0
- package/docs/API/10-lang/10-number/10-min.ts +19 -0
- package/docs/API/10-lang/10-number/10-minOf.ts +19 -0
- package/docs/API/10-lang/10-number/10-sort.ts +19 -0
- package/docs/API/10-lang/10-number/10-sum.ts +19 -0
- package/docs/API/10-lang/10-number/index.llms.md +92 -0
- package/docs/API/10-lang/10-number/index.md +3 -0
- package/docs/API/10-lang/10-object/10-assign.ts +41 -0
- package/docs/API/10-lang/10-object/10-countKeys.ts +15 -0
- package/docs/API/10-lang/10-object/10-deepDiscriminate.ts +63 -0
- package/docs/API/10-lang/10-object/10-deepOverride.ts +35 -0
- package/docs/API/10-lang/10-object/10-discriminate.ts +55 -0
- package/docs/API/10-lang/10-object/10-discriminateEntryKey.ts +43 -0
- package/docs/API/10-lang/10-object/10-discriminateEntryValue.ts +44 -0
- package/docs/API/10-lang/10-object/10-entries.ts +19 -0
- package/docs/API/10-lang/10-object/10-entry.ts +17 -0
- package/docs/API/10-lang/10-object/10-fromEntries.ts +23 -0
- package/docs/API/10-lang/10-object/10-getDeepProperty.ts +26 -0
- package/docs/API/10-lang/10-object/10-getProperty.ts +24 -0
- package/docs/API/10-lang/10-object/10-hasKeys.ts +43 -0
- package/docs/API/10-lang/10-object/10-isSimple.ts +38 -0
- package/docs/API/10-lang/10-object/10-keys.ts +19 -0
- package/docs/API/10-lang/10-object/10-omit.ts +39 -0
- package/docs/API/10-lang/10-object/10-override.ts +24 -0
- package/docs/API/10-lang/10-object/10-pick.ts +41 -0
- package/docs/API/10-lang/10-object/10-to.ts +40 -0
- package/docs/API/10-lang/10-object/10-transformProperties.ts +43 -0
- package/docs/API/10-lang/10-object/10-transformProperty.ts +39 -0
- package/docs/API/10-lang/10-object/10-values.ts +19 -0
- package/docs/API/10-lang/10-object/index.llms.md +92 -0
- package/docs/API/10-lang/10-object/index.md +3 -0
- package/docs/API/10-lang/10-path/10-computeRelative.ts +19 -0
- package/docs/API/10-lang/10-path/10-concatSegment.ts +28 -0
- package/docs/API/10-lang/10-path/10-create.ts +21 -0
- package/docs/API/10-lang/10-path/10-createAbsolute.ts +21 -0
- package/docs/API/10-lang/10-path/10-createAbsoluteOrThrow.ts +16 -0
- package/docs/API/10-lang/10-path/10-createMatcher.ts +50 -0
- package/docs/API/10-lang/10-path/10-createOrThrow.ts +16 -0
- package/docs/API/10-lang/10-path/10-createSegment.ts +26 -0
- package/docs/API/10-lang/10-path/10-createSegmentOrThrow.ts +16 -0
- package/docs/API/10-lang/10-path/10-declareAbsolutePath.ts +15 -0
- package/docs/API/10-lang/10-path/10-declarePath.ts +15 -0
- package/docs/API/10-lang/10-path/10-declareSegment.ts +15 -0
- package/docs/API/10-lang/10-path/10-getBaseName.ts +22 -0
- package/docs/API/10-lang/10-path/10-getExtensionName.ts +22 -0
- package/docs/API/10-lang/10-path/10-getParentFolderPath.ts +25 -0
- package/docs/API/10-lang/10-path/10-is.ts +46 -0
- package/docs/API/10-lang/10-path/10-isAbsolute.ts +46 -0
- package/docs/API/10-lang/10-path/10-isSegment.ts +42 -0
- package/docs/API/10-lang/10-path/10-normalize.ts +26 -0
- package/docs/API/10-lang/10-path/10-resolveFrom.ts +37 -0
- package/docs/API/10-lang/10-path/10-resolveRelative.ts +23 -0
- package/docs/API/10-lang/10-path/index.llms.md +88 -0
- package/docs/API/10-lang/10-path/index.md +3 -0
- package/docs/API/10-lang/10-pattern/10-exhaustive.ts +26 -0
- package/docs/API/10-lang/10-pattern/10-isMatch.ts +72 -0
- package/docs/API/10-lang/10-pattern/10-match.ts +133 -0
- package/docs/API/10-lang/10-pattern/10-matchWithEntity.ts +49 -0
- package/docs/API/10-lang/10-pattern/10-matchWithEntityOtherwise.ts +55 -0
- package/docs/API/10-lang/10-pattern/10-matchWithError.ts +45 -0
- package/docs/API/10-lang/10-pattern/10-matchWithErrorOtherwise.ts +48 -0
- package/docs/API/10-lang/10-pattern/10-matchWithFact.ts +49 -0
- package/docs/API/10-lang/10-pattern/10-matchWithFactOtherwise.ts +49 -0
- package/docs/API/10-lang/10-pattern/10-matchWithNumber.ts +33 -0
- package/docs/API/10-lang/10-pattern/10-matchWithNumberOtherwise.ts +37 -0
- package/docs/API/10-lang/10-pattern/10-matchWithString.ts +34 -0
- package/docs/API/10-lang/10-pattern/10-matchWithStringOtherwise.ts +35 -0
- package/docs/API/10-lang/10-pattern/10-matchWithTaggedObject.ts +43 -0
- package/docs/API/10-lang/10-pattern/10-matchWithTaggedObjectOtherwise.ts +49 -0
- package/docs/API/10-lang/10-pattern/10-otherwise.ts +28 -0
- package/docs/API/10-lang/10-pattern/10-union.ts +47 -0
- package/docs/API/10-lang/10-pattern/10-when.ts +46 -0
- package/docs/API/10-lang/10-pattern/10-whenNot.ts +123 -0
- package/docs/API/10-lang/10-pattern/index.llms.md +80 -0
- package/docs/API/10-lang/10-pattern/index.md +3 -0
- package/docs/API/10-lang/10-printer/10-bold.ts +12 -0
- package/docs/API/10-lang/10-printer/10-colorized.ts +18 -0
- package/docs/API/10-lang/10-printer/10-colorizedBold.ts +18 -0
- package/docs/API/10-lang/10-printer/10-indent.ts +20 -0
- package/docs/API/10-lang/10-printer/10-primitives.md +11 -0
- package/docs/API/10-lang/10-printer/10-render.ts +29 -0
- package/docs/API/10-lang/10-printer/10-renderLine.ts +12 -0
- package/docs/API/10-lang/10-printer/10-renderParagraph.ts +16 -0
- package/docs/API/10-lang/10-printer/index.llms.md +37 -0
- package/docs/API/10-lang/10-printer/index.md +3 -0
- package/docs/API/10-lang/10-string/10-at.ts +18 -0
- package/docs/API/10-lang/10-string/10-capitalize.ts +18 -0
- package/docs/API/10-lang/10-string/10-charAt.ts +18 -0
- package/docs/API/10-lang/10-string/10-concat.ts +18 -0
- package/docs/API/10-lang/10-string/10-endsWith.ts +33 -0
- package/docs/API/10-lang/10-string/10-extract.ts +18 -0
- package/docs/API/10-lang/10-string/10-extractAll.ts +18 -0
- package/docs/API/10-lang/10-string/10-first.ts +17 -0
- package/docs/API/10-lang/10-string/10-includes.ts +33 -0
- package/docs/API/10-lang/10-string/10-indexOf.ts +17 -0
- package/docs/API/10-lang/10-string/10-isComposedOf.ts +33 -0
- package/docs/API/10-lang/10-string/10-isEmail.ts +56 -0
- package/docs/API/10-lang/10-string/10-isIn.ts +34 -0
- package/docs/API/10-lang/10-string/10-isKeyof.ts +37 -0
- package/docs/API/10-lang/10-string/10-isNotEmpty.ts +32 -0
- package/docs/API/10-lang/10-string/10-isNumber.ts +32 -0
- package/docs/API/10-lang/10-string/10-isTrimmed.ts +33 -0
- package/docs/API/10-lang/10-string/10-isUrl.ts +31 -0
- package/docs/API/10-lang/10-string/10-isUuid.ts +31 -0
- package/docs/API/10-lang/10-string/10-join.ts +18 -0
- package/docs/API/10-lang/10-string/10-last.ts +17 -0
- package/docs/API/10-lang/10-string/10-lastIndexOf.ts +17 -0
- package/docs/API/10-lang/10-string/10-length.ts +18 -0
- package/docs/API/10-lang/10-string/10-lengthEqual.ts +33 -0
- package/docs/API/10-lang/10-string/10-maxCharacters.ts +33 -0
- package/docs/API/10-lang/10-string/10-minCharacters.ts +33 -0
- package/docs/API/10-lang/10-string/10-normalize.ts +17 -0
- package/docs/API/10-lang/10-string/10-padEnd.ts +17 -0
- package/docs/API/10-lang/10-string/10-padStart.ts +17 -0
- package/docs/API/10-lang/10-string/10-pop.ts +17 -0
- package/docs/API/10-lang/10-string/10-prepend.ts +17 -0
- package/docs/API/10-lang/10-string/10-repeat.ts +17 -0
- package/docs/API/10-lang/10-string/10-replace.ts +18 -0
- package/docs/API/10-lang/10-string/10-replaceAll.ts +17 -0
- package/docs/API/10-lang/10-string/10-search.ts +17 -0
- package/docs/API/10-lang/10-string/10-shift.ts +17 -0
- package/docs/API/10-lang/10-string/10-slice.ts +17 -0
- package/docs/API/10-lang/10-string/10-sort.ts +19 -0
- package/docs/API/10-lang/10-string/10-sortCompare.ts +17 -0
- package/docs/API/10-lang/10-string/10-split.ts +34 -0
- package/docs/API/10-lang/10-string/10-startsWith.ts +33 -0
- package/docs/API/10-lang/10-string/10-stringify.ts +11 -0
- package/docs/API/10-lang/10-string/10-substring.ts +17 -0
- package/docs/API/10-lang/10-string/10-test.ts +17 -0
- package/docs/API/10-lang/10-string/10-to.ts +11 -0
- package/docs/API/10-lang/10-string/10-toLowerCase.ts +17 -0
- package/docs/API/10-lang/10-string/10-toUpperCase.ts +17 -0
- package/docs/API/10-lang/10-string/10-trim.ts +17 -0
- package/docs/API/10-lang/10-string/10-trimEnd.ts +17 -0
- package/docs/API/10-lang/10-string/10-trimStart.ts +17 -0
- package/docs/API/10-lang/10-string/10-uncapitalize.ts +17 -0
- package/docs/API/10-lang/10-string/index.llms.md +208 -0
- package/docs/API/10-lang/10-string/index.md +3 -0
- package/docs/API/10-lang/10-tuple/10-from.ts +50 -0
- package/docs/API/10-lang/10-tuple/10-map.ts +37 -0
- package/docs/API/10-lang/10-tuple/index.llms.md +12 -0
- package/docs/API/10-lang/10-tuple/index.md +3 -0
- package/docs/API/40-json-web-token/10-tokenHandler/10-createTokenHandler.ts +160 -0
- package/docs/API/40-json-web-token/10-tokenHandler/index.llms.md +8 -0
- package/docs/API/40-json-web-token/10-tokenHandler/index.md +3 -0
- package/docs/API/40-json-web-token/20-signer/10-createHS256.ts +24 -0
- package/docs/API/40-json-web-token/20-signer/10-createHS512.ts +24 -0
- package/docs/API/40-json-web-token/20-signer/10-createRS256.ts +28 -0
- package/docs/API/40-json-web-token/20-signer/10-createRS512.ts +28 -0
- package/docs/API/40-json-web-token/20-signer/10-factory.ts +29 -0
- package/docs/API/40-json-web-token/20-signer/index.llms.md +24 -0
- package/docs/API/40-json-web-token/20-signer/index.md +3 -0
- package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP.ts +26 -0
- package/docs/API/40-json-web-token/30-cipher/10-createRSAOAEP256.ts +26 -0
- package/docs/API/40-json-web-token/30-cipher/10-factory.ts +29 -0
- package/docs/API/40-json-web-token/30-cipher/index.llms.md +16 -0
- package/docs/API/40-json-web-token/30-cipher/index.md +3 -0
- package/docs/API/40-json-web-token/40-utils/10-AES_GCM.decrypt.ts +17 -0
- package/docs/API/40-json-web-token/40-utils/10-AES_GCM.encrypt.ts +11 -0
- package/docs/API/40-json-web-token/40-utils/10-AES_GCM.generateInitializationVector.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-HMAC.sign.ts +13 -0
- package/docs/API/40-json-web-token/40-utils/10-HMAC.verify.ts +11 -0
- package/docs/API/40-json-web-token/40-utils/10-RSA.sign.ts +14 -0
- package/docs/API/40-json-web-token/40-utils/10-RSA.verify.ts +13 -0
- package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.decrypt.ts +13 -0
- package/docs/API/40-json-web-token/40-utils/10-RSA_OAEP.encrypt.ts +10 -0
- package/docs/API/40-json-web-token/40-utils/10-decodeBase64.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-decodeBase64Url.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-decodeText.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-encodeBase64.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-encodeBase64Url.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-encodeText.ts +9 -0
- package/docs/API/40-json-web-token/40-utils/10-isBase64Url.ts +11 -0
- package/docs/API/40-json-web-token/40-utils/10-jsonParse.ts +11 -0
- package/docs/API/40-json-web-token/40-utils/10-pemToBinary.ts +11 -0
- package/docs/API/40-json-web-token/40-utils/index.llms.md +76 -0
- package/docs/API/40-json-web-token/40-utils/index.md +3 -0
- package/docs/API/40-json-web-token/index.md +3 -0
- package/docs/API/50-form/10-vue/10-construction/10-createForm.ts +48 -0
- package/docs/API/50-form/10-vue/10-construction/10-createFormField.ts +66 -0
- package/docs/API/50-form/10-vue/10-construction/10-createGridTemplates.ts +39 -0
- package/docs/API/50-form/10-vue/10-construction/10-createInput.ts +46 -0
- package/docs/API/50-form/10-vue/10-construction/10-createTemplate.ts +36 -0
- package/docs/API/50-form/10-vue/10-construction/fixtures/AddressInput.vue +19 -0
- package/docs/API/50-form/10-vue/10-construction/index.llms.md +24 -0
- package/docs/API/50-form/10-vue/10-construction/index.md +3 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useCheckLayout.ts +40 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useDisabledLayout.ts +34 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useMultiLayout.ts +32 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useRepeatLayout.ts +34 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useSectionLayout.ts +20 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useSlotLayout.ts +37 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useStepLayout.ts +31 -0
- package/docs/API/50-form/10-vue/20-layouts/10-useUnionLayout.ts +48 -0
- package/docs/API/50-form/10-vue/20-layouts/index.llms.md +36 -0
- package/docs/API/50-form/10-vue/20-layouts/index.md +3 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useCheckbox.ts +13 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useCheckboxPolicy.ts +18 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useDateInput.ts +20 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useDualRangeInput.ts +27 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useFileInput.ts +23 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useNumberInput.ts +18 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useRadioGroup.ts +31 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useRangeDateInput.ts +23 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useRangeInput.ts +18 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useRangeTimeInput.ts +23 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useSelectInput.ts +31 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useTextInput.ts +14 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useTextareaInput.ts +14 -0
- package/docs/API/50-form/10-vue/30-designSystem/10-useTimeInput.ts +20 -0
- package/docs/API/50-form/10-vue/30-designSystem/20-components.md +11 -0
- package/docs/API/50-form/10-vue/30-designSystem/index.llms.md +65 -0
- package/docs/API/50-form/10-vue/30-designSystem/index.md +3 -0
- package/docs/API/50-form/10-vue/fixtures/templates.ts +20 -0
- package/docs/API/50-form/10-vue/index.md +3 -0
- package/docs/API/50-form/index.md +3 -0
- package/docs/API/60-playwright/10-construction/10-createComponent.ts +47 -0
- package/docs/API/60-playwright/10-construction/10-createComponentInteraction.ts +28 -0
- package/docs/API/60-playwright/10-construction/10-createPage.ts +34 -0
- package/docs/API/60-playwright/10-construction/10-createStepWrapper.ts +23 -0
- package/docs/API/60-playwright/10-construction/10-createWebsite.ts +57 -0
- package/docs/API/60-playwright/10-construction/10-initClient.ts +38 -0
- package/docs/API/60-playwright/10-construction/index.llms.md +28 -0
- package/docs/API/60-playwright/10-construction/index.md +3 -0
- package/docs/API/60-playwright/20-actions/10-check.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-clear.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-click.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-dragTo.ts +10 -0
- package/docs/API/60-playwright/20-actions/10-extractContent.ts +10 -0
- package/docs/API/60-playwright/20-actions/10-fill.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-focus.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-forceClick.ts +10 -0
- package/docs/API/60-playwright/20-actions/10-hover.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-press.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-selectOption.ts +10 -0
- package/docs/API/60-playwright/20-actions/10-type.ts +10 -0
- package/docs/API/60-playwright/20-actions/10-uncheck.ts +9 -0
- package/docs/API/60-playwright/20-actions/10-withStep.ts +10 -0
- package/docs/API/60-playwright/20-actions/index.llms.md +60 -0
- package/docs/API/60-playwright/20-actions/index.md +3 -0
- package/docs/API/60-playwright/30-assertions/10-toBeBusy.ts +10 -0
- package/docs/API/60-playwright/30-assertions/10-toBeChecked.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toBeDisabled.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toBeEnabled.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toBeHidden.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toBeNotBusy.ts +10 -0
- package/docs/API/60-playwright/30-assertions/10-toBeVisible.ts +10 -0
- package/docs/API/60-playwright/30-assertions/10-toContainText.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toHaveAttribute.ts +12 -0
- package/docs/API/60-playwright/30-assertions/10-toHaveClass.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toHaveNoText.ts +10 -0
- package/docs/API/60-playwright/30-assertions/10-toHaveQuantity.ts +20 -0
- package/docs/API/60-playwright/30-assertions/10-toHaveText.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-toHaveValue.ts +9 -0
- package/docs/API/60-playwright/30-assertions/10-withStep.ts +10 -0
- package/docs/API/60-playwright/30-assertions/index.llms.md +64 -0
- package/docs/API/60-playwright/30-assertions/index.md +3 -0
- package/docs/API/60-playwright/fixtures/component.ts +44 -0
- package/docs/API/60-playwright/index.md +3 -0
- package/docs/API.llms.md +84 -0
- package/docs/concepts/01-fundamental/01-constraint/20-manipulation.ts +9 -6
- package/docs/concepts/01-fundamental/01-constraint/30-cast.ts +9 -5
- package/docs/concepts/01-fundamental/02-currying/01-use.ts +5 -0
- package/docs/concepts/01-fundamental/02-currying/10-built-in-function.ts +28 -16
- package/docs/concepts/01-fundamental/02-currying/20-inner-pipe.ts +11 -2
- package/docs/concepts/01-fundamental/02-currying/30-async-pipe.ts +11 -2
- package/docs/concepts/01-fundamental/03-either/10-discrimination.ts +23 -12
- package/docs/concepts/01-fundamental/03-either/20-exhaustive-handling.ts +27 -10
- package/docs/concepts/01-fundamental/03-either/30-composition.ts +18 -10
- package/docs/concepts/01-fundamental/03-either/40-result-adaptation.ts +10 -4
- package/docs/concepts/01-fundamental/03-either/50-external-results.ts +16 -3
- package/docs/concepts/01-fundamental/04-data-structure/10-structure.ts +110 -59
- package/docs/concepts/01-fundamental/04-data-structure/20-constraint.ts +20 -12
- package/docs/concepts/01-fundamental/04-data-structure/30-validation.ts +13 -9
- package/docs/concepts/01-fundamental/04-data-structure/40-codecs.ts +31 -20
- package/docs/concepts/01-fundamental/04-data-structure/50-recursive.ts +10 -1
- package/docs/concepts/01-fundamental/05-chrono/10-creation.ts +39 -13
- package/docs/concepts/01-fundamental/05-chrono/20-manipulation.ts +20 -4
- package/docs/concepts/01-fundamental/05-chrono/30-serialized.ts +22 -6
- package/docs/concepts/01-fundamental/05-chrono/40-timezone.ts +5 -1
- package/docs/concepts/01-fundamental/06-modeling/20-entity.ts +29 -42
- package/docs/concepts/01-fundamental/06-modeling/30-tagged-object.ts +46 -23
- package/docs/concepts/01-fundamental/06-modeling/40-entity-lifecycle.ts +30 -33
- package/docs/concepts/01-fundamental/07-discrimination/10-entity.ts +52 -20
- package/docs/concepts/01-fundamental/07-discrimination/20-fact.ts +54 -38
- package/docs/concepts/01-fundamental/07-discrimination/30-tagged-object.ts +52 -20
- package/docs/concepts/01-fundamental/07-discrimination/40-error.ts +26 -10
- package/docs/concepts/01-fundamental/07-discrimination/50-literal.ts +29 -10
- package/docs/concepts/01-fundamental/07-discrimination/60-shape.ts +10 -2
- package/docs/concepts/01-fundamental/07-discrimination/70-predicate.ts +18 -6
- package/docs/concepts/01-fundamental/08-kind/01-identity.md +7 -0
- package/docs/concepts/01-fundamental/08-kind/20-metadata.md +11 -0
- package/docs/concepts/01-fundamental/08-kind/30-transport.md +11 -0
- package/docs/concepts/01-fundamental/08-kind/index.md +3 -0
- package/docs/concepts/02-server/10-file/10-manipulation.ts +15 -3
- package/docs/concepts/02-server/10-file/20-path.ts +22 -6
- package/docs/concepts/02-server/20-http/10-init.ts +1 -9
- package/docs/concepts/02-server/20-http/20-route.ts +40 -32
- package/docs/concepts/02-server/20-http/30-routine.ts +12 -19
- package/docs/concepts/02-server/20-http/40-jwt.ts +49 -37
- package/docs/concepts/02-server/20-http/50-open-api.ts +44 -0
- package/docs/concepts/02-server/20-http/index.md +1 -1
- package/docs/concepts/02-server/30-environment/10-platform.ts +12 -3
- package/docs/concepts/02-server/30-environment/20-variable.ts +13 -7
- package/docs/concepts/03-client/10-http/10-init.ts +11 -23
- package/docs/concepts/03-client/10-http/20-request.ts +79 -69
- package/docs/concepts/03-client/10-http/30-hook.ts +23 -23
- package/docs/concepts/03-client/20-form/10-init.ts +18 -15
- package/docs/concepts/03-client/20-form/20-input.ts +13 -6
- package/docs/concepts/03-client/20-form/30-layout.ts +44 -49
- package/docs/concepts/03-client/20-form/40-template.ts +10 -5
- package/docs/concepts/03-client/20-form/50-integration.md +11 -0
- package/docs/concepts/03-client/20-form/examples/postModeration/ThePage.vue +32 -0
- package/docs/concepts/03-client/20-form/examples/postModeration/usePostModeration.ts +80 -0
- package/docs/concepts/05-type-driven-design/01-architecture/10-boundaries.md +23 -20
- package/docs/concepts/05-type-driven-design/01-architecture/index.md +1 -1
- package/docs/concepts/05-type-driven-design/02-domains/10-entities.md +29 -37
- package/docs/concepts/05-type-driven-design/02-domains/20-aggregates.md +42 -26
- package/docs/concepts/05-type-driven-design/02-domains/30-repositories.md +20 -26
- package/docs/concepts/05-type-driven-design/02-domains/40-refinements.md +30 -0
- package/docs/concepts/05-type-driven-design/02-domains/index.md +1 -1
- package/docs/concepts/05-type-driven-design/03-applications/10-use-case.md +33 -40
- package/docs/concepts/05-type-driven-design/03-applications/20-ports.md +49 -0
- package/docs/concepts/05-type-driven-design/03-applications/index.md +1 -1
- package/docs/concepts/05-type-driven-design/04-infrastructure/10-implementation.md +27 -36
- package/docs/concepts/05-type-driven-design/04-infrastructure/index.md +1 -1
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/ports/waitingListEntry.ts +17 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientGiveBackBook.ts +30 -12
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/clientRentBook.ts +9 -8
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/createBook.ts +7 -7
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/applications/useCases/withdrawBook.ts +32 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientGiveBackBook.ts +72 -13
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/clientRentBook.ts +37 -11
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/createBook.ts +29 -17
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/aggregates/withdrawBook.ts +37 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/create.ts +4 -5
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/index.ts +2 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/rental.ts +9 -9
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/reserve.ts +37 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/returnBook.ts +11 -9
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/facts/withdraw.ts +21 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/book/index.ts +42 -11
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/giveBackBook.ts +11 -9
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/facts/rentBook.ts +10 -10
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/client/index.ts +6 -29
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/cancel.ts +26 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/create.ts +33 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/index.ts +3 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/facts/prepare.ts +23 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/entities/waitingListEntry/index.ts +79 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/refinements/refineLinkBetweenClientAndBorrowedBook.ts +34 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/book.ts +1 -1
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/business/domains/repositories/waitingListEntry.ts +19 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/command/clientRentBook.ts +3 -3
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/bookExist.ts +2 -2
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/checkers/clientExist.ts +2 -2
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientGiveBackBook.ts +23 -14
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/http/routes/clientRentBook.ts +7 -12
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/book.ts +1 -1
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/index.ts +1 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/ports/waitingListEntry.ts +17 -0
- package/docs/concepts/05-type-driven-design/fixtures/infrastructure/useCases/index.ts +2 -1
- package/docs/concepts/05-type-driven-design/index.md +2 -2
- package/docs/concepts.llms.md +71 -25
- package/instructions/coding-conventions.md +2 -2
- package/package.json +17 -14
- package/skills/http-client/SKILL.md +1 -1
- package/skills/http-client/references/configuration.md +3 -1
- package/skills/http-client/references/examples/client-expectations.ts +11 -10
- package/skills/http-client/references/examples/client-streams.ts +2 -2
- package/skills/http-client/references/examples/external-client.ts +2 -2
- package/skills/http-client/references/responses.md +1 -1
- package/skills/http-server/SKILL.md +4 -9
- package/skills/http-server/references/examples/authentication.ts +2 -2
- package/skills/http-server/references/examples/inferred-client.ts +54 -0
- package/skills/http-server/references/examples/minimal-route.ts +2 -3
- package/skills/http-server/references/examples/protected-route.ts +4 -6
- package/skills/http-server/references/examples/rename-user-route.ts +4 -6
- package/skills/http-server/references/examples/user-checker.ts +2 -2
- package/skills/http-server/references/examples/user-route.ts +12 -5
- package/skills/http-server/references/initialization.md +1 -1
- package/skills/http-server/references/reusable-flows.md +3 -3
- package/skills/http-server/references/routes-and-floor.md +11 -3
- package/dist/bin/install/index.d.ts +0 -2
- package/docs/concepts/02-server/20-http/50-codegen.ts +0 -29
- package/skills/http-server/references/code-generation.md +0 -31
- package/skills/http-server/references/examples/generate-sdk.ts +0 -36
- /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
|
-
|
|
31
|
-
|
|
29
|
+
"invalid-input": (invalidInput) => {
|
|
30
|
+
type _CheckInvalidInput = DCommon.ExpectType<typeof invalidInput, InvalidInputError, "strict">;
|
|
31
|
+
return invalidInput.message;
|
|
32
|
+
},
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
59
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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.
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
*
|
|
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 {
|
|
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
|
-
//
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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 {
|
|
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:
|
|
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
|
-
|
|
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:
|
|
92
|
+
otherwise: ({ response }) => response.notFound("user.notfound"),
|
|
95
93
|
indexing: "user",
|
|
96
94
|
},
|
|
97
95
|
)
|
|
98
96
|
.handler(
|
|
99
|
-
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
191
|
-
({ user }, { response }) => response(
|
|
184
|
+
({ user }, { response }) => response.ok(
|
|
192
185
|
"some-information.send",
|
|
193
186
|
user,
|
|
194
187
|
),
|