@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
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toBeNotBusy
|
|
3
|
+
*
|
|
4
|
+
* Vérifier aria-busy="false" sur un élément visible.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { articleList } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
// Exige aria-busy="false", et non simplement l’absence de l’attribut.
|
|
10
|
+
await Assertions.toBeNotBusy(articleList, "loading");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toBeVisible
|
|
3
|
+
*
|
|
4
|
+
* Faire défiler jusqu’à l’élément puis vérifier sa visibilité.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { navigation } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
// L’élément est d’abord défilé dans la vue, puis sa visibilité est vérifiée.
|
|
10
|
+
await Assertions.toBeVisible(navigation, "menu");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toContainText
|
|
3
|
+
*
|
|
4
|
+
* Vérifier une partie du texte d’un élément visible.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { articleList } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
await Assertions.toContainText(articleList, "title", /TypeScript/);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toHaveAttribute
|
|
3
|
+
*
|
|
4
|
+
* Vérifier un attribut d’un élément visible.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { navigation } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
await Assertions.toHaveAttribute(navigation, "menuButton", "aria-expanded", "true");
|
|
10
|
+
|
|
11
|
+
// Sans valeur, l’attribut doit correspondre à /.+/ : une valeur vide ne suffit pas.
|
|
12
|
+
await Assertions.toHaveAttribute(navigation, "menuButton", "aria-controls");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toHaveClass
|
|
3
|
+
*
|
|
4
|
+
* Vérifier les classes d’un élément visible.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { navigation } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
await Assertions.toHaveClass(navigation, "menuButton", /active/);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toHaveNoText
|
|
3
|
+
*
|
|
4
|
+
* Vérifier que le texte d’un élément visible est vide.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { searchForm } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
// Le message visible doit avoir un texte vide.
|
|
10
|
+
await Assertions.toHaveNoText(searchForm, "feedback");
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toHaveQuantity
|
|
3
|
+
*
|
|
4
|
+
* Vérifier le nombre d’éléments correspondants.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { articleList } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
// Sans opérateur, ou avec "e", le nombre doit être exact.
|
|
10
|
+
await Assertions.toHaveQuantity(articleList, "articles", { quantity: 2 });
|
|
11
|
+
|
|
12
|
+
// Les bornes sont inclusives ; le comptage est réessayé pendant 5 secondes au plus.
|
|
13
|
+
await Assertions.toHaveQuantity(articleList, "articles", {
|
|
14
|
+
quantity: 1,
|
|
15
|
+
operator: "gte",
|
|
16
|
+
});
|
|
17
|
+
await Assertions.toHaveQuantity(articleList, "articles", {
|
|
18
|
+
quantity: 3,
|
|
19
|
+
operator: "lte",
|
|
20
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toHaveText
|
|
3
|
+
*
|
|
4
|
+
* Vérifier le texte complet d’un élément visible.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { articleList } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
await Assertions.toHaveText(articleList, "title", "Introduction à TypeScript");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.toHaveValue
|
|
3
|
+
*
|
|
4
|
+
* Vérifier la valeur d’un élément visible.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { searchForm } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
await Assertions.toHaveValue(searchForm, "query", "TypeScript");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Assertions.withStep
|
|
3
|
+
*
|
|
4
|
+
* Ajouter une étape Playwright nommée autour d’une interaction.
|
|
5
|
+
*/
|
|
6
|
+
import { Assertions } from "@duplojs/playwright";
|
|
7
|
+
import { searchForm } from "../fixtures/component";
|
|
8
|
+
|
|
9
|
+
// Cette étape englobe celle produite par l’assertion dans le rapport Playwright.
|
|
10
|
+
await Assertions.withStep("Vérifier la recherche").toBeEnabled(searchForm, "submit");
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
## Assertions
|
|
2
|
+
|
|
3
|
+
Vérifications de l’état des éléments nommés des pages et composants.
|
|
4
|
+
|
|
5
|
+
### [Assertions.toBeBusy](10-toBeBusy.ts)
|
|
6
|
+
|
|
7
|
+
Vérifier aria-busy="true" sur un élément visible.
|
|
8
|
+
|
|
9
|
+
### [Assertions.toBeChecked](10-toBeChecked.ts)
|
|
10
|
+
|
|
11
|
+
Vérifier qu’un élément visible est coché.
|
|
12
|
+
|
|
13
|
+
### [Assertions.toBeDisabled](10-toBeDisabled.ts)
|
|
14
|
+
|
|
15
|
+
Vérifier qu’un élément visible est désactivé.
|
|
16
|
+
|
|
17
|
+
### [Assertions.toBeEnabled](10-toBeEnabled.ts)
|
|
18
|
+
|
|
19
|
+
Vérifier qu’un élément visible est activé.
|
|
20
|
+
|
|
21
|
+
### [Assertions.toBeHidden](10-toBeHidden.ts)
|
|
22
|
+
|
|
23
|
+
Vérifier que l’élément est caché.
|
|
24
|
+
|
|
25
|
+
### [Assertions.toBeNotBusy](10-toBeNotBusy.ts)
|
|
26
|
+
|
|
27
|
+
Vérifier aria-busy="false" sur un élément visible.
|
|
28
|
+
|
|
29
|
+
### [Assertions.toBeVisible](10-toBeVisible.ts)
|
|
30
|
+
|
|
31
|
+
Faire défiler jusqu’à l’élément puis vérifier sa visibilité.
|
|
32
|
+
|
|
33
|
+
### [Assertions.toContainText](10-toContainText.ts)
|
|
34
|
+
|
|
35
|
+
Vérifier une partie du texte d’un élément visible.
|
|
36
|
+
|
|
37
|
+
### [Assertions.toHaveAttribute](10-toHaveAttribute.ts)
|
|
38
|
+
|
|
39
|
+
Vérifier un attribut d’un élément visible.
|
|
40
|
+
|
|
41
|
+
### [Assertions.toHaveClass](10-toHaveClass.ts)
|
|
42
|
+
|
|
43
|
+
Vérifier les classes d’un élément visible.
|
|
44
|
+
|
|
45
|
+
### [Assertions.toHaveNoText](10-toHaveNoText.ts)
|
|
46
|
+
|
|
47
|
+
Vérifier que le texte d’un élément visible est vide.
|
|
48
|
+
|
|
49
|
+
### [Assertions.toHaveQuantity](10-toHaveQuantity.ts)
|
|
50
|
+
|
|
51
|
+
Vérifier le nombre d’éléments correspondants.
|
|
52
|
+
|
|
53
|
+
### [Assertions.toHaveText](10-toHaveText.ts)
|
|
54
|
+
|
|
55
|
+
Vérifier le texte complet d’un élément visible.
|
|
56
|
+
|
|
57
|
+
### [Assertions.toHaveValue](10-toHaveValue.ts)
|
|
58
|
+
|
|
59
|
+
Vérifier la valeur d’un élément visible.
|
|
60
|
+
|
|
61
|
+
### [Assertions.withStep](10-withStep.ts)
|
|
62
|
+
|
|
63
|
+
Ajouter une étape Playwright nommée autour d’une interaction.
|
|
64
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createComponent, type Website } from "@duplojs/playwright";
|
|
2
|
+
|
|
3
|
+
declare const website: Website;
|
|
4
|
+
|
|
5
|
+
const searchFormEngine = createComponent("search form", {
|
|
6
|
+
getMainElement: ({ body }) => body.locator("form[data-search]"),
|
|
7
|
+
getElements: ({ mainElement }) => ({
|
|
8
|
+
query: mainElement.locator("input[name='query']"),
|
|
9
|
+
submit: mainElement.locator("button[type='submit']"),
|
|
10
|
+
onlyPublished: mainElement.locator("input[name='published']"),
|
|
11
|
+
categories: mainElement.locator("select[name='categories'][multiple]"),
|
|
12
|
+
feedback: mainElement.locator("[role='status']"),
|
|
13
|
+
}),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
const articleListEngine = createComponent("article list", {
|
|
17
|
+
getMainElement: ({ body }) => body.locator("[data-article-list]"),
|
|
18
|
+
getElements: ({ mainElement }) => ({
|
|
19
|
+
articles: mainElement.locator("article"),
|
|
20
|
+
title: mainElement.locator("h2").first(),
|
|
21
|
+
loading: mainElement.locator("[data-loading]"),
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const navigationEngine = createComponent("navigation", {
|
|
26
|
+
getMainElement: ({ body }) => body.locator("nav"),
|
|
27
|
+
getElements: ({ mainElement }) => ({
|
|
28
|
+
menuButton: mainElement.locator("button[data-menu]"),
|
|
29
|
+
menu: mainElement.locator("[data-menu-items]"),
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const boardEngine = createComponent("kanban board", {
|
|
34
|
+
getMainElement: ({ body }) => body.locator("[data-board]"),
|
|
35
|
+
getElements: ({ mainElement }) => ({
|
|
36
|
+
task: mainElement.locator("[data-task='review']"),
|
|
37
|
+
doneColumn: mainElement.locator("[data-column='done']"),
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export const searchForm = searchFormEngine(website);
|
|
42
|
+
export const articleList = articleListEngine(website);
|
|
43
|
+
export const navigation = navigationEngine(website);
|
|
44
|
+
export const board = boardEngine(website);
|
package/docs/API.llms.md
CHANGED
|
@@ -29,3 +29,87 @@ Création, discrimination, transformation et propagation des réussites ou des
|
|
|
29
29
|
## [DGenerator](API/10-lang/10-generator/index.llms.md)
|
|
30
30
|
|
|
31
31
|
Création et composition de génératrices synchrones ou asynchrones pour produire, transformer, filtrer, réduire et consommer des séquences de valeurs.
|
|
32
|
+
|
|
33
|
+
## [DNumber](API/10-lang/10-number/index.llms.md)
|
|
34
|
+
|
|
35
|
+
Prédicats et transformations fonctionnelles pour comparer, vérifier, agréger et trier des nombres tout en conservant leurs contraintes de typage.
|
|
36
|
+
|
|
37
|
+
## [DObject](API/10-lang/10-object/index.llms.md)
|
|
38
|
+
|
|
39
|
+
Fonctions fonctionnelles pour lire, discriminer, transformer, fusionner et reconstruire des objets en conservant les informations de typage utiles.
|
|
40
|
+
|
|
41
|
+
## [DPath](API/10-lang/10-path/index.llms.md)
|
|
42
|
+
|
|
43
|
+
Chemins Unix typés : déclarer des littéraux, valider et normaliser des chaînes runtime, extraire des segments, résoudre des chemins ou sélectionner des motifs glob, indépendamment du système de fichiers.
|
|
44
|
+
|
|
45
|
+
## [DPattern](API/10-lang/10-pattern/index.llms.md)
|
|
46
|
+
|
|
47
|
+
Sélectionner et traiter les variantes d’une union par identité, valeur littérale, motif structurel ou predicate, avec couverture exhaustive ou branche de repli.
|
|
48
|
+
|
|
49
|
+
## [DPrinter](API/10-lang/10-printer/index.llms.md)
|
|
50
|
+
|
|
51
|
+
Fonctions et constantes pour assembler du texte, formater des lignes et paragraphes, ajouter une indentation ou des styles ANSI.
|
|
52
|
+
|
|
53
|
+
## [DString](API/10-lang/10-string/index.llms.md)
|
|
54
|
+
|
|
55
|
+
Fonctions de manipulation, recherche, validation et transformation des chaînes de caractères, avec des formes curifiées et des contraintes de typage lorsque l'API peut les établir.
|
|
56
|
+
|
|
57
|
+
## [DTuple](API/10-lang/10-tuple/index.llms.md)
|
|
58
|
+
|
|
59
|
+
Manipulation et typage des tuples : convertir les garanties de cardinalité en positions typées, puis transformer leurs éléments en conservant leur forme.
|
|
60
|
+
|
|
61
|
+
# @duplojs/json-web-token
|
|
62
|
+
|
|
63
|
+
Politiques JWT réutilisables, signature, chiffrement facultatif et primitives cryptographiques.
|
|
64
|
+
|
|
65
|
+
## [TokenHandler](API/40-json-web-token/10-tokenHandler/index.llms.md)
|
|
66
|
+
|
|
67
|
+
Définir une politique et créer, décoder ou vérifier les tokens associés.
|
|
68
|
+
|
|
69
|
+
## [Signer](API/40-json-web-token/20-signer/index.llms.md)
|
|
70
|
+
|
|
71
|
+
Configurer la signature et la vérification cryptographiques.
|
|
72
|
+
|
|
73
|
+
## [Cipher](API/40-json-web-token/30-cipher/index.llms.md)
|
|
74
|
+
|
|
75
|
+
Configurer le chiffrement et le déchiffrement facultatifs des tokens.
|
|
76
|
+
|
|
77
|
+
## [Utilitaires JWT](API/40-json-web-token/40-utils/index.llms.md)
|
|
78
|
+
|
|
79
|
+
Manipuler les encodages et les primitives cryptographiques publiques.
|
|
80
|
+
|
|
81
|
+
# @duplojs/form
|
|
82
|
+
|
|
83
|
+
Construction de formulaires typés à partir de champs composables et de leurs validations.
|
|
84
|
+
|
|
85
|
+
## Form pour Vue
|
|
86
|
+
|
|
87
|
+
Fabriques de formulaires, de champs et de templates pour l'intégration Vue.
|
|
88
|
+
|
|
89
|
+
### [Construction de formulaires](API/50-form/10-vue/10-construction/index.llms.md)
|
|
90
|
+
|
|
91
|
+
Fabriques de formulaires, de champs et de templates.
|
|
92
|
+
|
|
93
|
+
### [Layouts](API/50-form/10-vue/20-layouts/index.llms.md)
|
|
94
|
+
|
|
95
|
+
Composition des champs et ajout de structure, validation, contrôle de flux et slots.
|
|
96
|
+
|
|
97
|
+
### [Design system](API/50-form/10-vue/30-designSystem/index.llms.md)
|
|
98
|
+
|
|
99
|
+
Composants et inputs prêts à l'emploi pour construire les formulaires et les commandes des templates Grid.
|
|
100
|
+
|
|
101
|
+
# @duplojs/playwright
|
|
102
|
+
|
|
103
|
+
Fabriques de site, pages et composants, interactions et assertions pour les parcours E2E.
|
|
104
|
+
|
|
105
|
+
## [Construction](API/60-playwright/10-construction/index.llms.md)
|
|
106
|
+
|
|
107
|
+
Fabriques de sites, pages, composants, interactions et wrappers de parcours.
|
|
108
|
+
|
|
109
|
+
## [Actions](API/60-playwright/20-actions/index.llms.md)
|
|
110
|
+
|
|
111
|
+
Interactions avec les éléments nommés des pages et composants.
|
|
112
|
+
|
|
113
|
+
## [Assertions](API/60-playwright/30-assertions/index.llms.md)
|
|
114
|
+
|
|
115
|
+
Vérifications de l’état des éléments nommés des pages et composants.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Exploitation des contraintes par les fonctions DuploJS pour simplifier la manipulation des valeurs.
|
|
5
5
|
*/
|
|
6
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
6
7
|
import * as DTuple from "@duplojs/lang/tuple";
|
|
7
8
|
import * as DString from "@duplojs/lang/string";
|
|
8
9
|
import * as DArray from "@duplojs/lang/array";
|
|
@@ -13,26 +14,28 @@ declare const userEmail: string & DString.Email;
|
|
|
13
14
|
|
|
14
15
|
// Un email dans son format contenant obligatoirement un "@"
|
|
15
16
|
// donne forcément un tableau avec minimum 2 éléments.
|
|
16
|
-
// readonly string[] & DArray.MinElements<2>
|
|
17
17
|
const splitEmail = DString.split(userEmail, "@");
|
|
18
|
+
type _CheckSplitEmail = DCommon.ExpectType<typeof splitEmail, readonly string[] & DArray.MinElements<2>, "strict">;
|
|
18
19
|
|
|
19
20
|
// Le passage du tableau en tuple est fait en interprétant la contrainte
|
|
20
21
|
// DArray.MinElements<2>, ce qui garantit au moins deux éléments, sans imposer une longueur exacte.
|
|
21
|
-
// readonly [string, string, ...string[]]
|
|
22
22
|
const [first, second, ...maybeRest] = DTuple.from(splitEmail);
|
|
23
|
+
type _CheckFirst = DCommon.ExpectType<typeof first, string, "strict">;
|
|
24
|
+
type _CheckSecond = DCommon.ExpectType<typeof second, string, "strict">;
|
|
25
|
+
type _CheckMaybeRest = DCommon.ExpectType<typeof maybeRest, string[], "strict">;
|
|
23
26
|
|
|
24
27
|
// Les accès garantis par la cardinalité évitent le type string | undefined.
|
|
25
|
-
// string
|
|
26
28
|
const firstElement = DArray.first(splitEmail);
|
|
29
|
+
type _CheckFirstElement = DCommon.ExpectType<typeof firstElement, string, "strict">;
|
|
27
30
|
|
|
28
|
-
// string
|
|
29
31
|
const lastElement = DArray.last(splitEmail);
|
|
32
|
+
type _CheckLastElement = DCommon.ExpectType<typeof lastElement, string, "strict">;
|
|
30
33
|
|
|
31
|
-
// string
|
|
32
34
|
const secondElement = DArray.at(splitEmail, 1);
|
|
35
|
+
type _CheckSecondElement = DCommon.ExpectType<typeof secondElement, string, "strict">;
|
|
33
36
|
|
|
34
|
-
// string | undefined
|
|
35
37
|
const otherElement = DArray.at(splitEmail, 10);
|
|
38
|
+
type _CheckOtherElement = DCommon.ExpectType<typeof otherElement, string | undefined, "strict">;
|
|
36
39
|
|
|
37
40
|
// Le résultat porte une garantie de cardinalité ; les fragments ne sont plus typés Email.
|
|
38
41
|
// Privilégier les transformations immuables : une mutation pourrait invalider une garantie.
|
|
@@ -52,11 +52,15 @@ declare function createUser<
|
|
|
52
52
|
|
|
53
53
|
// infer calcule les contraintes attendues tout en conservant la valeur littérale.
|
|
54
54
|
// Il est adapté aux constantes connues statiquement et ne valide rien au runtime.
|
|
55
|
-
createUser({
|
|
55
|
+
const inferredUser = createUser({
|
|
56
56
|
name: DCommon.infer("thisIsASuperName"),
|
|
57
57
|
age: DCommon.infer(18),
|
|
58
58
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
type _CheckInferredUser = DCommon.ExpectType<
|
|
60
|
+
typeof inferredUser,
|
|
61
|
+
{
|
|
62
|
+
name: "thisIsASuperName" & DString.MinCharacters<10>;
|
|
63
|
+
age: 18 & DNumber.GreaterThanOrEqual<18>;
|
|
64
|
+
},
|
|
65
|
+
"strict"
|
|
66
|
+
>;
|
|
@@ -28,6 +28,11 @@ const normalizedTags = DCommon.pipe(
|
|
|
28
28
|
DArray.filter(DString.isNotEmpty),
|
|
29
29
|
DArray.map(DString.toLowerCase),
|
|
30
30
|
);
|
|
31
|
+
type _CheckNormalizedTags = DCommon.ExpectType<
|
|
32
|
+
typeof normalizedTags,
|
|
33
|
+
readonly (Lowercase<string> & DString.MinCharacters<1>)[] & DArray.MaxElements<3>,
|
|
34
|
+
"strict"
|
|
35
|
+
>;
|
|
31
36
|
// Résultat : ["typescript", "duplojs", "functional"].
|
|
32
37
|
// Chaque étape reçoit la sortie précédente ; les types suivent ces transformations.
|
|
33
38
|
// On peut ajouter, retirer ou réordonner les étapes sans restructurer le traitement.
|
|
@@ -21,7 +21,6 @@ import * as DSFile from "@duplojs/server/file";
|
|
|
21
21
|
// Cette démarche s’applique à tous les packages ; les domaines ci-dessous sont des exemples.
|
|
22
22
|
|
|
23
23
|
// Les fonctions de `string` et `array` sont faites pour être composées.
|
|
24
|
-
// readonly (Lowercase<string> & DString.MinCharacters<1>)[] & DArray.MaxElements<4>
|
|
25
24
|
const normalizedNames = DCommon.pipe(
|
|
26
25
|
[" John ", "", " JANE ", " Alice "],
|
|
27
26
|
DArray.map(DString.trim),
|
|
@@ -29,21 +28,22 @@ const normalizedNames = DCommon.pipe(
|
|
|
29
28
|
DArray.map(DString.toLowerCase),
|
|
30
29
|
DArray.sort(DString.sortCompare),
|
|
31
30
|
);
|
|
31
|
+
type _CheckNormalizedNames = DCommon.ExpectType<
|
|
32
|
+
typeof normalizedNames,
|
|
33
|
+
readonly (Lowercase<string> & DString.MinCharacters<1>)[] & DArray.MaxElements<4>,
|
|
34
|
+
"strict"
|
|
35
|
+
>;
|
|
32
36
|
|
|
33
37
|
// Les prédicats de `number` peuvent directement être utilisés
|
|
34
38
|
// dans les fonctions de manipulation de tableaux.
|
|
35
|
-
// number
|
|
36
39
|
const adultAges = DCommon.pipe(
|
|
37
40
|
[12, 18, 42, 8, 21],
|
|
38
41
|
DArray.filter(DNumber.greaterThanOrEqual(18)),
|
|
39
42
|
DNumber.sum,
|
|
40
43
|
);
|
|
44
|
+
type _CheckAdultAges = DCommon.ExpectType<typeof adultAges, number, "strict">;
|
|
41
45
|
|
|
42
46
|
// Les fonctions de `object` sont également prévues pour le pipe.
|
|
43
|
-
// {
|
|
44
|
-
// name: string & DString.Trimmed & DString.MaxCharacters<6>;
|
|
45
|
-
// readonly age: 24;
|
|
46
|
-
// }
|
|
47
47
|
const publicUser = DCommon.pipe(
|
|
48
48
|
{
|
|
49
49
|
name: " John ",
|
|
@@ -53,10 +53,17 @@ const publicUser = DCommon.pipe(
|
|
|
53
53
|
DObject.transformProperty("name", DString.trim),
|
|
54
54
|
DObject.omit(["password"]),
|
|
55
55
|
);
|
|
56
|
+
type _CheckPublicUser = DCommon.ExpectType<
|
|
57
|
+
typeof publicUser,
|
|
58
|
+
{
|
|
59
|
+
name: string & DString.Trimmed & DString.MaxCharacters<6>;
|
|
60
|
+
readonly age: 24;
|
|
61
|
+
},
|
|
62
|
+
"strict"
|
|
63
|
+
>;
|
|
56
64
|
|
|
57
65
|
// `innerPipe` permet de composer plusieurs fonctions intégrées
|
|
58
66
|
// directement à l'endroit où une callback est attendue.
|
|
59
|
-
// readonly { name: Lowercase<string>; }[] & DArray.LengthEqual<2>
|
|
60
67
|
const users = DCommon.pipe(
|
|
61
68
|
[
|
|
62
69
|
{
|
|
@@ -81,39 +88,43 @@ const users = DCommon.pipe(
|
|
|
81
88
|
),
|
|
82
89
|
),
|
|
83
90
|
);
|
|
91
|
+
type _CheckUsers = DCommon.ExpectType<
|
|
92
|
+
typeof users,
|
|
93
|
+
readonly { name: Lowercase<string> }[] & DArray.LengthEqual<2>,
|
|
94
|
+
"strict"
|
|
95
|
+
>;
|
|
84
96
|
|
|
85
97
|
// Les fonctions `Either` sont elles aussi composables avec les pipes.
|
|
86
98
|
declare const maybeName:
|
|
87
99
|
| DEither.Right<"user-found", string>
|
|
88
100
|
| DEither.Left<"user-not-found">;
|
|
89
101
|
|
|
90
|
-
// Lowercase<string>
|
|
91
102
|
const name = DCommon.pipe(
|
|
92
103
|
maybeName,
|
|
93
104
|
DEither.unwrapOr("anonymous"),
|
|
94
105
|
DString.trim,
|
|
95
106
|
DString.toLowerCase,
|
|
96
107
|
);
|
|
108
|
+
type _CheckName = DCommon.ExpectType<typeof name, Lowercase<string>, "strict">;
|
|
97
109
|
|
|
98
110
|
// `Either` possède également ses propres pipes lorsque le traitement
|
|
99
111
|
// doit continuer uniquement sur une valeur `Right`.
|
|
100
|
-
// DEither.Left<"user-not-found", unknown> | DEither.Success<Lowercase<string>>
|
|
101
112
|
const normalizedEitherName = DEither.rightPipe(
|
|
102
113
|
maybeName,
|
|
103
114
|
DString.trim,
|
|
104
115
|
DString.toLowerCase,
|
|
105
116
|
);
|
|
117
|
+
type _CheckNormalizedEitherName = DCommon.ExpectType<typeof normalizedEitherName, DEither.Left<"user-not-found", unknown> | DEither.Success<Lowercase<string>>, "strict">;
|
|
106
118
|
|
|
107
119
|
// Les tuples disposent eux aussi de fonctions curifiées.
|
|
108
|
-
// readonly [string & DString.Trimmed & DString.MaxCharacters<6>, string & DString.Trimmed & DString.MaxCharacters<6>]
|
|
109
120
|
const normalizedTuple = DCommon.pipe(
|
|
110
121
|
[" John ", " Jane "] as const,
|
|
111
122
|
DTuple.map(DString.trim),
|
|
112
123
|
);
|
|
124
|
+
type _CheckNormalizedTuple = DCommon.ExpectType<typeof normalizedTuple, readonly [string & DString.Trimmed & DString.MaxCharacters<6>, string & DString.Trimmed & DString.MaxCharacters<6>], "strict">;
|
|
113
125
|
|
|
114
126
|
// Les generators permettent de construire des transformations lazy
|
|
115
127
|
// avec exactement le même modèle de composition.
|
|
116
|
-
// readonly (Lowercase<string> & DString.MinCharacters<1>)[]
|
|
117
128
|
const generatedNames = DCommon.pipe(
|
|
118
129
|
[" John ", "", " JANE ", " Alice "],
|
|
119
130
|
DGenerator.map(DString.trim),
|
|
@@ -121,11 +132,11 @@ const generatedNames = DCommon.pipe(
|
|
|
121
132
|
DGenerator.map(DString.toLowerCase),
|
|
122
133
|
DArray.from,
|
|
123
134
|
);
|
|
135
|
+
type _CheckGeneratedNames = DCommon.ExpectType<typeof generatedNames, readonly (Lowercase<string> & DString.MinCharacters<1>)[], "strict">;
|
|
124
136
|
|
|
125
137
|
// Les fonctions de date peuvent être utilisées directement dans les pipes.
|
|
126
138
|
declare const creationDate: DChrono.TheDate;
|
|
127
139
|
|
|
128
|
-
// string
|
|
129
140
|
const serializedCreationDate = DCommon.pipe(
|
|
130
141
|
creationDate,
|
|
131
142
|
DChrono.formatDate(
|
|
@@ -133,11 +144,11 @@ const serializedCreationDate = DCommon.pipe(
|
|
|
133
144
|
"Europe/Paris",
|
|
134
145
|
),
|
|
135
146
|
);
|
|
147
|
+
type _CheckSerializedCreationDate = DCommon.ExpectType<typeof serializedCreationDate, string, "strict">;
|
|
136
148
|
|
|
137
149
|
// Le pattern matching fournit également des fonctions curifiées.
|
|
138
150
|
declare const status: "draft" | "published" | "archived";
|
|
139
151
|
|
|
140
|
-
// "Draft" | "Published" | "Archived"
|
|
141
152
|
const statusLabel = DCommon.pipe(
|
|
142
153
|
status,
|
|
143
154
|
DPattern.matchWithStringOtherwise(
|
|
@@ -148,31 +159,32 @@ const statusLabel = DCommon.pipe(
|
|
|
148
159
|
() => "Archived" as const,
|
|
149
160
|
),
|
|
150
161
|
);
|
|
162
|
+
type _CheckStatusLabel = DCommon.ExpectType<typeof statusLabel, "Draft" | "Published" | "Archived", "strict">;
|
|
151
163
|
|
|
152
164
|
// Les fonctions n'ont pas besoin d'être curifiées lorsqu'elles reçoivent
|
|
153
165
|
// déjà la donnée comme unique argument : elles peuvent être utilisées
|
|
154
166
|
// directement comme étape du pipe.
|
|
155
167
|
declare const filePath: string & DPath.Path;
|
|
156
168
|
|
|
157
|
-
// string & DString.Trimmed
|
|
158
169
|
const fileContent = await DCommon.asyncPipe(
|
|
159
170
|
filePath,
|
|
160
171
|
DSFile.readTextFile,
|
|
161
172
|
DEither.unwrapOr(""),
|
|
162
173
|
DString.trim,
|
|
163
174
|
);
|
|
175
|
+
type _CheckFileContent = DCommon.ExpectType<typeof fileContent, string & DString.Trimmed, "strict">;
|
|
164
176
|
|
|
165
177
|
// Les fonctions curifiées existent également dans `@duplojs/server`.
|
|
166
|
-
// DSFile.WriteTextFileResult
|
|
167
178
|
const writeResult = await DCommon.asyncPipe(
|
|
168
179
|
filePath,
|
|
169
180
|
DSFile.writeTextFile("Hello world"),
|
|
170
181
|
);
|
|
182
|
+
type _CheckWriteResult = DCommon.ExpectType<typeof writeResult, DSFile.WriteTextFileResult, "strict">;
|
|
171
183
|
|
|
172
184
|
// Cela permet de composer des traitements provenant de plusieurs packages.
|
|
173
|
-
// DCommon.Json | {}
|
|
174
185
|
const jsonContent = await DCommon.asyncPipe(
|
|
175
186
|
filePath,
|
|
176
187
|
DSFile.readJsonFile,
|
|
177
188
|
DEither.unwrapOr({}),
|
|
178
189
|
);
|
|
190
|
+
type _CheckJsonContent = DCommon.ExpectType<typeof jsonContent, DCommon.Json | {}, "strict">;
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
import * as DCommon from "@duplojs/lang/common";
|
|
7
7
|
import * as DArray from "@duplojs/lang/array";
|
|
8
8
|
import * as DString from "@duplojs/lang/string";
|
|
9
|
+
import type * as DNumber from "@duplojs/lang/number";
|
|
9
10
|
|
|
10
11
|
// `innerPipe` permet d'enchaîner plusieurs transformations lorsqu'une
|
|
11
12
|
// fonction de transformation est elle-même attendue.
|
|
12
13
|
//
|
|
13
|
-
// readonly (Lowercase<string> & DString.NotEmpty)[] & DArray.MaxElements<3>
|
|
14
14
|
const normalizedTagsWithInnerPipe = DCommon.pipe(
|
|
15
15
|
" TypeScript, DuploJS, Functional " as const,
|
|
16
16
|
DString.split(","),
|
|
@@ -22,11 +22,15 @@ const normalizedTagsWithInnerPipe = DCommon.pipe(
|
|
|
22
22
|
),
|
|
23
23
|
DArray.filter(DString.isNotEmpty),
|
|
24
24
|
);
|
|
25
|
+
type _CheckNormalizedTagsWithInnerPipe = DCommon.ExpectType<
|
|
26
|
+
typeof normalizedTagsWithInnerPipe,
|
|
27
|
+
readonly (Lowercase<string> & DString.NotEmpty)[] & DArray.MaxElements<3>,
|
|
28
|
+
"strict"
|
|
29
|
+
>;
|
|
25
30
|
|
|
26
31
|
// `innerPipe` évite de créer une callback intermédiaire uniquement
|
|
27
32
|
// pour enchaîner plusieurs transformations.
|
|
28
33
|
//
|
|
29
|
-
// readonly (number & Positive)[] & DArray.LengthEqual<3> & DArray.MinElements<3> & DArray.MaxElements<3>
|
|
30
34
|
const tagLengths = DCommon.pipe(
|
|
31
35
|
" TypeScript, DuploJS, Functional " as const,
|
|
32
36
|
DString.split(","),
|
|
@@ -37,3 +41,8 @@ const tagLengths = DCommon.pipe(
|
|
|
37
41
|
),
|
|
38
42
|
),
|
|
39
43
|
);
|
|
44
|
+
type _CheckTagLengths = DCommon.ExpectType<
|
|
45
|
+
typeof tagLengths,
|
|
46
|
+
readonly (number & DNumber.Positive)[] & DArray.LengthEqual<3> & DArray.MinElements<3> & DArray.MaxElements<3>,
|
|
47
|
+
"strict"
|
|
48
|
+
>;
|