@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,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Cipher.createRSAOAEP
|
|
3
|
+
*
|
|
4
|
+
* Configurer RSA-OAEP avec SHA-1.
|
|
5
|
+
*/
|
|
6
|
+
import { Cipher } from "@duplojs/json-web-token";
|
|
7
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
8
|
+
|
|
9
|
+
// PEM PKCS8
|
|
10
|
+
declare const privateKey: string;
|
|
11
|
+
// PEM SPKI
|
|
12
|
+
declare const publicKey: string;
|
|
13
|
+
|
|
14
|
+
const cipher = Cipher.createRSAOAEP({
|
|
15
|
+
privateKey,
|
|
16
|
+
publicKey,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
type _Algorithm = DCommon.ExpectType<
|
|
20
|
+
typeof cipher.algorithm,
|
|
21
|
+
"RSA-OAEP",
|
|
22
|
+
"strict"
|
|
23
|
+
>;
|
|
24
|
+
|
|
25
|
+
// La factory peut être passée au handler pour fournir les clés par opération.
|
|
26
|
+
const factory = Cipher.createRSAOAEP;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Cipher.createRSAOAEP256
|
|
3
|
+
*
|
|
4
|
+
* Configurer RSA-OAEP avec SHA-256.
|
|
5
|
+
*/
|
|
6
|
+
import { Cipher } from "@duplojs/json-web-token";
|
|
7
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
8
|
+
|
|
9
|
+
// PEM PKCS8
|
|
10
|
+
declare const privateKey: string;
|
|
11
|
+
// PEM SPKI
|
|
12
|
+
declare const publicKey: string;
|
|
13
|
+
|
|
14
|
+
const cipher = Cipher.createRSAOAEP256({
|
|
15
|
+
privateKey,
|
|
16
|
+
publicKey,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
type _Algorithm = DCommon.ExpectType<
|
|
20
|
+
typeof cipher.algorithm,
|
|
21
|
+
"RSA-OAEP-256",
|
|
22
|
+
"strict"
|
|
23
|
+
>;
|
|
24
|
+
|
|
25
|
+
// La factory peut être passée au handler pour fournir les clés par opération.
|
|
26
|
+
const factory = Cipher.createRSAOAEP256;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Cipher.factory
|
|
3
|
+
*
|
|
4
|
+
* Définir une factory de chiffrement et de déchiffrement.
|
|
5
|
+
*/
|
|
6
|
+
import { Cipher, RSA_OAEP } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
const createCipher = Cipher.factory(
|
|
9
|
+
"RSA-OAEP-256",
|
|
10
|
+
(params: {
|
|
11
|
+
privateKey: string;
|
|
12
|
+
publicKey: string;
|
|
13
|
+
}, algorithm) => ({
|
|
14
|
+
encrypt: (content) => RSA_OAEP.encrypt(content, params.publicKey, algorithm),
|
|
15
|
+
decrypt: (content) => RSA_OAEP.decrypt(content, params.privateKey, algorithm),
|
|
16
|
+
}),
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
// PEM PKCS8
|
|
20
|
+
declare const privateKey: string;
|
|
21
|
+
// PEM SPKI
|
|
22
|
+
declare const publicKey: string;
|
|
23
|
+
const cipher = createCipher({
|
|
24
|
+
privateKey,
|
|
25
|
+
publicKey,
|
|
26
|
+
});
|
|
27
|
+
const encrypted = await cipher.encrypt("session");
|
|
28
|
+
// Le contenu déchiffré est "session" si les clés correspondent.
|
|
29
|
+
const decrypted = await cipher.decrypt(encrypted);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## Cipher
|
|
2
|
+
|
|
3
|
+
Configurer le chiffrement et le déchiffrement facultatifs des tokens.
|
|
4
|
+
|
|
5
|
+
### [Cipher.createRSAOAEP](10-createRSAOAEP.ts)
|
|
6
|
+
|
|
7
|
+
Configurer RSA-OAEP avec SHA-1.
|
|
8
|
+
|
|
9
|
+
### [Cipher.createRSAOAEP256](10-createRSAOAEP256.ts)
|
|
10
|
+
|
|
11
|
+
Configurer RSA-OAEP avec SHA-256.
|
|
12
|
+
|
|
13
|
+
### [Cipher.factory](10-factory.ts)
|
|
14
|
+
|
|
15
|
+
Définir une factory de chiffrement et de déchiffrement.
|
|
16
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title AES_GCM.decrypt
|
|
3
|
+
*
|
|
4
|
+
* Déchiffrer avec AES-GCM et le vecteur associé.
|
|
5
|
+
*/
|
|
6
|
+
import { AES_GCM } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
// 16 octets UTF-8 pour A128GCM
|
|
9
|
+
declare const key: string;
|
|
10
|
+
const encrypted = await AES_GCM.encrypt("session", key, "A128GCM");
|
|
11
|
+
const content = await AES_GCM.decrypt(
|
|
12
|
+
encrypted.cipherText,
|
|
13
|
+
key,
|
|
14
|
+
encrypted.initializationVector,
|
|
15
|
+
"A128GCM",
|
|
16
|
+
);
|
|
17
|
+
// Le contenu déchiffré est "session" si la clé et le vecteur correspondent.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title AES_GCM.encrypt
|
|
3
|
+
*
|
|
4
|
+
* Chiffrer avec AES-GCM et récupérer le vecteur utilisé.
|
|
5
|
+
*/
|
|
6
|
+
import { AES_GCM } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
// 16 octets UTF-8 pour A128GCM, issue d'une source sécurisée
|
|
9
|
+
declare const key: string;
|
|
10
|
+
const encrypted = await AES_GCM.encrypt("session", key, "A128GCM");
|
|
11
|
+
// cipherText et initializationVector sont encodés en Base64URL.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title HMAC.sign
|
|
3
|
+
*
|
|
4
|
+
* Signer avec HMAC.
|
|
5
|
+
*/
|
|
6
|
+
import { HMAC } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
// secret fourni par une source sécurisée
|
|
9
|
+
declare const secret: string;
|
|
10
|
+
// Base64URL
|
|
11
|
+
const signature = await HMAC.sign("session", secret, "HS256");
|
|
12
|
+
// Résultat booléen de la vérification cryptographique.
|
|
13
|
+
const isValid = await HMAC.verify("session", signature, secret, "HS256");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title HMAC.verify
|
|
3
|
+
*
|
|
4
|
+
* Vérifier une signature HMAC.
|
|
5
|
+
*/
|
|
6
|
+
import { HMAC } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
declare const secret: string;
|
|
9
|
+
const signature = await HMAC.sign("session", secret, "HS512");
|
|
10
|
+
// Résultat booléen de la vérification cryptographique.
|
|
11
|
+
const isValid = await HMAC.verify("session", signature, secret, "HS512");
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title RSA.sign
|
|
3
|
+
*
|
|
4
|
+
* Signer avec une clé privée RSA PKCS8.
|
|
5
|
+
*/
|
|
6
|
+
import { RSA } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
declare const privateKey: string;
|
|
9
|
+
// PEM SPKI correspondant
|
|
10
|
+
declare const publicKey: string;
|
|
11
|
+
// Base64URL
|
|
12
|
+
const signature = await RSA.sign("session", privateKey, "RS256");
|
|
13
|
+
// Résultat booléen de la vérification cryptographique.
|
|
14
|
+
const isValid = await RSA.verify("session", signature, publicKey, "RS256");
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title RSA.verify
|
|
3
|
+
*
|
|
4
|
+
* Vérifier une signature RSA avec une clé publique SPKI.
|
|
5
|
+
*/
|
|
6
|
+
import { RSA } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
// PEM PKCS8 correspondant
|
|
9
|
+
declare const privateKey: string;
|
|
10
|
+
declare const publicKey: string;
|
|
11
|
+
const signature = await RSA.sign("session", privateKey, "RS512");
|
|
12
|
+
// Résultat booléen de la vérification cryptographique.
|
|
13
|
+
const isValid = await RSA.verify("session", signature, publicKey, "RS512");
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title RSA_OAEP.decrypt
|
|
3
|
+
*
|
|
4
|
+
* Déchiffrer avec une clé privée RSA-OAEP PKCS8.
|
|
5
|
+
*/
|
|
6
|
+
import { RSA_OAEP } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
declare const privateKey: string;
|
|
9
|
+
// PEM SPKI correspondant
|
|
10
|
+
declare const publicKey: string;
|
|
11
|
+
const encrypted = await RSA_OAEP.encrypt("session", publicKey, "RSA-OAEP-256");
|
|
12
|
+
// Le contenu déchiffré est "session" si les clés correspondent.
|
|
13
|
+
const content = await RSA_OAEP.decrypt(encrypted, privateKey, "RSA-OAEP-256");
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title RSA_OAEP.encrypt
|
|
3
|
+
*
|
|
4
|
+
* Chiffrer avec une clé publique RSA-OAEP SPKI.
|
|
5
|
+
*/
|
|
6
|
+
import { RSA_OAEP } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
declare const publicKey: string;
|
|
9
|
+
// Base64URL
|
|
10
|
+
const encrypted = await RSA_OAEP.encrypt("session", publicKey, "RSA-OAEP-256");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title jsonParse
|
|
3
|
+
*
|
|
4
|
+
* Lire du JSON ou renvoyer undefined si la syntaxe est invalide.
|
|
5
|
+
*/
|
|
6
|
+
import { jsonParse } from "@duplojs/json-web-token";
|
|
7
|
+
|
|
8
|
+
// objet JSON
|
|
9
|
+
const payload = jsonParse("{\"userId\":\"42\"}");
|
|
10
|
+
// undefined
|
|
11
|
+
const invalid = jsonParse("{");
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
## Utilitaires JWT
|
|
2
|
+
|
|
3
|
+
Manipuler les encodages et les primitives cryptographiques publiques.
|
|
4
|
+
|
|
5
|
+
### [AES_GCM.decrypt](10-AES_GCM.decrypt.ts)
|
|
6
|
+
|
|
7
|
+
Déchiffrer avec AES-GCM et le vecteur associé.
|
|
8
|
+
|
|
9
|
+
### [AES_GCM.encrypt](10-AES_GCM.encrypt.ts)
|
|
10
|
+
|
|
11
|
+
Chiffrer avec AES-GCM et récupérer le vecteur utilisé.
|
|
12
|
+
|
|
13
|
+
### [AES_GCM.generateInitializationVector](10-AES_GCM.generateInitializationVector.ts)
|
|
14
|
+
|
|
15
|
+
Produire un vecteur aléatoire de 12 octets.
|
|
16
|
+
|
|
17
|
+
### [HMAC.sign](10-HMAC.sign.ts)
|
|
18
|
+
|
|
19
|
+
Signer avec HMAC.
|
|
20
|
+
|
|
21
|
+
### [HMAC.verify](10-HMAC.verify.ts)
|
|
22
|
+
|
|
23
|
+
Vérifier une signature HMAC.
|
|
24
|
+
|
|
25
|
+
### [RSA.sign](10-RSA.sign.ts)
|
|
26
|
+
|
|
27
|
+
Signer avec une clé privée RSA PKCS8.
|
|
28
|
+
|
|
29
|
+
### [RSA.verify](10-RSA.verify.ts)
|
|
30
|
+
|
|
31
|
+
Vérifier une signature RSA avec une clé publique SPKI.
|
|
32
|
+
|
|
33
|
+
### [RSA_OAEP.decrypt](10-RSA_OAEP.decrypt.ts)
|
|
34
|
+
|
|
35
|
+
Déchiffrer avec une clé privée RSA-OAEP PKCS8.
|
|
36
|
+
|
|
37
|
+
### [RSA_OAEP.encrypt](10-RSA_OAEP.encrypt.ts)
|
|
38
|
+
|
|
39
|
+
Chiffrer avec une clé publique RSA-OAEP SPKI.
|
|
40
|
+
|
|
41
|
+
### [decodeBase64](10-decodeBase64.ts)
|
|
42
|
+
|
|
43
|
+
Décoder du Base64 en octets.
|
|
44
|
+
|
|
45
|
+
### [decodeBase64Url](10-decodeBase64Url.ts)
|
|
46
|
+
|
|
47
|
+
Décoder du Base64URL en octets.
|
|
48
|
+
|
|
49
|
+
### [decodeText](10-decodeText.ts)
|
|
50
|
+
|
|
51
|
+
Décoder des octets UTF-8.
|
|
52
|
+
|
|
53
|
+
### [encodeBase64](10-encodeBase64.ts)
|
|
54
|
+
|
|
55
|
+
Encoder des octets en Base64.
|
|
56
|
+
|
|
57
|
+
### [encodeBase64Url](10-encodeBase64Url.ts)
|
|
58
|
+
|
|
59
|
+
Encoder du texte ou des octets en Base64URL sans remplissage.
|
|
60
|
+
|
|
61
|
+
### [encodeText](10-encodeText.ts)
|
|
62
|
+
|
|
63
|
+
Encoder une chaîne en UTF-8.
|
|
64
|
+
|
|
65
|
+
### [isBase64Url](10-isBase64Url.ts)
|
|
66
|
+
|
|
67
|
+
Vérifier la forme d’une chaîne Base64URL.
|
|
68
|
+
|
|
69
|
+
### [jsonParse](10-jsonParse.ts)
|
|
70
|
+
|
|
71
|
+
Lire du JSON ou renvoyer undefined si la syntaxe est invalide.
|
|
72
|
+
|
|
73
|
+
### [pemToBinary](10-pemToBinary.ts)
|
|
74
|
+
|
|
75
|
+
Convertir une clé PEM en octets DER.
|
|
76
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title createForm
|
|
3
|
+
*
|
|
4
|
+
* Associer des templates à une fabrique de formulaires Vue.
|
|
5
|
+
*/
|
|
6
|
+
import { createForm, useMultiLayout, type GetCheckedValue } from "@duplojs/form/vue";
|
|
7
|
+
import { useTextInput } from "@duplojs/form/vueDesignSystem";
|
|
8
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
9
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
10
|
+
import type * as DString from "@duplojs/lang/string";
|
|
11
|
+
import { grid } from "../fixtures/templates";
|
|
12
|
+
|
|
13
|
+
// La fabrique peut servir à plusieurs formulaires ; chaque appel reçoit son champ racine.
|
|
14
|
+
const useForm = createForm(grid.useTemplates());
|
|
15
|
+
|
|
16
|
+
const { component: ContactForm, currentValue, check, reset, dispose } = useForm(
|
|
17
|
+
useMultiLayout({
|
|
18
|
+
email: useTextInput({
|
|
19
|
+
label: "Email",
|
|
20
|
+
dataStructure: DDataStructure.string([DDataStructure.email()]),
|
|
21
|
+
}),
|
|
22
|
+
}),
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
// La saisie brute reste une chaîne ; seul le succès de check garantit le format email.
|
|
26
|
+
type _Raw = DCommon.ExpectType<
|
|
27
|
+
typeof currentValue.value,
|
|
28
|
+
{ email: string },
|
|
29
|
+
"strict"
|
|
30
|
+
>;
|
|
31
|
+
type _Checked = DCommon.ExpectType<
|
|
32
|
+
GetCheckedValue<typeof check>,
|
|
33
|
+
{ email: string & DString.Email },
|
|
34
|
+
"strict"
|
|
35
|
+
>;
|
|
36
|
+
|
|
37
|
+
// Succès avec la valeur validée, ou erreurs associées aux champs.
|
|
38
|
+
const result = await check();
|
|
39
|
+
void result;
|
|
40
|
+
|
|
41
|
+
// À monter dans Vue ; son slot par défaut reçoit le bouton de soumission.
|
|
42
|
+
void ContactForm;
|
|
43
|
+
|
|
44
|
+
// Restaure la valeur initiale.
|
|
45
|
+
reset();
|
|
46
|
+
|
|
47
|
+
// Libère les scopes internes lorsque le formulaire n'est plus utilisé.
|
|
48
|
+
dispose();
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title createFormField
|
|
3
|
+
*
|
|
4
|
+
* Construire une primitive de champ personnalisée pour un formulaire Vue.
|
|
5
|
+
*/
|
|
6
|
+
import { createForm, createFormField, useMultiLayout, type FormField, type FormFieldSlots } from "@duplojs/form/vue";
|
|
7
|
+
import { useTextInput } from "@duplojs/form/vueDesignSystem";
|
|
8
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
9
|
+
import { grid } from "../fixtures/templates";
|
|
10
|
+
|
|
11
|
+
// Un layout qui présente un champ dans une section utilise le template du contexte.
|
|
12
|
+
// Le champ enfant conserve son modèle et ses garanties de validation.
|
|
13
|
+
function useTitledField<GenericValue, GenericChecked, GenericSlots extends FormFieldSlots>(
|
|
14
|
+
field: FormField<GenericValue, GenericChecked, GenericSlots>,
|
|
15
|
+
title: string,
|
|
16
|
+
) {
|
|
17
|
+
return createFormField<
|
|
18
|
+
GenericValue,
|
|
19
|
+
GenericChecked,
|
|
20
|
+
GenericSlots
|
|
21
|
+
>(
|
|
22
|
+
(modelValue, parentKey, context) => {
|
|
23
|
+
const key = `${parentKey}_TITLE`;
|
|
24
|
+
const child = field.new(modelValue, key, context);
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
check: () => child.check(),
|
|
28
|
+
reset: () => child.reset(),
|
|
29
|
+
dispose: () => child.dispose(),
|
|
30
|
+
getVNode: () => context.templates.section.getVNode(
|
|
31
|
+
{
|
|
32
|
+
fieldKey: key,
|
|
33
|
+
getCurrentValue: () => modelValue.value,
|
|
34
|
+
title,
|
|
35
|
+
},
|
|
36
|
+
{ formField: () => child.getVNode() },
|
|
37
|
+
),
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
field.defaultValue,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Le formulaire instancie le layout avec le modèle initial du champ enfant.
|
|
45
|
+
const useForm = createForm(grid.useTemplates());
|
|
46
|
+
const { component: ProfileForm, currentValue, check, reset, dispose } = useForm(
|
|
47
|
+
useTitledField(
|
|
48
|
+
useMultiLayout({
|
|
49
|
+
name: useTextInput({ label: "Name" }),
|
|
50
|
+
}),
|
|
51
|
+
"Profile",
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
type _Value = DCommon.ExpectType<
|
|
56
|
+
typeof currentValue.value,
|
|
57
|
+
{ name: string },
|
|
58
|
+
"strict"
|
|
59
|
+
>;
|
|
60
|
+
|
|
61
|
+
// check, reset et dispose sont délégués à l'enfant ; reset du formulaire restaure aussi le modèle initial.
|
|
62
|
+
const result = await check();
|
|
63
|
+
void result;
|
|
64
|
+
void ProfileForm;
|
|
65
|
+
reset();
|
|
66
|
+
dispose();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title createGridTemplates
|
|
3
|
+
*
|
|
4
|
+
* Configurer les templates Vue en grille et leurs commandes.
|
|
5
|
+
*/
|
|
6
|
+
import { createForm } from "@duplojs/form/vue";
|
|
7
|
+
import { templateFormAddButton, templateFormNextButton, templateFormPreviousButton, templateFormRemoveButton, templateFormResetButton, templateFormSelect, useTextInput } from "@duplojs/form/vueDesignSystem";
|
|
8
|
+
import { createGridTemplates } from "@duplojs/form/vueGrid";
|
|
9
|
+
|
|
10
|
+
// La configuration Grid exige les options repeat, step et union, même si le formulaire ne les utilise pas.
|
|
11
|
+
// Les options form, input, multi, check et section peuvent être omises.
|
|
12
|
+
const grid = createGridTemplates({
|
|
13
|
+
repeat: {
|
|
14
|
+
addLabel: "Add",
|
|
15
|
+
removeLabel: "Remove",
|
|
16
|
+
addButton: templateFormAddButton,
|
|
17
|
+
removeButton: templateFormRemoveButton,
|
|
18
|
+
resetButton: templateFormResetButton,
|
|
19
|
+
},
|
|
20
|
+
step: {
|
|
21
|
+
nextLabel: "Continue",
|
|
22
|
+
previousLabel: "Back",
|
|
23
|
+
nextButton: templateFormNextButton,
|
|
24
|
+
previousButton: templateFormPreviousButton,
|
|
25
|
+
resetButton: templateFormResetButton,
|
|
26
|
+
},
|
|
27
|
+
union: { selectInputKind: templateFormSelect },
|
|
28
|
+
input: { columns: 6 },
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Ensemble complet pour createForm.
|
|
32
|
+
const useForm = createForm(grid.useTemplates());
|
|
33
|
+
const { component: TheForm } = useForm(
|
|
34
|
+
useTextInput({
|
|
35
|
+
label: "Title",
|
|
36
|
+
// Surcharge locale de la configuration input.
|
|
37
|
+
template: grid.useInputTemplate({ columns: 12 }),
|
|
38
|
+
}),
|
|
39
|
+
);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title createInput
|
|
3
|
+
*
|
|
4
|
+
* Construire un champ à partir d'un composant Vue compatible avec v-model.
|
|
5
|
+
*/
|
|
6
|
+
import { createInput, type GetFormFieldCheckedValue, type GetFormFieldValue } from "@duplojs/form/vue";
|
|
7
|
+
import AddressInput from "./fixtures/AddressInput.vue";
|
|
8
|
+
import type * as DCommon from "@duplojs/lang/common";
|
|
9
|
+
import * as DDataStructure from "@duplojs/lang/dataStructure";
|
|
10
|
+
import type * as DString from "@duplojs/lang/string";
|
|
11
|
+
|
|
12
|
+
// AddressInput.vue déclare modelValue comme chaîne et exige la prop hint.
|
|
13
|
+
// La fabrique fournit cette prop requise et une valeur initiale inférée depuis le composant.
|
|
14
|
+
const useAddressInput = createInput(
|
|
15
|
+
AddressInput,
|
|
16
|
+
{
|
|
17
|
+
defaultValue: "",
|
|
18
|
+
props: {
|
|
19
|
+
hint: "We use this address to contact you.",
|
|
20
|
+
placeholder: "name@example.com",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const address = useAddressInput({
|
|
26
|
+
label: "Email",
|
|
27
|
+
props: {
|
|
28
|
+
hint: "Your contact address",
|
|
29
|
+
placeholder: "contact@example.com",
|
|
30
|
+
},
|
|
31
|
+
dataStructure: DDataStructure.string([DDataStructure.email()]),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Les props locales doivent respecter le contrat du composant, y compris ses props requises.
|
|
35
|
+
// Elles complètent les props initiales et remplacent les clés communes.
|
|
36
|
+
// La validation enrichit le résultat.
|
|
37
|
+
type _Raw = DCommon.ExpectType<
|
|
38
|
+
GetFormFieldValue<typeof address>,
|
|
39
|
+
string,
|
|
40
|
+
"strict"
|
|
41
|
+
>;
|
|
42
|
+
type _Checked = DCommon.ExpectType<
|
|
43
|
+
GetFormFieldCheckedValue<typeof address>,
|
|
44
|
+
string & DString.Email,
|
|
45
|
+
"strict"
|
|
46
|
+
>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title createTemplate
|
|
3
|
+
*
|
|
4
|
+
* Configurer un composant Vue comme template de formulaire.
|
|
5
|
+
*/
|
|
6
|
+
import { createForm, createTemplate, useMultiLayout } from "@duplojs/form/vue";
|
|
7
|
+
import { useTextInput } from "@duplojs/form/vueDesignSystem";
|
|
8
|
+
import { GridInputTemplate } from "@duplojs/form/vueGrid";
|
|
9
|
+
import { grid } from "../fixtures/templates";
|
|
10
|
+
|
|
11
|
+
// La fabrique fixe le composant et les props par défaut hors props système.
|
|
12
|
+
const useCompactInputTemplate = createTemplate(
|
|
13
|
+
"input",
|
|
14
|
+
GridInputTemplate,
|
|
15
|
+
{ props: { columns: 6 } },
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
// Le template global utilise six colonnes pour les inputs de ce formulaire.
|
|
19
|
+
const useForm = createForm({
|
|
20
|
+
...grid.useTemplates(),
|
|
21
|
+
input: useCompactInputTemplate(),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const { component: ArticleForm, dispose } = useForm(
|
|
25
|
+
useMultiLayout({
|
|
26
|
+
title: useTextInput({ label: "Title" }),
|
|
27
|
+
summary: useTextInput({
|
|
28
|
+
label: "Summary",
|
|
29
|
+
// Cette instance surcharge les colonnes pour ce champ uniquement.
|
|
30
|
+
template: useCompactInputTemplate({ columns: 12 }),
|
|
31
|
+
}),
|
|
32
|
+
}),
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
void ArticleForm;
|
|
36
|
+
dispose();
|